0
0
mirror of https://github.com/vim/vim.git synced 2025-10-23 08:44:20 -04:00

patch 9.1.1732: filetype: .inc file detection can be improved

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>
This commit is contained in:
Martin Schwan
2025-09-04 22:09:26 +02:00
committed by Christian Brabandt
parent 63a02ca39a
commit 9fd1a657d2
3 changed files with 43 additions and 20 deletions

View File

@@ -3,7 +3,7 @@ vim9script
# Vim functions for file type detection # Vim functions for file type detection
# #
# Maintainer: The Vim Project <https://github.com/vim/vim> # 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> # Former Maintainer: Bram Moolenaar <Bram@vim.org>
# These functions are moved here from runtime/filetype.vim to make startup # These functions are moved here from runtime/filetype.vim to make startup
@@ -828,26 +828,32 @@ export def FTinc()
if exists("g:filetype_inc") if exists("g:filetype_inc")
exe "setf " .. g:filetype_inc exe "setf " .. g:filetype_inc
else else
var lines = getline(1) .. getline(2) .. getline(3) for lnum in range(1, min([line("$"), 20]))
if lines =~? "perlscript" var line = getline(lnum)
setf aspperl if line =~? "perlscript"
elseif lines =~ "<%" setf aspperl
setf aspvbs return
elseif lines =~ "<?" elseif line =~ "<%"
setf php setf aspvbs
# Pascal supports // comments but they're vary rarely used for file return
# headers so assume POV-Ray elseif line =~ "<?"
elseif lines =~ '^\s*\%({\|(\*\)' || lines =~? ft_pascal_keywords setf php
setf pascal return
elseif lines =~# '\<\%(require\|inherit\)\>' || lines =~# '[A-Z][A-Za-z0-9_:${}]*\s\+\%(??\|[?:+]\)\?= ' # Pascal supports // comments but they're vary rarely used for file
setf bitbake # headers so assume POV-Ray
else elseif line =~ '^\s*\%({\|(\*\)' || line =~? ft_pascal_keywords
FTasmsyntax() setf pascal
if exists("b:asmsyntax") return
exe "setf " .. fnameescape(b:asmsyntax) elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\s\+\%(??\|[?:+.]\)\?=.\? '
else setf bitbake
setf pov return
endif endif
endfor
FTasmsyntax()
if exists("b:asmsyntax")
exe "setf " .. fnameescape(b:asmsyntax)
else
setf pov
endif endif
endif endif
enddef enddef

View File

@@ -2694,6 +2694,21 @@ func Test_inc_file()
call assert_equal('bitbake', &filetype) call assert_equal('bitbake', &filetype)
bwipe! 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 " asm
call writefile(['asmsyntax=foo'], 'Xfile.inc') call writefile(['asmsyntax=foo'], 'Xfile.inc')
split Xfile.inc split Xfile.inc

View File

@@ -724,6 +724,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1732,
/**/ /**/
1731, 1731,
/**/ /**/