neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 41179a6bc125303d917c78bdc806983ccc5f287f
parent 2763d061008ab714266893a4892508948c6f9fbe
Author: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Date:   Sat, 31 May 2025 01:34:50 +0900

vim-patch:9.1.1342: Shebang filetype detection can be improved

Problem:  Shebang filetype detection can be improved
Solution: Improve detection logic (Eisuke Kawashima)

Vim does not correctly detect filetype from
  - `#!/usr/bin/env --split-string=awk -f`
  - `#!/usr/bin/env -S -i awk -f`
  - `#!/usr/bin/env -S VAR= awk -f`
So update the current detection logic to detect those cases.

closes: vim/vim#17199

https://github.com/vim/vim/commit/f102f4c2e80f5493a02a7b1130f11615d60b6295

Co-authored-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>

Diffstat:
Mruntime/lua/vim/filetype/detect.lua | 9++++-----
Mtest/old/testdir/test_filetype.vim | 4++--
2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/runtime/lua/vim/filetype/detect.lua b/runtime/lua/vim/filetype/detect.lua @@ -1959,11 +1959,10 @@ local function match_from_hashbang(contents, path, dispatch_extension) -- "#!/usr/bin/bash" to make matching easier. -- Recognize only a few {options} that are commonly used. if matchregex(first_line, [[^#!\s*\S*\<env\s]]) then - first_line = first_line:gsub('%S+=%S+', '') - first_line = first_line - :gsub('%-%-ignore%-environment', '', 1) - :gsub('%-%-split%-string', '', 1) - :gsub('%-[iS]', '', 1) + first_line = fn.substitute(first_line, [[\s\zs--split-string\(\s\|=\)]], '', '') + first_line = fn.substitute(first_line, [[\s\zs[A-Za-z0-9_]\+=\S*\ze\s]], '', 'g') + first_line = + fn.substitute(first_line, [[\s\zs\%(-[iS]\+\|--ignore-environment\)\ze\s]], '', 'g') first_line = fn.substitute(first_line, [[\<env\s\+]], '', '') end diff --git a/test/old/testdir/test_filetype.vim b/test/old/testdir/test_filetype.vim @@ -1068,10 +1068,10 @@ func s:GetScriptEnvChecks() abort return { \ 'perl': [['#!/usr/bin/env VAR=val perl']], \ 'scala': [['#!/usr/bin/env VAR=val VVAR=vval scala']], - \ 'awk': [['#!/usr/bin/env VAR=val -i awk']], + \ 'awk': [['#!/usr/bin/env --split-string=VAR= awk -vFS="," -f']], \ 'execline': [['#!/usr/bin/env execlineb']], \ 'scheme': [['#!/usr/bin/env VAR=val --ignore-environment scheme']], - \ 'python': [['#!/usr/bin/env VAR=val -S python -w -T']], + \ 'python': [['#!/usr/bin/env -S -i VAR=val python -B -u']], \ 'wml': [['#!/usr/bin/env VAR=val --split-string wml']], \ 'nix': [['#!/usr/bin/env nix-shell']], \ }