mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-10 04:23:51 -05:00
128 lines
2.6 KiB
VimL
128 lines
2.6 KiB
VimL
func! polyglot#shebang#Detect()
|
|
let ft = s:Filetype()
|
|
if ft != ""
|
|
let &ft = ft
|
|
endif
|
|
|
|
if &ft == ""
|
|
runtime! scripts.vim
|
|
endif
|
|
|
|
return &ft != ""
|
|
endfunc
|
|
|
|
let s:r_hashbang = '^#!\s*\(\S\+\)\s*\(.*\)\s*'
|
|
let s:r_envflag = '%(\S\+=\S\+\|-[iS]\|--ignore-environment\|--split-string\)'
|
|
let s:r_env = '^\%(\' . s:r_envflag . '\s\+\)*\(\S\+\)'
|
|
|
|
func! s:Filetype()
|
|
let l:line1 = getline(1)
|
|
|
|
if l:line1 !~# "^#!"
|
|
return
|
|
endif
|
|
|
|
let l:pathrest = matchlist(l:line1, s:r_hashbang)
|
|
|
|
if len(l:pathrest) == 0
|
|
return
|
|
endif
|
|
|
|
let [_, l:path, l:rest; __] = l:pathrest
|
|
|
|
let l:script = split(l:path, "/")[-1]
|
|
|
|
if l:script == "env"
|
|
let l:argspath = matchlist(l:rest, s:r_env)
|
|
if len(l:argspath) == 0
|
|
return
|
|
endif
|
|
|
|
let l:script = l:argspath[1]
|
|
endif
|
|
|
|
if has_key(s:interpreters, l:script)
|
|
return s:interpreters[l:script]
|
|
endif
|
|
|
|
for interpreter in keys(s:interpreters)
|
|
if l:script =~# '^' . interpreter
|
|
return s:interpreters[interpreter]
|
|
endif
|
|
endfor
|
|
endfunc
|
|
|
|
" DO NOT EDIT CODE BELOW, IT IS GENERATED WITH MAKEFILE
|
|
|
|
let s:interpreters = {
|
|
\ 'osascript': 'applescript',
|
|
\ 'tcc': 'c',
|
|
\ 'coffee': 'coffee',
|
|
\ 'crystal': 'crystal',
|
|
\ 'dart': 'dart',
|
|
\ 'elixir': 'elixir',
|
|
\ 'escript': 'erlang',
|
|
\ 'fish': 'fish',
|
|
\ 'gnuplot': 'gnuplot',
|
|
\ 'groovy': 'groovy',
|
|
\ 'runhaskell': 'haskell',
|
|
\ 'chakra': 'javascript',
|
|
\ 'd8': 'javascript',
|
|
\ 'gjs': 'javascript',
|
|
\ 'js': 'javascript',
|
|
\ 'node': 'javascript',
|
|
\ 'nodejs': 'javascript',
|
|
\ 'qjs': 'javascript',
|
|
\ 'rhino': 'javascript',
|
|
\ 'v8': 'javascript',
|
|
\ 'v8-shell': 'javascript',
|
|
\ 'julia': 'julia',
|
|
\ 'lua': 'lua',
|
|
\ 'moon': 'moon',
|
|
\ 'ocaml': 'ocaml',
|
|
\ 'ocamlrun': 'ocaml',
|
|
\ 'ocamlscript': 'ocaml',
|
|
\ 'cperl': 'perl',
|
|
\ 'perl': 'perl',
|
|
\ 'php': 'php',
|
|
\ 'swipl': 'prolog',
|
|
\ 'yap': 'prolog',
|
|
\ 'pwsh': 'ps1',
|
|
\ 'python': 'python',
|
|
\ 'python2': 'python',
|
|
\ 'python3': 'python',
|
|
\ 'qmake': 'qmake',
|
|
\ 'Rscript': 'r',
|
|
\ 'racket': 'racket',
|
|
\ 'perl6': 'raku',
|
|
\ 'raku': 'raku',
|
|
\ 'rakudo': 'raku',
|
|
\ 'ruby': 'ruby',
|
|
\ 'macruby': 'ruby',
|
|
\ 'rake': 'ruby',
|
|
\ 'jruby': 'ruby',
|
|
\ 'rbx': 'ruby',
|
|
\ 'scala': 'scala',
|
|
\ 'ash': 'sh',
|
|
\ 'bash': 'sh',
|
|
\ 'dash': 'sh',
|
|
\ 'ksh': 'sh',
|
|
\ 'mksh': 'sh',
|
|
\ 'pdksh': 'sh',
|
|
\ 'rc': 'sh',
|
|
\ 'sh': 'sh',
|
|
\ 'zsh': 'sh',
|
|
\ 'boolector': 'smt2',
|
|
\ 'cvc4': 'smt2',
|
|
\ 'mathsat5': 'smt2',
|
|
\ 'opensmt': 'smt2',
|
|
\ 'smtinterpol': 'smt2',
|
|
\ 'smt-rat': 'smt2',
|
|
\ 'stp': 'smt2',
|
|
\ 'verit': 'smt2',
|
|
\ 'yices2': 'smt2',
|
|
\ 'z3': 'smt2',
|
|
\ 'deno': 'typescript',
|
|
\ 'ts-node': 'typescript',
|
|
\ }
|