]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(filetype): fix incorrect pattern and break early
authorzeertzjq <zeertzjq@outlook.com>
Wed, 9 Jul 2025 16:23:14 +0000 (18:23 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 9 Jul 2025 16:23:52 +0000 (18:23 +0200)
- Using `\n` is incorrect, as result of getline() does not contain line
  breaks and only uses `\n` for NUL bytes.
- Return when b:asmsyntax is set, like many other filetypes.

closes: #17706

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/dist/ft.vim

index ff1dc037d2a19e030314ec595775759cf5d53f13..380b97bf4176784a6c4297bf21b3471f67bb314c 100644 (file)
@@ -3,7 +3,7 @@ vim9script
 # Vim functions for file type detection
 #
 # Maintainer:          The Vim Project <https://github.com/vim/vim>
-# Last Change:         2025 Jul 08
+# Last Change:         2025 Jul 09
 # Former Maintainer:   Bram Moolenaar <Bram@vim.org>
 
 # These functions are moved here from runtime/filetype.vim to make startup
@@ -61,27 +61,30 @@ export def FTasmsyntax()
   var match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
   if match != ''
     b:asmsyntax = match
-  else
-    # Use heuristics
-    var is_slash_star_encountered = false
-    var i = 1
-    const n = min([50, line("$")])
-    while i <= n
-      const line = getline(i)
-      if line =~ '\%(^\|\n\)/\*'
-        is_slash_star_encountered = true
-      endif
-      if line =~# '^; Listing generated by Microsoft' || line =~? '\%(^\|\n\)\%(\%(CONST\|_BSS\|_DATA\|_TEXT\)\s\+SEGMENT\>\)\|\s*\.[2-6]86P\?\>\|\s*\.XMM\>'
-        b:asmsyntax = "masm"
-      elseif line =~ 'Texas Instruments Incorporated' || (line =~ '\%(^\|\n\)\*' && !is_slash_star_encountered)
-        # tiasm uses `* commment`, but detection is unreliable if '/*' is seen
-        b:asmsyntax = "tiasm"
-      elseif ((line =~? '\.title\>\|\.ident\>\|\.macro\>\|\.subtitle\>\|\.library\>'))
-        b:asmsyntax = "vmasm"
-      endif
-      i += 1
-    endwhile
+    return
   endif
+  # Use heuristics
+  var is_slash_star_encountered = false
+  var i = 1
+  const n = min([50, line("$")])
+  while i <= n
+    const line = getline(i)
+    if line =~ '^/\*'
+      is_slash_star_encountered = true
+    endif
+    if line =~# '^; Listing generated by Microsoft' || line =~? '^\%(\%(CONST\|_BSS\|_DATA\|_TEXT\)\s\+SEGMENT\>\)\|\s*\.[2-6]86P\?\>\|\s*\.XMM\>'
+      b:asmsyntax = "masm"
+      return
+    elseif line =~ 'Texas Instruments Incorporated' || (line =~ '^\*' && !is_slash_star_encountered)
+      # tiasm uses `* commment`, but detection is unreliable if '/*' is seen
+      b:asmsyntax = "tiasm"
+      return
+    elseif ((line =~? '\.title\>\|\.ident\>\|\.macro\>\|\.subtitle\>\|\.library\>'))
+      b:asmsyntax = "vmasm"
+      return
+    endif
+    i += 1
+  endwhile
 enddef
 
 var ft_visual_basic_content = '\c^\s*\%(Attribute\s\+VB_Name\|Begin\s\+\%(VB\.\|{\%(\x\+-\)\+\x\+}\)\)'