]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1732: filetype: .inc file detection can be improved v9.1.1732
authorMartin Schwan <m.schwan@phytec.de>
Thu, 4 Sep 2025 20:09:26 +0000 (22:09 +0200)
committerChristian Brabandt <cb@256bit.org>
Thu, 4 Sep 2025 20:09:26 +0000 (22:09 +0200)
Problem:  filetype: .inc file detection can be improved
Solution: Update filetype detection for Pascal and BitBake code
          (Martin Schwan).

Fix the detection of .inc files containing Pascal and BitBake code:

- the concatenated string, merged from three lines, only contains one
  beginning and the pattern "^" would not match as expected. Use a range()
  loop to iterate each line string individually. This way, the pattern "^"
  works for beginning of lines.

- improve BitBake include file detection by also matching forward-slashes
  "/" in variable names and assignment operators with a dot ".=" and "=.".
  Valid examples, which should match, are:

    PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"
    MACHINEOVERRIDES =. "qemuall:"
    BBPATH .= ":${LAYERDIR}"

- parse twenty instead of just three lines, to accommodate for potential
  comments at the beginning of files

closes: #18202

Signed-off-by: Martin Schwan <m.schwan@phytec.de>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/dist/ft.vim
src/testdir/test_filetype.vim
src/version.c

index bb2bc2c1c58e96ee94908b90fc577fbb99a30b25..4d39689cc0cc7a04ebcb74ad865e5ab1f406693e 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 Aug 26
+# Last Change:         2025 Sep 04
 # Former Maintainer:   Bram Moolenaar <Bram@vim.org>
 
 # These functions are moved here from runtime/filetype.vim to make startup
@@ -828,26 +828,32 @@ export def FTinc()
   if exists("g:filetype_inc")
     exe "setf " .. g:filetype_inc
   else
-    var lines = getline(1) .. getline(2) .. getline(3)
-    if lines =~? "perlscript"
-      setf aspperl
-    elseif lines =~ "<%"
-      setf aspvbs
-    elseif lines =~ "<?"
-      setf php
-    # Pascal supports // comments but they're vary rarely used for file
-    # headers so assume POV-Ray
-    elseif lines =~ '^\s*\%({\|(\*\)' || lines =~? ft_pascal_keywords
-      setf pascal
-    elseif lines =~# '\<\%(require\|inherit\)\>' || lines =~# '[A-Z][A-Za-z0-9_:${}]*\s\+\%(??\|[?:+]\)\?= '
-      setf bitbake
-    else
-      FTasmsyntax()
-      if exists("b:asmsyntax")
-        exe "setf " .. fnameescape(b:asmsyntax)
-      else
-        setf pov
+    for lnum in range(1, min([line("$"), 20]))
+      var line = getline(lnum)
+      if line =~? "perlscript"
+        setf aspperl
+        return
+      elseif line =~ "<%"
+        setf aspvbs
+        return
+      elseif line =~ "<?"
+        setf php
+        return
+      # Pascal supports // comments but they're vary rarely used for file
+      # headers so assume POV-Ray
+      elseif line =~ '^\s*\%({\|(\*\)' || line =~? ft_pascal_keywords
+        setf pascal
+        return
+      elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\s\+\%(??\|[?:+.]\)\?=.\? '
+        setf bitbake
+        return
       endif
+    endfor
+    FTasmsyntax()
+    if exists("b:asmsyntax")
+      exe "setf " .. fnameescape(b:asmsyntax)
+    else
+      setf pov
     endif
   endif
 enddef
index ee0eaa095017cf77ebc50182a3badda5201162cb..d91d1bafe0f921a2f46beb8864cee6d0b3f30ca8 100644 (file)
@@ -2694,6 +2694,21 @@ func Test_inc_file()
   call assert_equal('bitbake', &filetype)
   bwipe!
 
+  call writefile(['PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"'], 'Xfile.inc')
+  split Xfile.inc
+  call assert_equal('bitbake', &filetype)
+  bwipe!
+
+  call writefile(['MACHINEOVERRIDES =. "qemuall:"'], 'Xfile.inc')
+  split Xfile.inc
+  call assert_equal('bitbake', &filetype)
+  bwipe!
+
+  call writefile(['BBPATH .= ":${LAYERDIR}"'], 'Xfile.inc')
+  split Xfile.inc
+  call assert_equal('bitbake', &filetype)
+  bwipe!
+
   " asm
   call writefile(['asmsyntax=foo'], 'Xfile.inc')
   split Xfile.inc
index c2381542b9add031f7984e4e631f52789e7992aa..b28f72e8bb65d999593e6f1631a84b9834a1b08b 100644 (file)
@@ -724,6 +724,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1732,
 /**/
     1731,
 /**/