]> granicus.if.org Git - vim/commitdiff
patch 8.2.0930: script filetype detection trips over env -S argument v8.2.0930
authorBram Moolenaar <Bram@vim.org>
Sun, 7 Jun 2020 19:58:54 +0000 (21:58 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 7 Jun 2020 19:58:54 +0000 (21:58 +0200)
Problem:    Script filetype detection trips over env -S argument.
Solution:   Remove "-S" and "--ignore-environment". (closes #5013)
            Add tests.

runtime/scripts.vim
src/testdir/test_filetype.vim
src/version.c

index ba33f0ebfeaecf7001632bd7da2802cd4b563fcc..6aae2b1ec3e12bc97a8b18b18fc348e77e509e98 100644 (file)
@@ -1,7 +1,7 @@
 " Vim support file to detect file types in scripts
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last change: 2020 Mar 06
+" Last change: 2020 Jun 07
 
 " This file is called by an autocommand for every file that has just been
 " loaded into a buffer.  It checks if the type of file can be recognized by
@@ -35,10 +35,12 @@ let s:line1 = getline(1)
 if s:line1 =~# "^#!"
   " A script that starts with "#!".
 
-  " Check for a line like "#!/usr/bin/env VAR=val bash".  Turn it into
+  " Check for a line like "#!/usr/bin/env {options} bash".  Turn it into
   " "#!/usr/bin/bash" to make matching easier.
+  " Recognize only a few {options} that are commonly used.
   if s:line1 =~# '^#!\s*\S*\<env\s'
     let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
+    let s:line1 = substitute(s:line1, '\(-[iS]\|--ignore-environment\|--split-string\)', '', '')
     let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
   endif
 
index 0929e14d851859412feb3f9de148bf943c4ef229..244de242ce3d77e37c2567e3794a4c66fd7cef49 100644 (file)
@@ -607,9 +607,19 @@ let s:script_checks = {
       \ 'yaml': [['%YAML 1.2']],
       \ }
 
-func Test_script_detection()
+" Various forms of "env" optional arguments.
+let s:script_env_checks = {
+      \ 'perl': [['#!/usr/bin/env VAR=val perl']],
+      \ 'scala': [['#!/usr/bin/env VAR=val VVAR=vval scala']],
+      \ 'awk': [['#!/usr/bin/env VAR=val -i awk']],
+      \ 'scheme': [['#!/usr/bin/env VAR=val --ignore-environment scheme']],
+      \ 'python': [['#!/usr/bin/env VAR=val -S python -w -T']],
+      \ 'wml': [['#!/usr/bin/env VAR=val --split-string wml']],
+      \ }
+
+func Run_script_detection(test_dict)
   filetype on
-  for [ft, files] in items(s:script_checks)
+  for [ft, files] in items(a:test_dict)
     for file in files
       call writefile(file, 'Xtest')
       split Xtest
@@ -621,6 +631,11 @@ func Test_script_detection()
   filetype off
 endfunc
 
+func Test_script_detection()
+  call Run_script_detection(s:script_checks)
+  call Run_script_detection(s:script_env_checks)
+endfunc
+
 func Test_setfiletype_completion()
   call feedkeys(":setfiletype java\<C-A>\<C-B>\"\<CR>", 'tx')
   call assert_equal('"setfiletype java javacc javascript javascriptreact', @:)
index 3015f8fd16b5ab0fa66ba00495cd343eeaafcb3e..e446a7be41ae73f87e0e09027667d0f35d529b06 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    930,
 /**/
     929,
 /**/