From 7cb24917a112ba473cb351bdcdc48b8adbd46793 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera' via vim_dev Date: Wed, 18 Dec 2024 17:52:48 +0100 Subject: [PATCH] patch 9.1.0953: filetype: APKBUILD files not correctly detected Problem: filetype: APKBUILD files not correctly detected Solution: detect 'APKBUILD' files as apkbuild filetype, include a apkbuild syntax script (which basically just sources the sh.vim syntax file) (Hugo Osvaldo Barrera) Vim plugins (e.g.: ALE, nvim-lspconfig, etc) rely on filetype to determine which integrations/helpers are applicable. They expect filetype=apkbuild for APKBUILD files. On the other hand, plugins also enable bash-specific linters and functionality when filetype=bash, but APKBUILD files are POSIX sh, not bash, so these often provide bogus results. Change the filetype for APKBUILD to a 'apkbuild', so that tools and ftplugin can properly target these files. This filetype will use the existing `sh` syntax rules, since these are applicable for them. Signed-off-by: Hugo Osvaldo Barrera' via vim_dev Signed-off-by: Christian Brabandt --- runtime/filetype.vim | 7 ++++--- runtime/syntax/apkbuild.vim | 17 +++++++++++++++++ src/testdir/test_filetype.vim | 3 ++- src/version.c | 2 ++ 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 runtime/syntax/apkbuild.vim diff --git a/runtime/filetype.vim b/runtime/filetype.vim index fe3d4b554c..8b3d44db55 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -2273,12 +2273,13 @@ au BufNewFile,BufRead *.decl,*.dcl,*.dec au BufNewFile,BufRead catalog setf catalog " Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc. -" Gentoo ebuilds, Arch Linux PKGBUILDs and Alpine Linux APKBUILDs are actually -" bash scripts. +" Gentoo ebuilds and Arch Linux PKGBUILDs are actually bash scripts. " NOTE: Patterns ending in a star are further down, these have lower priority. -au BufNewFile,BufRead .bashrc,bashrc,bash.bashrc,.bash[_-]profile,.bash[_-]logout,.bash[_-]aliases,.bash[_-]history,bash-fc[-.],*.ebuild,*.bash,*.eclass,PKGBUILD,APKBUILD,*.bats,*.cygport call dist#ft#SetFileTypeSH("bash") +au BufNewFile,BufRead .bashrc,bashrc,bash.bashrc,.bash[_-]profile,.bash[_-]logout,.bash[_-]aliases,.bash[_-]history,bash-fc[-.],*.ebuild,*.bash,*.eclass,PKGBUILD,*.bats,*.cygport call dist#ft#SetFileTypeSH("bash") au BufNewFile,BufRead .kshrc,*.ksh call dist#ft#SetFileTypeSH("ksh") au BufNewFile,BufRead */etc/profile,.profile,*.sh,*.env{rc,} call dist#ft#SetFileTypeSH(getline(1)) +" Alpine Linux APKBUILDs are actually POSIX sh scripts with special treatment. +au BufNewFile,BufRead APKBUILD setf apkbuild " Shell script (Arch Linux) or PHP file (Drupal) au BufNewFile,BufRead *.install diff --git a/runtime/syntax/apkbuild.vim b/runtime/syntax/apkbuild.vim new file mode 100644 index 0000000000..f969ff0e2e --- /dev/null +++ b/runtime/syntax/apkbuild.vim @@ -0,0 +1,17 @@ +" Vim syntax file +" Language: apkbuild +" Maintainer: The Vim Project +" Last Change: 2024 Dec 22 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" The actual syntax is in sh.vim and controlled by buffer-local variables. +unlet! b:is_bash b:is_kornshell +let b:is_sh = 1 + +runtime! syntax/sh.vim + +let b:current_syntax = 'apkbuild' diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 4761e7137e..b5e2dc0b15 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -107,6 +107,7 @@ def s:GetFilenameChecks(): dict> '/etc/httpd/sites-some/file', '/etc/httpd/conf.file/conf'], apachestyle: ['/etc/proftpd/file.config,/etc/proftpd/conf.file/file', '/etc/proftpd/conf.file/file', '/etc/proftpd/file.conf', '/etc/proftpd/file.conf-file', 'any/etc/proftpd/conf.file/file', 'any/etc/proftpd/file.conf', 'any/etc/proftpd/file.conf-file', 'proftpd.conf', 'proftpd.conf-file'], + apkbuild: ['APKBUILD'], applescript: ['file.scpt'], aptconf: ['apt.conf', '/.aptitude/config', 'any/.aptitude/config'], arch: ['.arch-inventory', '=tagging-method'], @@ -683,7 +684,7 @@ def s:GetFilenameChecks(): dict> setserial: ['/etc/serial.conf', 'any/etc/serial.conf'], sexplib: ['file.sexp'], sh: ['.bashrc', '.bash_profile', '.bash-profile', '.bash_logout', '.bash-logout', '.bash_aliases', '.bash-aliases', '.bash_history', '.bash-history', - '/tmp/bash-fc-3Ozjlw', '/tmp/bash-fc.3Ozjlw', 'PKGBUILD', 'APKBUILD', 'file.bash', '/usr/share/doc/bash-completion/filter.sh', + '/tmp/bash-fc-3Ozjlw', '/tmp/bash-fc.3Ozjlw', 'PKGBUILD', 'file.bash', '/usr/share/doc/bash-completion/filter.sh', '/etc/udev/cdsymlinks.conf', 'any/etc/udev/cdsymlinks.conf', 'file.bats', '.ash_history', 'any/etc/neofetch/config.conf', '.xprofile', 'user-dirs.defaults', 'user-dirs.dirs', 'makepkg.conf', '.makepkg.conf', 'file.mdd', 'file.cygport', '.env', '.envrc', 'devscripts.conf', '.devscripts', 'file.lo', 'file.la', 'file.lai'], diff --git a/src/version.c b/src/version.c index dc7a029f4b..51498fd163 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 953, /**/ 952, /**/