diff options
Diffstat (limited to '')
| -rw-r--r-- | README.md | 5 | ||||
| -rw-r--r-- | autoload/polyglot.vim | 103 | ||||
| -rw-r--r-- | autoload/sleuth.vim | 8 | ||||
| -rw-r--r-- | ftdetect/polyglot.vim | 141 | ||||
| -rw-r--r-- | ftplugin/bzl.vim | 98 | ||||
| -rw-r--r-- | ftplugin/prolog.vim | 24 | ||||
| -rw-r--r-- | heuristics.yaml | 69 | ||||
| -rw-r--r-- | indent/bzl.vim | 98 | ||||
| -rw-r--r-- | indent/prolog.vim | 71 | ||||
| -rw-r--r-- | packages.yaml | 39 | ||||
| -rwxr-xr-x | scripts/build | 21 | ||||
| -rw-r--r-- | scripts/test_extensions.vim | 75 | ||||
| -rw-r--r-- | scripts/test_filetypes.vim | 8 | ||||
| -rw-r--r-- | syntax/bzl.vim | 20 | ||||
| -rw-r--r-- | syntax/prolog.vim | 122 | ||||
| -rw-r--r-- | syntax/tads.vim | 175 | 
16 files changed, 1035 insertions, 42 deletions
| @@ -7,7 +7,7 @@ A collection of language packs for Vim.  > One to rule them all, one to find them, one to bring them all and in the darkness bind them.  - It **won't affect your startup time**, as scripts are loaded only on demand\*. -- It **installs and updates 120+ times faster** than the <!--Package Count-->196<!--/Package Count--> packages it consists of. +- It **installs and updates 120+ times faster** than the <!--Package Count-->199<!--/Package Count--> packages it consists of.  - It is more secure because scripts loaded for all extensions are generated by vim-polyglot (ftdetect).  - Solid syntax and indentation support (other features skipped). Only the best language packs.  - All unnecessary files are ignored (like enormous documentation from php support). @@ -81,6 +81,7 @@ If you need full functionality of any plugin, please use it directly with your p  - [basic](https://github.com/vim/vim/tree/master/runtime)  - [blade](https://github.com/jwalton512/vim-blade)  - [brewfile](https://github.com/bfontaine/Brewfile.vim) +- [bzl](https://github.com/vim/vim/tree/master/runtime)  - [c/c++](https://github.com/vim-jp/vim-cpp)  - [caddyfile](https://github.com/isobit/vim-caddyfile)  - [carp](https://github.com/hellerve/carp-vim) @@ -177,6 +178,7 @@ If you need full functionality of any plugin, please use it directly with your p  - [plantuml](https://github.com/aklt/plantuml-syntax)  - [pony](https://github.com/jakwings/vim-pony)  - [powershell](https://github.com/PProvost/vim-ps1) +- [prolog](https://github.com/vim/vim/tree/master/runtime)  - [protobuf](https://github.com/uarun/vim-protobuf)  - [pug](https://github.com/digitaltoad/vim-pug)  - [puppet](https://github.com/rodjek/vim-puppet) @@ -213,6 +215,7 @@ If you need full functionality of any plugin, please use it directly with your p  - [swift](https://github.com/keith/swift.vim)  - [sxhkd](https://github.com/baskerville/vim-sxhkdrc)  - [systemd](https://github.com/wgwoods/vim-systemd-syntax) +- [tads](https://github.com/vim/vim/tree/master/runtime)  - [terraform](https://github.com/hashivim/vim-terraform)  - [textile](https://github.com/timcharper/textile.vim)  - [thrift](https://github.com/solarnz/thrift.vim) diff --git a/autoload/polyglot.vim b/autoload/polyglot.vim index 29287ece..5d4bfe9a 100644 --- a/autoload/polyglot.vim +++ b/autoload/polyglot.vim @@ -10,11 +10,11 @@ func! s:Setf(ft)    endif  endfunc -func! polyglot#Heuristics() +func! polyglot#Shebang()    " Try to detect filetype from shebang -  let l:filetype = polyglot#Shebang() -  if l:filetype != "" -    exec "setf " . l:filetype +  let ft = polyglot#ShebangFiletype() +  if ft != "" +    call s:Setf(ft)      return 1    endif @@ -52,6 +52,8 @@ let s:interpreters = {    \ 'cperl': 'perl',    \ 'perl': 'perl',    \ 'php': 'php', +  \ 'swipl': 'prolog', +  \ 'yap': 'prolog',    \ 'pwsh': 'ps1',    \ 'python': 'python',    \ 'python2': 'python', @@ -95,7 +97,7 @@ 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! polyglot#Shebang() +func! polyglot#ShebangFiletype()    let l:line1 = getline(1)    if l:line1 !~# "^#!" @@ -133,7 +135,7 @@ func! polyglot#Shebang()  endfunc  func! polyglot#DetectInpFiletype() -  let line = getline(1) +  let line = getline(nextnonblank(1))    if line =~# '^\*'      call s:Setf('abaqus') | return    endif @@ -269,10 +271,10 @@ func! polyglot#DetectIdrFiletype()      if line =~# '^%access .*'        call s:Setf('idris') | return      endif -    if exists("g:filetype_idr") -      call s:Setf(g:filetype_idr) | return -    endif    endfor +  if exists("g:filetype_idr") +    call s:Setf(g:filetype_idr) | return +  endif    call s:Setf('idris2') | return  endfunc @@ -296,6 +298,89 @@ func! polyglot#DetectBasFiletype()    call s:Setf('basic') | return  endfunc +func! polyglot#DetectPmFiletype() +  let line = getline(nextnonblank(1)) +  if line =~# 'XPM2' +    call s:Setf('xpm2') | return +  endif +  if line =~# 'XPM' +    call s:Setf('xpm') | return +  endif +  for lnum in range(1, min([line("$"), 50])) +    let line = getline(lnum) +    if line =~# '^\s*\%(use\s\+v6\(\<\|\>\)\|\(\<\|\>\)module\(\<\|\>\)\|\(\<\|\>\)\%(my\s\+\)\=class\(\<\|\>\)\)' +      call s:Setf('raku') | return +    endif +    if line =~# '\(\<\|\>\)use\s\+\%(strict\(\<\|\>\)\|v\=5\.\)' +      call s:Setf('perl') | return +    endif +  endfor +  if exists("g:filetype_pm") +    call s:Setf(g:filetype_pm) | return +  endif +  call s:Setf('perl') | return +endfunc + +func! polyglot#DetectPlFiletype() +  let line = getline(nextnonblank(1)) +  if line =~# '^[^#]*:-' || line =~# '^\s*\%(%\|/\*\)' || line =~# '\.\s*$' +    call s:Setf('prolog') | return +  endif +  for lnum in range(1, min([line("$"), 50])) +    let line = getline(lnum) +    if line =~# '^\s*\%(use\s\+v6\(\<\|\>\)\|\(\<\|\>\)module\(\<\|\>\)\|\(\<\|\>\)\%(my\s\+\)\=class\(\<\|\>\)\)' +      call s:Setf('raku') | return +    endif +    if line =~# '\(\<\|\>\)use\s\+\%(strict\(\<\|\>\)\|v\=5\.\)' +      call s:Setf('perl') | return +    endif +  endfor +  if exists("g:filetype_pl") +    call s:Setf(g:filetype_pl) | return +  endif +  call s:Setf('perl') | return +endfunc + +func! polyglot#DetectTFiletype() +  for lnum in range(1, min([line("$"), 5])) +    let line = getline(lnum) +    if line =~# '^\.' +      call s:Setf('nroff') | return +    endif +  endfor +  for lnum in range(1, min([line("$"), 50])) +    let line = getline(lnum) +    if line =~# '^\s*\%(use\s\+v6\(\<\|\>\)\|\(\<\|\>\)module\(\<\|\>\)\|\(\<\|\>\)\%(my\s\+\)\=class\(\<\|\>\)\)' +      call s:Setf('raku') | return +    endif +    if line =~# '\(\<\|\>\)use\s\+\%(strict\(\<\|\>\)\|v\=5\.\)' +      call s:Setf('perl') | return +    endif +  endfor +  if exists("g:filetype_t") +    call s:Setf(g:filetype_t) | return +  endif +  call s:Setf('perl') | return +endfunc + +func! polyglot#DetectTt2Filetype() +  for lnum in range(1, min([line("$"), 3])) +    let line = getline(lnum) +    if line =~? '<\%(!DOCTYPE HTML\|[%?]\|html\)' +      call s:Setf('tt2html') | return +    endif +  endfor +  call s:Setf('tt2') | return +endfunc + +func! polyglot#DetectHtmlFiletype() +  let line = getline(nextnonblank(1)) +  if line =~# '^\(%\|<[%&].*>\)' +    call s:Setf('mason') | return +  endif +  call s:Setf('html') | return +endfunc +  " Restore 'cpoptions'  let &cpo = s:cpo_save  unlet s:cpo_save diff --git a/autoload/sleuth.vim b/autoload/sleuth.vim index c1de82cd..ae101289 100644 --- a/autoload/sleuth.vim +++ b/autoload/sleuth.vim @@ -38,6 +38,7 @@ let s:globs = {    \ 'basic': '*.basic',    \ 'blade': '*.blade,*.blade.php',    \ 'brewfile': 'Brewfile', +  \ 'bzl': '*.bzl,BUCK,BUILD,BUILD.bazel,Tiltfile,WORKSPACE',    \ 'c': '*.c,*.cats,*.h,*.idc,*.qc',    \ 'caddyfile': 'Caddyfile',    \ 'carp': '*.carp', @@ -129,6 +130,7 @@ let s:globs = {    \ 'mako': '*.mako,*.mao',    \ 'markdown': '*.md,*.markdown,*.mdown,*.mdwn,*.mkd,*.mkdn,*.mkdown,*.ronn,*.workbook,contents.lr',    \ 'markdown.mdx': '*.mdx', +  \ 'mason': '*.mason,*.mhtml,*.comp',    \ 'meson': 'meson.build,meson_options.txt',    \ 'mma': '*.mathematica,*.cdf,*.m,*.ma,*.mt,*.nb,*.nbp,*.wl,*.wlt,*.wls,*.mma',    \ 'moon': '*.moon', @@ -151,7 +153,9 @@ let s:globs = {    \ 'perl': '*.pl,*.al,*.cgi,*.fcgi,*.perl,*.ph,*.plx,*.pm,*.psgi,*.t,Makefile.PL,Rexfile,ack,cpanfile',    \ 'php': '*.php,*.aw,*.ctp,*.fcgi,*.inc,*.php3,*.php4,*.php5,*.phps,*.phpt,Phakefile',    \ 'plantuml': '*.puml,*.iuml,*.plantuml,*.uml,*.pu', +  \ 'pod': '*.pod',    \ 'pony': '*.pony', +  \ 'prolog': '*.pl,*.pro,*.prolog,*.yap',    \ 'proto': '*.proto',    \ 'ps1': '*.ps1,*.psd1,*.psm1,*.pssc',    \ 'ps1xml': '*.ps1xml', @@ -190,6 +194,7 @@ let s:globs = {    \ 'sxhkdrc': '*.sxhkdrc,sxhkdrc',    \ 'systemd': '*.automount,*.mount,*.path,*.service,*.socket,*.swap,*.target,*.timer',    \ 'tablegen': '*.td', +  \ 'tads': '*.t',    \ 'terraform': '*.hcl,*.nomad,*.tf,*.tfvars,*.workflow',    \ 'textile': '*.textile',    \ 'thrift': '*.thrift', @@ -197,6 +202,8 @@ let s:globs = {    \ 'toml': '*.toml,Cargo.lock,Gopkg.lock,poetry.lock,Pipfile',    \ 'tptp': '*.p,*.tptp,*.ax',    \ 'trasys': '*.inp', +  \ 'tt2': '*.tt2', +  \ 'tt2html': '*.tt2',    \ 'typescript': '*.ts',    \ 'typescriptreact': '*.tsx',    \ 'unison': '*.u,*.uu', @@ -211,6 +218,7 @@ let s:globs = {    \ 'xdc': '*.xdc',    \ 'xml': '*.xml,*.adml,*.admx,*.ant,*.axml,*.builds,*.ccproj,*.ccxml,*.clixml,*.cproject,*.cscfg,*.csdef,*.csl,*.csproj,*.ct,*.depproj,*.dita,*.ditamap,*.ditaval,*.dll.config,*.dotsettings,*.filters,*.fsproj,*.fxml,*.glade,*.gml,*.gmx,*.grxml,*.gst,*.iml,*.ivy,*.jelly,*.jsproj,*.kml,*.launch,*.mdpolicy,*.mjml,*.mm,*.mod,*.mxml,*.natvis,*.ncl,*.ndproj,*.nproj,*.nuspec,*.odd,*.osm,*.pkgproj,*.pluginspec,*.proj,*.props,*.ps1xml,*.psc1,*.pt,*.rdf,*.resx,*.rss,*.sch,*.scxml,*.sfproj,*.shproj,*.srdf,*.storyboard,*.sublime-snippet,*.targets,*.tml,*.ui,*.urdf,*.ux,*.vbproj,*.vcxproj,*.vsixmanifest,*.vssettings,*.vstemplate,*.vxml,*.wixproj,*.workflow,*.wsdl,*.wsf,*.wxi,*.wxl,*.wxs,*.x3d,*.xacro,*.xaml,*.xib,*.xlf,*.xliff,*.xmi,*.xml.dist,*.xproj,*.xsd,*.xspec,*.xul,*.zcml,*.cdxml,App.config,NuGet.config,Settings.StyleCop,Web.Debug.config,Web.Release.config,Web.config,packages.config',    \ 'xml.twig': '*.xml.twig', +  \ 'xs': '*.xs',    \ 'xsl': '*.xslt,*.xsl',    \ 'yaml': '*.yml,*.mir,*.reek,*.rviz,*.sublime-syntax,*.syntax,*.yaml,*.yaml-tmlanguage,*.yaml.sed,*.yml.mysql,glide.lock,yarn.lock,fish_history,fish_read_history',    \ 'yaml.ansible': 'playbook.y{a,}ml,site.y{a,}ml,main.y{a,}ml,local.y{a,}ml,requirements.y{a,}ml,tasks.*.y{a,}ml,roles.*.y{a,}ml,handlers.*.y{a,}ml', diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 41819e05..1cd0efe7 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -75,13 +75,15 @@ endfunc  " When using this, the entry should probably be further down below with the  " other StarSetf() calls.  func! s:StarSetf(ft) -  if expand("<amatch>") !~ g:ft_ignore_pat -    exe 'setf ' . a:ft +  if expand("<amatch>") !~ g:ft_ignore_pat && &filetype !~# '\<'.a:ft.'\>' +    let &filetype = a:ft    endif  endfunc  augroup filetypedetect +au! filetypedetect BufRead,BufNewFile,StdinReadPost * +  " filetypes  if !has_key(s:disabled_packages, '8th') @@ -92,6 +94,10 @@ if !has_key(s:disabled_packages, 'haproxy')    au! BufRead,BufNewFile *.cfg  endif +if !has_key(s:disabled_packages, 'a2ps') +  au! BufRead,BufNewFile */etc/a2ps.cfg,*/etc/a2ps/*.cfg,a2psrc,.a2psrc +endif +  if !has_key(s:disabled_packages, 'a65')    au! BufRead,BufNewFile *.a65  endif @@ -132,6 +138,10 @@ if !has_key(s:disabled_packages, 'aidl')    au! BufRead,BufNewFile *.aidl  endif +if !has_key(s:disabled_packages, 'alsaconf') +  au! BufRead,BufNewFile .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf +endif +  if !has_key(s:disabled_packages, 'aml')    au! BufRead,BufNewFile *.aml  endif @@ -144,12 +154,28 @@ if !has_key(s:disabled_packages, 'xml')    au! BufRead,BufNewFile *.csproj,*.ui,*.wsdl,*.wsf,*.xlf,*.xliff,*.xmi,*.xsd,*.xul  endif +if !has_key(s:disabled_packages, 'ant') +  au! BufRead,BufNewFile build.xml +endif + +if !has_key(s:disabled_packages, 'apache') +  au! BufRead,BufNewFile .htaccess,*/etc/httpd/*.conf,*/etc/apache2/sites-*/*.com,access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf*,*/etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf* +endif +  if !has_key(s:disabled_packages, 'applescript')    au! BufRead,BufNewFile *.scpt  endif +if !has_key(s:disabled_packages, 'aptconf') +  au! BufRead,BufNewFile apt.conf,*/.aptitude/config +endif + +if !has_key(s:disabled_packages, 'arch') +  au! BufRead,BufNewFile .arch-inventory,=tagging-method +endif +  if !has_key(s:disabled_packages, 'c/c++') -  au! BufRead,BufNewFile *.cpp,*.c++,*.cc,*.cxx,*.hh,*.hpp,*.hxx,*.inl,*.ipp,*.tcc,*.tpp,*.moc,*.tlh,*.qc +  au! BufRead,BufNewFile *.cpp,*.c++,*.cc,*.cxx,*.hh,*.hpp,*.hxx,*.inl,*.ipp,*.tcc,*.tpp,*.moc,*.tlh,*.qc,*enlightenment/*.cfg  endif  if !has_key(s:disabled_packages, 'arduino') @@ -172,6 +198,10 @@ if !has_key(s:disabled_packages, 'elf')    au! BufRead,BufNewFile *.am  endif +if !has_key(s:disabled_packages, 'automake') +  au! BufRead,BufNewFile GNUmakefile.am +endif +  if !has_key(s:disabled_packages, 'asn')    au! BufRead,BufNewFile *.asn,*.asn1  endif @@ -197,7 +227,7 @@ if !has_key(s:disabled_packages, 'clojure')  endif  if !has_key(s:disabled_packages, 'cmake') -  au! BufRead,BufNewFile *.cmake,*.cmake.in +  au! BufRead,BufNewFile *.cmake,*.cmake.in,CMakeLists.txt  endif  if !has_key(s:disabled_packages, 'cucumber') @@ -213,7 +243,7 @@ if !has_key(s:disabled_packages, 'dlang')  endif  if !has_key(s:disabled_packages, 'dockerfile') -  au! BufRead,BufNewFile *.Dockerfile +  au! BufRead,BufNewFile *.Dockerfile,Dockerfile  endif  if !has_key(s:disabled_packages, 'elm') @@ -236,6 +266,10 @@ if !has_key(s:disabled_packages, 'fsharp')    au! BufRead,BufNewFile *.fs  endif +if !has_key(s:disabled_packages, 'git') +  au! BufRead,BufNewFile .gitconfig,.gitmodules,*.git/config,*/.config/git/config,*.git/modules/*/config,git-rebase-todo +endif +  if !has_key(s:disabled_packages, 'gnuplot')    au! BufRead,BufNewFile *.gp,*.gpi  endif @@ -256,6 +290,10 @@ if !has_key(s:disabled_packages, 'groovy')    au! BufRead,BufNewFile *.groovy,*.gradle  endif +if !has_key(s:disabled_packages, 'grub') +  au! BufRead,BufNewFile */boot/grub/menu.lst,*/boot/grub/grub.conf,*/etc/grub.conf +endif +  if !has_key(s:disabled_packages, 'haml')    au! BufRead,BufNewFile *.haml  endif @@ -273,7 +311,7 @@ if !has_key(s:disabled_packages, 'html5')  endif  if !has_key(s:disabled_packages, 'json') -  au! BufRead,BufNewFile *.json,*.ice,*.webmanifest,*.yy,*.jsonp +  au! BufRead,BufNewFile *.json,*.ice,*.webmanifest,*.yy,*.jsonp,Pipfile.lock  endif  if !has_key(s:disabled_packages, 'kotlin') @@ -304,8 +342,12 @@ if !has_key(s:disabled_packages, 'markdown')    au! BufRead,BufNewFile *.md,*.markdown,*.mdown,*.mdwn,*.mkd,*.mkdn  endif +if !has_key(s:disabled_packages, 'meson') +  au! BufRead,BufNewFile meson.build,meson_options.txt +endif +  if !has_key(s:disabled_packages, 'ocaml') -  au! BufRead,BufNewFile *.ml,*.mli,*.mll,*.mly +  au! BufRead,BufNewFile *.ml,*.mli,*.mll,*.mly,.ocamlinit  endif  if !has_key(s:disabled_packages, 'opencl') @@ -313,7 +355,7 @@ if !has_key(s:disabled_packages, 'opencl')  endif  if !has_key(s:disabled_packages, 'perl') -  au! BufRead,BufNewFile *.al,*.plx,*.psgi,*.t +  au! BufRead,BufNewFile *.al,*.plx,*.psgi,*.t,*.pod,*.mason,*.mhtml,*.comp,*.xs  endif  if !has_key(s:disabled_packages, 'php') @@ -325,7 +367,7 @@ if !has_key(s:disabled_packages, 'protobuf')  endif  if !has_key(s:disabled_packages, 'python') -  au! BufRead,BufNewFile *.py,*.pyi,*.pyw,*.spec +  au! BufRead,BufNewFile *.py,*.pyi,*.pyw,*.spec,SConstruct  endif  if !has_key(s:disabled_packages, 'r-lang') @@ -349,7 +391,7 @@ if !has_key(s:disabled_packages, 'rst')  endif  if !has_key(s:disabled_packages, 'ruby') -  au! BufRead,BufNewFile *.rb,*.builder,*.gemspec,*.rake,*.rbw,*.ru,*.spec,*.rxml,*.rjs,*.rant,*.erb,*.rhtml +  au! BufRead,BufNewFile *.rb,*.builder,*.gemspec,*.rake,*.rbw,*.ru,*.spec,*.rxml,*.rjs,*.rant,.irbrc,Gemfile,Rakefile,Rantfile,*.erb,*.rhtml  endif  if !has_key(s:disabled_packages, 'rust') @@ -369,7 +411,7 @@ if !has_key(s:disabled_packages, 'scss')  endif  if !has_key(s:disabled_packages, 'sh') -  au! BufRead,BufNewFile *.zsh +  au! BufRead,BufNewFile *.zsh,.zshrc,.zshenv,.zlogin,.zprofile,.zlogout  endif  if !has_key(s:disabled_packages, 'smt2') @@ -388,6 +430,10 @@ if !has_key(s:disabled_packages, 'terraform')    au! BufRead,BufNewFile *.tf  endif +if !has_key(s:disabled_packages, 'toml') +  au! BufRead,BufNewFile Pipfile +endif +  if !has_key(s:disabled_packages, 'twig')    au! BufRead,BufNewFile *.twig  endif @@ -420,12 +466,24 @@ if !has_key(s:disabled_packages, 'yaml')    au! BufRead,BufNewFile *.yml,*.yaml  endif +if !has_key(s:disabled_packages, 'help') +  au! BufRead,BufNewFile $VIMRUNTIME/doc/*.txt +endif +  if !has_key(s:disabled_packages, 'visual-basic')    au! BufRead,BufNewFile *.vba,*.vbs,*.dsm,*.ctl,*.sba  endif  if !has_key(s:disabled_packages, 'dosini') -  au! BufRead,BufNewFile *.ini,*.properties +  au! BufRead,BufNewFile *.ini,*.properties,.editorconfig,.npmrc,*/etc/pacman.conf,php.ini-*,*/etc/yum.conf,*/etc/yum.repos.d/* +endif + +if !has_key(s:disabled_packages, 'bzl') +  au! BufRead,BufNewFile *.bzl,BUILD,WORKSPACE +endif + +if !has_key(s:disabled_packages, 'tads') +  au! BufRead,BufNewFile *.t  endif  if !has_key(s:disabled_packages, '8th') @@ -1071,12 +1129,12 @@ endif  if !has_key(s:disabled_packages, 'html5')    au BufNewFile,BufRead *.htm call s:Setf('html') -  au BufNewFile,BufRead *.html call s:Setf('html')    au BufNewFile,BufRead *.html.hl call s:Setf('html')    au BufNewFile,BufRead *.inc call s:Setf('html')    au BufNewFile,BufRead *.st call s:Setf('html')    au BufNewFile,BufRead *.xht call s:Setf('html')    au BufNewFile,BufRead *.xhtml call s:Setf('html') +  au! BufNewFile,BufRead *.html call polyglot#DetectHtmlFiletype()  endif  if !has_key(s:disabled_packages, 'i3') @@ -1365,15 +1423,21 @@ if !has_key(s:disabled_packages, 'perl')    au BufNewFile,BufRead *.fcgi call s:Setf('perl')    au BufNewFile,BufRead *.perl call s:Setf('perl')    au BufNewFile,BufRead *.ph call s:Setf('perl') -  au BufNewFile,BufRead *.pl call s:Setf('perl')    au BufNewFile,BufRead *.plx call s:Setf('perl') -  au BufNewFile,BufRead *.pm call s:Setf('perl')    au BufNewFile,BufRead *.psgi call s:Setf('perl') -  au BufNewFile,BufRead *.t call s:Setf('perl')    au BufNewFile,BufRead Makefile.PL call s:Setf('perl')    au BufNewFile,BufRead Rexfile call s:Setf('perl')    au BufNewFile,BufRead ack call s:Setf('perl')    au BufNewFile,BufRead cpanfile call s:Setf('perl') +  au BufNewFile,BufRead *.pod call s:Setf('pod') +  au BufNewFile,BufRead *.comp call s:Setf('mason') +  au BufNewFile,BufRead *.mason call s:Setf('mason') +  au BufNewFile,BufRead *.mhtml call s:Setf('mason') +  au BufNewFile,BufRead *.xs call s:Setf('xs') +  au! BufNewFile,BufRead *.pl call polyglot#DetectPlFiletype() +  au! BufNewFile,BufRead *.pm call polyglot#DetectPmFiletype() +  au! BufNewFile,BufRead *.t call polyglot#DetectTFiletype() +  au! BufNewFile,BufRead *.tt2 call polyglot#DetectTt2Filetype()  endif  if !has_key(s:disabled_packages, 'pgsql') @@ -1517,17 +1581,17 @@ if !has_key(s:disabled_packages, 'raku')    au BufNewFile,BufRead *.p6 call s:Setf('raku')    au BufNewFile,BufRead *.p6l call s:Setf('raku')    au BufNewFile,BufRead *.p6m call s:Setf('raku') -  au BufNewFile,BufRead *.pl call s:Setf('raku')    au BufNewFile,BufRead *.pl6 call s:Setf('raku') -  au BufNewFile,BufRead *.pm call s:Setf('raku')    au BufNewFile,BufRead *.pm6 call s:Setf('raku')    au BufNewFile,BufRead *.pod6 call s:Setf('raku')    au BufNewFile,BufRead *.raku call s:Setf('raku')    au BufNewFile,BufRead *.rakudoc call s:Setf('raku')    au BufNewFile,BufRead *.rakumod call s:Setf('raku')    au BufNewFile,BufRead *.rakutest call s:Setf('raku') -  au BufNewFile,BufRead *.t call s:Setf('raku')    au BufNewFile,BufRead *.t6 call s:Setf('raku') +  au! BufNewFile,BufRead *.pl call polyglot#DetectPlFiletype() +  au! BufNewFile,BufRead *.pm call polyglot#DetectPmFiletype() +  au! BufNewFile,BufRead *.t call polyglot#DetectTFiletype()  endif  if !has_key(s:disabled_packages, 'raml') @@ -1616,7 +1680,7 @@ if !has_key(s:disabled_packages, 'ruby')  endif  if !has_key(s:disabled_packages, 'rspec') -  au BufNewFile,BufRead *_spec.rb if !did_filetype() | set ft=ruby syntax=rspec | endif +  au BufNewFile,BufRead *_spec.rb set ft=ruby syntax=rspec  endif  if !has_key(s:disabled_packages, 'brewfile') @@ -1918,12 +1982,41 @@ if !has_key(s:disabled_packages, 'odin')    au BufNewFile,BufRead *.odin call s:Setf('odin')  endif +if !has_key(s:disabled_packages, 'bzl') +  au BufNewFile,BufRead *.bzl call s:Setf('bzl') +  au BufNewFile,BufRead BUCK call s:Setf('bzl') +  au BufNewFile,BufRead BUILD call s:Setf('bzl') +  au BufNewFile,BufRead BUILD.bazel call s:Setf('bzl') +  au BufNewFile,BufRead Tiltfile call s:Setf('bzl') +  au BufNewFile,BufRead WORKSPACE call s:Setf('bzl') +endif + +if !has_key(s:disabled_packages, 'prolog') +  au BufNewFile,BufRead *.pro call s:Setf('prolog') +  au BufNewFile,BufRead *.prolog call s:Setf('prolog') +  au BufNewFile,BufRead *.yap call s:Setf('prolog') +  au! BufNewFile,BufRead *.pl call polyglot#DetectPlFiletype() +endif + +if !has_key(s:disabled_packages, 'tads') +  au! BufNewFile,BufRead *.t call polyglot#DetectTFiletype() +endif +  " end filetypes -au BufNewFile,BufRead,StdinReadPost *  -  \ if !did_filetype() && expand("<afile>") !~ g:ft_ignore_pat  -  \ | call polyglot#Heuristics() | endif +func! s:PolyglotFallback()  +  if expand("<afile>") !~ g:ft_ignore_pat +    if getline(1) =~# "^#!" +      call polyglot#Shebang() +    endif +    if &filetype == '' +      runtime! scripts.vim +    endif +  endif +endfunc + +au BufNewFile,BufRead,StdinReadPost * call s:PolyglotFallback()  augroup END @@ -2123,7 +2216,7 @@ au VimEnter * call s:verify()  func! s:observe_filetype()    augroup polyglot-observer      au! CursorHold,CursorHoldI <buffer> -      \ if polyglot#Heuristics() | au! polyglot-observer CursorHold,CursorHoldI | endif +      \ if polyglot#Shebang() | au! polyglot-observer CursorHold,CursorHoldI | endif    augroup END  endfunc diff --git a/ftplugin/bzl.vim b/ftplugin/bzl.vim new file mode 100644 index 00000000..3abebee9 --- /dev/null +++ b/ftplugin/bzl.vim @@ -0,0 +1,98 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'bzl') == -1 + +" Vim filetype plugin file +" Language:	Bazel (http://bazel.io) +" Maintainer:	David Barnett (https://github.com/google/vim-ft-bzl) +" Last Change:	2015 Aug 11 + +"" +" @section Introduction, intro +" Core settings for the bzl filetype, used for BUILD and *.bzl files for the +" Bazel build system (http://bazel.io/). + +if exists('b:did_ftplugin') +  finish +endif + + +" Vim 7.4.051 has opinionated settings in ftplugin/python.vim that try to force +" PEP8 conventions on every python file, but these conflict with Google's +" indentation guidelines. As a workaround, we explicitly source the system +" ftplugin, but save indentation settings beforehand and restore them after. +let s:save_expandtab = &l:expandtab +let s:save_shiftwidth = &l:shiftwidth +let s:save_softtabstop = &l:softtabstop +let s:save_tabstop = &l:tabstop + +" NOTE: Vim versions before 7.3.511 had a ftplugin/python.vim that was broken +" for compatible mode. +let s:save_cpo = &cpo +set cpo&vim + +" Load base python ftplugin (also defines b:did_ftplugin). +source $VIMRUNTIME/ftplugin/python.vim + +" NOTE: Vim versions before 7.4.104 and later set this in ftplugin/python.vim. +setlocal comments=b:#,fb:- + +" Restore pre-existing indentation settings. +let &l:expandtab = s:save_expandtab +let &l:shiftwidth = s:save_shiftwidth +let &l:softtabstop = s:save_softtabstop +let &l:tabstop = s:save_tabstop + +setlocal formatoptions-=t + +" Make gf work with imports in BUILD files. +setlocal includeexpr=substitute(v:fname,'//','','') + +" Enable syntax-based folding, if specified. +if get(g:, 'ft_bzl_fold', 0) +  setlocal foldmethod=syntax +  setlocal foldtext=BzlFoldText() +endif + +if exists('*BzlFoldText') +  finish +endif + +function BzlFoldText() abort +  let l:start_num = nextnonblank(v:foldstart) +  let l:end_num = prevnonblank(v:foldend) + +  if l:end_num <= l:start_num + 1 +    " If the fold is empty, don't print anything for the contents. +    let l:content = '' +  else +    " Otherwise look for something matching the content regex. +    " And if nothing matches, print an ellipsis. +    let l:content = '...' +    for l:line in getline(l:start_num + 1, l:end_num - 1) +      let l:content_match = matchstr(l:line, '\m\C^\s*name = \zs.*\ze,$') +      if !empty(l:content_match) +        let l:content = l:content_match +        break +      endif +    endfor +  endif + +  " Enclose content with start and end +  let l:start_text = getline(l:start_num) +  let l:end_text = substitute(getline(l:end_num), '^\s*', '', '') +  let l:text = l:start_text . ' ' . l:content . ' ' . l:end_text + +  " Compute the available width for the displayed text. +  let l:width = winwidth(0) - &foldcolumn - (&number ? &numberwidth : 0) +  let l:lines_folded = ' ' . string(1 + v:foldend - v:foldstart) . ' lines' + +  " Expand tabs, truncate, pad, and concatenate +  let l:text = substitute(l:text, '\t', repeat(' ', &tabstop), 'g') +  let l:text = strpart(l:text, 0, l:width - len(l:lines_folded)) +  let l:padding = repeat(' ', l:width - len(l:lines_folded) - len(l:text)) +  return l:text . l:padding . l:lines_folded +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo + +endif diff --git a/ftplugin/prolog.vim b/ftplugin/prolog.vim new file mode 100644 index 00000000..bd813dce --- /dev/null +++ b/ftplugin/prolog.vim @@ -0,0 +1,24 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'prolog') == -1 + +" Vim filetype plugin file +" Language:             Prolog +" Previous Maintainer:  Nikolai Weibull <now@bitwi.se> +" Latest Revision:      2008-07-09 + +if exists("b:did_ftplugin") +  finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +let b:undo_ftplugin = "setl com< cms< fo<" + +setlocal comments=s1:/*,mb:*,ex:*/,:% commentstring=%\ %s +setlocal formatoptions-=t formatoptions+=croql + +let &cpo = s:cpo_save +unlet s:cpo_save + +endif diff --git a/heuristics.yaml b/heuristics.yaml index 901241cb..8b803011 100644 --- a/heuristics.yaml +++ b/heuristics.yaml @@ -98,7 +98,7 @@ rules:      filetype: idris2    - pattern: '^%access .*'      filetype: idris -  - override: 'g:filetype_idr' +- override: 'g:filetype_idr'  - filetype: idris2  ---  extensions: [lidr] @@ -115,3 +115,70 @@ rules:    filetype: vb    ignore_case: true  - filetype: basic +--- +extensions: [pm] +rules: +- lines: 1 +  rules: +  - pattern: 'XPM2' +    filetype: xpm2 +  - pattern: 'XPM' +    filetype: xpm +- lines: 50 +  rules: +  - pattern: '^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)' +    filetype: raku +  - pattern: '\buse\s+(?:strict\b|v?5\.)' +    filetype: perl +- override: 'g:filetype_pm' +- filetype: perl +--- +extensions: [pl] +rules: +- lines: 1 +  or: +  - pattern: '^[^#]*:-' +  - pattern: '^\s*(?:%|/\*)' +  - pattern: '\.\s*$' +  filetype: prolog +- lines: 50 +  rules: +  - pattern: '^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)' +    filetype: raku +  - pattern: '\buse\s+(?:strict\b|v?5\.)' +    filetype: perl +- override: 'g:filetype_pl' +- filetype: perl +--- +extensions: [t] +rules: +- lines: 5 +  pattern: '^\.' +  filetype: nroff +- lines: 50 +  rules: +  - pattern: '^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)' +    filetype: raku +  - pattern: '\buse\s+(?:strict\b|v?5\.)' +    filetype: perl +  ## I haven't found turing syntax for vim... +  # - pattern: '^\s*%[ \t]+|^\s*var\s+\w+(\s*:\s*\w+)?\s*:=\s*\w+' +  #   filetype: turing +- override: 'g:filetype_t' +- filetype: perl +--- +extensions: [tt2] +rules: +- lines: 3 +  pattern: '<(?:!DOCTYPE HTML|[%?]|html)' +  ignore_case: true +  filetype: tt2html +- filetype: tt2 +--- +extensions: [html] +rules: +- lines: 1 +  pattern: '^(%|<[%&].*>)' +  filetype: mason +- filetype: html + diff --git a/indent/bzl.vim b/indent/bzl.vim new file mode 100644 index 00000000..adda8a85 --- /dev/null +++ b/indent/bzl.vim @@ -0,0 +1,98 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'bzl') == -1 + +" Vim indent file +" Language:	Bazel (http://bazel.io) +" Maintainer:	David Barnett (https://github.com/google/vim-ft-bzl) +" Last Change:	2017 Jun 13 + +if exists('b:did_indent') +  finish +endif + +" Load base python indent. +if !exists('*GetPythonIndent') +  runtime! indent/python.vim +endif + +let b:did_indent = 1 + +" Only enable bzl google indent if python google indent is enabled. +if !get(g:, 'no_google_python_indent') +  setlocal indentexpr=GetBzlIndent(v:lnum) +endif + +if exists('*GetBzlIndent') +  finish +endif + +let s:save_cpo = &cpo +set cpo-=C + +" Maximum number of lines to look backwards. +let s:maxoff = 50 + +"" +" Determine the correct indent level given an {lnum} in the current buffer. +function GetBzlIndent(lnum) abort +  let l:use_recursive_indent = !get(g:, 'no_google_python_recursive_indent') +  if l:use_recursive_indent +    " Backup and override indent setting variables. +    if exists('g:pyindent_nested_paren') +      let l:pyindent_nested_paren = g:pyindent_nested_paren +    endif +    if exists('g:pyindent_open_paren') +      let l:pyindent_open_paren = g:pyindent_open_paren +    endif +    let g:pyindent_nested_paren = 'shiftwidth() * 2' +    let g:pyindent_open_paren = 'shiftwidth() * 2' +  endif + +  let l:indent = -1 + +  " Indent inside parens. +  " Align with the open paren unless it is at the end of the line. +  " E.g. +  "   open_paren_not_at_EOL(100, +  "                         (200, +  "                          300), +  "                         400) +  "   open_paren_at_EOL( +  "       100, 200, 300, 400) +  call cursor(a:lnum, 1) +  let [l:par_line, l:par_col] = searchpairpos('(\|{\|\[', '', ')\|}\|\]', 'bW', +      \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" . +      \ " synIDattr(synID(line('.'), col('.'), 1), 'name')" . +      \ " =~ '\\(Comment\\|String\\)$'") +  if l:par_line > 0 +    call cursor(l:par_line, 1) +    if l:par_col != col('$') - 1 +      let l:indent = l:par_col +    endif +  endif + +  " Delegate the rest to the original function. +  if l:indent == -1 +    let l:indent = GetPythonIndent(a:lnum) +  endif + +  if l:use_recursive_indent +    " Restore global variables. +    if exists('l:pyindent_nested_paren') +      let g:pyindent_nested_paren = l:pyindent_nested_paren +    else +      unlet g:pyindent_nested_paren +    endif +    if exists('l:pyindent_open_paren') +      let g:pyindent_open_paren = l:pyindent_open_paren +    else +      unlet g:pyindent_open_paren +    endif +  endif + +  return l:indent +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo + +endif diff --git a/indent/prolog.vim b/indent/prolog.vim new file mode 100644 index 00000000..0426a473 --- /dev/null +++ b/indent/prolog.vim @@ -0,0 +1,71 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'prolog') == -1 + +"  vim: set sw=4 sts=4: +"  Maintainer	: Gergely Kontra <kgergely@mcl.hu> +"  Revised on	: 2002.02.18. 23:34:05 +"  Language	: Prolog +"  Last change by: Takuya Fujiwara, 2018 Sep 23 + +" TODO: +"   checking with respect to syntax highlighting +"   ignoring multiline comments +"   detecting multiline strings + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") +    finish +endif + +let b:did_indent = 1 + +setlocal indentexpr=GetPrologIndent() +setlocal indentkeys-=:,0# +setlocal indentkeys+=0%,-,0;,>,0) + +" Only define the function once. +"if exists("*GetPrologIndent") +"    finish +"endif + +function! GetPrologIndent() +    " Find a non-blank line above the current line. +    let pnum = prevnonblank(v:lnum - 1) +    " Hit the start of the file, use zero indent. +    if pnum == 0 +       return 0 +    endif +    let line = getline(v:lnum) +    let pline = getline(pnum) + +    let ind = indent(pnum) +    " Previous line was comment -> use previous line's indent +    if pline =~ '^\s*%' +	return ind +    endif +    " Previous line was the start of block comment -> +1 after '/*' comment +    if pline =~ '^\s*/\*' +	return ind + 1 +    endif +    " Previous line was the end of block comment -> -1 after '*/' comment +    if pline =~ '^\s*\*/' +	return ind - 1 +    endif +    " Check for clause head on previous line +    if pline =~ '\%(:-\|-->\)\s*\(%.*\)\?$' +	let ind = ind + shiftwidth() +    " Check for end of clause on previous line +    elseif pline =~ '\.\s*\(%.*\)\?$' +	let ind = ind - shiftwidth() +    endif +    " Check for opening conditional on previous line +    if pline =~ '^\s*\([(;]\|->\)' +	let ind = ind + shiftwidth() +    endif +    " Check for closing an unclosed paren, or middle ; or -> +    if line =~ '^\s*\([);]\|->\)' +	let ind = ind - shiftwidth() +    endif +    return ind +endfunction + +endif diff --git a/packages.yaml b/packages.yaml index 372abc94..bbdb3214 100644 --- a/packages.yaml +++ b/packages.yaml @@ -1175,6 +1175,23 @@ remote: vim-perl/vim-perl  filetypes:  - name: perl    linguist: Perl +- name: pod +  extensions: +  - pod +- name: mason +  extensions: +  - mason +  - mhtml +  - comp +- name: tt2 +  extensions: +  - tt2 +- name: tt2html +  extensions: +  - tt2 +- name: xs +  extensions: +  - xs  ---  name: pgsql  remote: lifepillar/pgsql.vim @@ -1834,3 +1851,25 @@ remote: Tetralux/odin.vim  filetypes:  - name: odin    linguist: Odin +--- +name: bzl +remote: vim/vim:runtime +glob: '**/bzl.vim' +filetypes: +- name: bzl +  linguist: Starlark +--- +name: prolog +remote: vim/vim:runtime +glob: '**/prolog.vim' +filetypes: +- name: prolog +  linguist: Prolog +--- +name: tads +remote: vim/vim:runtime +glob: '**/tads.vim' +filetypes: +- name: tads +  extensions: +  - t diff --git a/scripts/build b/scripts/build index 07bc301b..c44e8cc8 100755 --- a/scripts/build +++ b/scripts/build @@ -263,7 +263,7 @@ def rule_to_code(rule)    if rule.has_key?("lines")      if rule["lines"] == 1        return <<~EOS -        let line = getline(1) +        let line = getline(nextnonblank(1))          #{indent(rule_to_code(except(rule, "lines")), 0)}        EOS @@ -423,6 +423,7 @@ def generate_ftdetect(packages, heuristics)    expected_filetypes = expected_filetypes.select { |e| filetype_names.include?(e["name"]) }    native_extensions = Set.new(native_filetypes.flat_map { |f| f["extensions"] || [] }) +  native_filenames = Set.new(native_filetypes.flat_map { |f| f["filenames"] || [] })    for package in packages      name = package.fetch("name") @@ -435,6 +436,12 @@ def generate_ftdetect(packages, heuristics)            to_disable << "*." + extension          end        end + +      for filename in filetype["filenames"] +        if native_filenames.include?(filename) +          to_disable << filename +        end +      end      end      if to_disable.size > 0 @@ -457,7 +464,7 @@ def generate_ftdetect(packages, heuristics)        set_command = "call s:Setf('#{name}')"        if filetype["syntax"] -        set_command = "if !did_filetype() | set ft=#{name} syntax=#{filetype["syntax"]} | endif" +        set_command = "set ft=#{name} syntax=#{filetype["syntax"]}"        end        if filetype["custom_set"] @@ -544,11 +551,11 @@ def generate_ftdetect(packages, heuristics)        endif      endfunc -    func! polyglot#Heuristics() +    func! polyglot#Shebang()        " Try to detect filetype from shebang -      let l:filetype = polyglot#Shebang() -      if l:filetype != "" -        exec "setf " . l:filetype +      let ft = polyglot#ShebangFiletype() +      if ft != "" +        call s:Setf(ft)          return 1        endif @@ -571,7 +578,7 @@ def generate_ftdetect(packages, heuristics)      let s:r_envflag = '%(\\S\\+=\\S\\+\\|-[iS]\\|--ignore-environment\\|--split-string\\)'      let s:r_env = '^\\%(\\' . s:r_envflag . '\\s\\+\\)*\\(\\S\\+\\)' -    func! polyglot#Shebang() +    func! polyglot#ShebangFiletype()        let l:line1 = getline(1)        if l:line1 !~# "^#!" diff --git a/scripts/test_extensions.vim b/scripts/test_extensions.vim index f2aaf66c..467ac86a 100644 --- a/scripts/test_extensions.vim +++ b/scripts/test_extensions.vim @@ -15,6 +15,12 @@ function! TestExtension(filetype, filename, content)    endtry  endfunction +" make sure native vim scripts.vim is respected +call TestExtension("rib", "renderman", "##RenderMan") + +" make sure case of file does matter when recognizing file +call TestExtension("ruby", "scripts/build", "#!/usr/bin/env ruby") +  call TestExtension("sh", "bash1", "#!/bin/bash")  call TestExtension("sh", "bash2", "#! /bin/bash")  call TestExtension("sh", "bash3", "#! /bin/bash2.3") @@ -279,3 +285,72 @@ call TestExtension("c", "foo.h", "")  unlet g:c_syntax_for_h  let g:ch_syntax_for_h = 1  call TestExtension("ch", "foo.h", "") + +" perl +call TestExtension("perl", "empty.plx", "") +call TestExtension("perl", "empty.al", "") +call TestExtension("perl", "empty.psgi", "") +call TestExtension("pod", "empty.pod", "") + +" raku +call TestExtension("raku", "empty.p6", "") +call TestExtension("raku", "empty.pm6", "") +call TestExtension("raku", "empty.pl6", "") +call TestExtension("raku", "empty.raku", "") +call TestExtension("raku", "empty.rakumod", "") +call TestExtension("raku", "empty.pod6", "") +call TestExtension("raku", "empty.rakudoc", "") +call TestExtension("raku", "empty.rakutest", "") +call TestExtension("raku", "empty.t6", "") + + +" .pm extension +call TestExtension("perl", "empty.pm", "") +call TestExtension("perl", "strict.pm", " use strict hello;") +call TestExtension("perl", "use5.pm", " use 5;") +call TestExtension("perl", "usev5.pm", " use v5;") +call TestExtension("raku", "script.pm", "#!/usr/bin/env perl6\nprint('Hello world')") +call TestExtension("raku", "class.pm", " class Class {}") +call TestExtension("raku", "module.pm", " module foobar") +call TestExtension("xpm", "xpm.pm", "/* XPM */") +call TestExtension("xpm2", "xpm2.pm", "/* XPM2 */") +let g:filetype_pm = "fizfuz" +call TestExtension("fizfuz", "fizfuz.pm", "") + +" .pl extension +call TestExtension("perl", "empty.pl", "") +call TestExtension("prolog", "comment.pl", "% hello world") +call TestExtension("prolog", "comment2.pl", "/* hello world */") +call TestExtension("prolog", "statement.pl", "happy(vincent). ") +call TestExtension("prolog", "statement2.pl", "nearbychk(X,Y) :- Y is X-1.") +call TestExtension("perl", "strict.pl", " use strict hello;") +call TestExtension("perl", "use5.pl", " use 5;") +call TestExtension("perl", "usev5.pl", " use v5;") +call TestExtension("raku", "script.pl", "#!/usr/bin/env perl6\nprint('Hello world')") +call TestExtension("raku", "class.pl", " class Class {}") +call TestExtension("raku", "module.pl", " module foobar") +let g:filetype_pl = "fizfuz" +call TestExtension("fizfuz", "fizfuz.pl", "") + +" .t extension +call TestExtension("perl", "empty.t", "") +call TestExtension("perl", "strict.t", " use strict hello;") +call TestExtension("perl", "use5.t", " use 5;") +call TestExtension("perl", "usev5.t", " use v5;") +call TestExtension("raku", "script.t", "#!/usr/bin/env perl6\nprint('Hello world')") +call TestExtension("raku", "class.t", " class Class {}") +call TestExtension("raku", "module.t", " module foobar") +call TestExtension("nroff", "module.t", ".nf\n101 Main Street") +let g:filetype_t = "fizfuz" +call TestExtension("fizfuz", "fizfuz.t", "") + +" .tt2 extension +call TestExtension("tt2", "empty.tt2", "") +call TestExtension("tt2html", "doctype.tt2", "<!DOCTYPE HTML>") +call TestExtension("tt2html", "percent.tt2", "<%filter>") +call TestExtension("tt2html", "html.tt2", "<html>") + +" .html extension +call TestExtension("html", "empty.html", "") +call TestExtension("mason", "mason1.html", "% my $planet = 42;") +call TestExtension("mason", "mason2.html", "<%filter></%filter>") diff --git a/scripts/test_filetypes.vim b/scripts/test_filetypes.vim index a84b39e3..02d44ca4 100644 --- a/scripts/test_filetypes.vim +++ b/scripts/test_filetypes.vim @@ -154,6 +154,11 @@ call TestFiletype('sexplib')  call TestFiletype('octave')  call TestFiletype('opencl')  call TestFiletype('perl') +call TestFiletype('pod') +call TestFiletype('mason') +call TestFiletype('tt2') +call TestFiletype('tt2html') +call TestFiletype('xs')  call TestFiletype('sql')  call TestFiletype('cql')  call TestFiletype('php') @@ -232,3 +237,6 @@ call TestFiletype('basic')  call TestFiletype('vb')  call TestFiletype('dosini')  call TestFiletype('odin') +call TestFiletype('bzl') +call TestFiletype('prolog') +call TestFiletype('tads') diff --git a/syntax/bzl.vim b/syntax/bzl.vim new file mode 100644 index 00000000..9c0c5781 --- /dev/null +++ b/syntax/bzl.vim @@ -0,0 +1,20 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'bzl') == -1 + +" Vim syntax file +" Language:	Bazel (http://bazel.io) +" Maintainer:	David Barnett (https://github.com/google/vim-ft-bzl) +" Last Change:	2015 Aug 11 + +if exists('b:current_syntax') +  finish +endif + + +runtime! syntax/python.vim + +let b:current_syntax = 'bzl' + +syn region bzlRule start='^\w\+($' end='^)\n*' transparent fold +syn region bzlList start='\[' end='\]' transparent fold + +endif diff --git a/syntax/prolog.vim b/syntax/prolog.vim new file mode 100644 index 00000000..4d6cb0be --- /dev/null +++ b/syntax/prolog.vim @@ -0,0 +1,122 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'prolog') == -1 + +" Vim syntax file +" Language:    PROLOG +" Maintainer:  Anton Kochkov <anton.kochkov@gmail.com> +" Last Change: 2019 Aug 29 + +" There are two sets of highlighting in here: +" If the "prolog_highlighting_clean" variable exists, it is rather sparse. +" Otherwise you get more highlighting. +" +" You can also set the "prolog_highlighting_no_keyword" variable. If set, +" keywords will not be highlighted. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") +  finish +endif + +" Prolog is case sensitive. +syn case match + +" Very simple highlighting for comments, clause heads and +" character codes.  It respects prolog strings and atoms. + +syn region   prologCComment start=+/\*+ end=+\*/+ +syn match    prologComment  +%.*+ + +if !exists("prolog_highlighting_no_keyword") +  syn keyword  prologKeyword  module meta_predicate multifile dynamic +endif +syn match    prologCharCode +0'\\\=.+ +syn region   prologString   start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region   prologAtom     start=+'+ skip=+\\\\\|\\'+ end=+'+ +syn region   prologClause   matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause + +if !exists("prolog_highlighting_clean") + +  " some keywords +  " some common predicates are also highlighted as keywords +  " is there a better solution? +  if !exists("prolog_highlighting_no_keyword") +    syn keyword prologKeyword   abolish current_output  peek_code +    syn keyword prologKeyword   append  current_predicate       put_byte +    syn keyword prologKeyword   arg     current_prolog_flag     put_char +    syn keyword prologKeyword   asserta fail    put_code +    syn keyword prologKeyword   assertz findall read +    syn keyword prologKeyword   at_end_of_stream        float   read_term +    syn keyword prologKeyword   atom    flush_output    repeat +    syn keyword prologKeyword   atom_chars      functor retract +    syn keyword prologKeyword   atom_codes      get_byte        set_input +    syn keyword prologKeyword   atom_concat     get_char        set_output +    syn keyword prologKeyword   atom_length     get_code        set_prolog_flag +    syn keyword prologKeyword   atomic  halt    set_stream_position +    syn keyword prologKeyword   bagof   integer setof +    syn keyword prologKeyword   call    is      stream_property +    syn keyword prologKeyword   catch   nl      sub_atom +    syn keyword prologKeyword   char_code       nonvar  throw +    syn keyword prologKeyword   char_conversion number  true +    syn keyword prologKeyword   clause  number_chars    unify_with_occurs_check +    syn keyword prologKeyword   close   number_codes    var +    syn keyword prologKeyword   compound        once    write +    syn keyword prologKeyword   copy_term       op      write_canonical +    syn keyword prologKeyword   current_char_conversion open    write_term +    syn keyword prologKeyword   current_input   peek_byte       writeq +    syn keyword prologKeyword   current_op      peek_char +  endif + +  syn match   prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|=\.\.\|<\|>\|=" +  syn match   prologAsIs     "===\|\\===\|<=\|=>" + +  syn match   prologNumber            "\<\d*\>'\@!" +  syn match   prologNumber            "\<0[xX]\x*\>'\@!" +  syn match   prologCommentError      "\*/" +  syn match   prologSpecialCharacter  ";" +  syn match   prologSpecialCharacter  "!" +  syn match   prologSpecialCharacter  ":-" +  syn match   prologSpecialCharacter  "-->" +  syn match   prologQuestion          "?-.*\."  contains=prologNumber + + +endif + +syn sync maxlines=50 + + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default highlighting. +hi def link prologComment          Comment +hi def link prologCComment         Comment +hi def link prologCharCode         Special + +if exists ("prolog_highlighting_clean") + +hi def link prologKeyword        Statement +hi def link prologClauseHead     Statement +hi def link prologClause Normal + +else + +hi def link prologKeyword        Keyword +hi def link prologClauseHead     Constant +hi def link prologClause Normal +hi def link prologQuestion       PreProc +hi def link prologSpecialCharacter Special +hi def link prologNumber         Number +hi def link prologAsIs           Normal +hi def link prologCommentError   Error +hi def link prologAtom           String +hi def link prologString         String +hi def link prologOperator       Operator + +endif + + +let b:current_syntax = "prolog" + +" vim: ts=8 + +endif diff --git a/syntax/tads.vim b/syntax/tads.vim new file mode 100644 index 00000000..e4737535 --- /dev/null +++ b/syntax/tads.vim @@ -0,0 +1,175 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'tads') == -1 + +" Vim syntax file +" Language:	TADS +" Maintainer:	Amir Karger <karger@post.harvard.edu> +" $Date: 2004/06/13 19:28:45 $ +" $Revision: 1.1 $ +" Stolen from: Bram Moolenaar's C language file +" Newest version at: http://www.hec.utah.edu/~karger/vim/syntax/tads.vim +" History info at the bottom of the file + +" TODO lots more keywords +" global, self, etc. are special *objects*, not functions. They should +" probably be a different color than the special functions +" Actually, should cvtstr etc. be functions?! (change tadsFunction) +" Make global etc. into Identifiers, since we don't have regular variables? + +" quit when a syntax file was already loaded +if exists("b:current_syntax") +  finish +endif + +" A bunch of useful keywords +syn keyword tadsStatement	goto break return continue pass +syn keyword tadsLabel		case default +syn keyword tadsConditional	if else switch +syn keyword tadsRepeat		while for do +syn keyword tadsStorageClass	local compoundWord formatstring specialWords +syn keyword tadsBoolean		nil true + +" TADS keywords +syn keyword tadsKeyword		replace modify +syn keyword tadsKeyword		global self inherited +" builtin functions +syn keyword tadsKeyword		cvtstr cvtnum caps lower upper substr +syn keyword tadsKeyword		say length +syn keyword tadsKeyword		setit setscore +syn keyword tadsKeyword		datatype proptype +syn keyword tadsKeyword		car cdr +syn keyword tadsKeyword		defined isclass +syn keyword tadsKeyword		find firstobj nextobj +syn keyword tadsKeyword		getarg argcount +syn keyword tadsKeyword		input yorn askfile +syn keyword tadsKeyword		rand randomize +syn keyword tadsKeyword		restart restore quit save undo +syn keyword tadsException	abort exit exitobj + +syn keyword tadsTodo contained	TODO FIXME XXX + +" String and Character constants +" Highlight special characters (those which have a backslash) differently +syn match tadsSpecial contained	"\\." +syn region tadsDoubleString		start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tadsSpecial,tadsEmbedded +syn region tadsSingleString		start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tadsSpecial +" Embedded expressions in strings +syn region tadsEmbedded contained       start="<<" end=">>" contains=tadsKeyword + +" TADS doesn't have \xxx, right? +"syn match cSpecial contained	"\\[0-7][0-7][0-7]\=\|\\." +"syn match cSpecialCharacter	"'\\[0-7][0-7]'" +"syn match cSpecialCharacter	"'\\[0-7][0-7][0-7]'" + +"catch errors caused by wrong parenthesis +"syn region cParen		transparent start='(' end=')' contains=ALLBUT,cParenError,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel +"syn match cParenError		")" +"syn match cInParen contained	"[{}]" +syn region tadsBrace		transparent start='{' end='}' contains=ALLBUT,tadsBraceError,tadsIncluded,tadsSpecial,tadsTodo +syn match tadsBraceError		"}" + +"integer number (TADS has no floating point numbers) +syn case ignore +syn match tadsNumber		"\<[0-9]\+\>" +"hex number +syn match tadsNumber		"\<0x[0-9a-f]\+\>" +syn match tadsIdentifier	"\<[a-z][a-z0-9_$]*\>" +syn case match +" flag an octal number with wrong digits +syn match tadsOctalError		"\<0[0-7]*[89]" + +" Removed complicated c_comment_strings +syn region tadsComment		start="/\*" end="\*/" contains=tadsTodo +syn match tadsComment		"//.*" contains=tadsTodo +syntax match tadsCommentError	"\*/" + +syn region tadsPreCondit	start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tadsComment,tadsString,tadsNumber,tadsCommentError +syn region tadsIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match tadsIncluded contained "<[^>]*>" +syn match tadsInclude		"^\s*#\s*include\>\s*["<]" contains=tadsIncluded +syn region tadsDefine		start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInBrace,tadsIdentifier + +syn region tadsPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInParen,tadsIdentifier + +" Highlight User Labels +" TODO labels for gotos? +"syn region	cMulti		transparent start='?' end=':' contains=ALLBUT,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel,cBitField +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +"syn match	cUserCont	"^\s*\I\i*\s*:$" contains=cUserLabel +"syn match	cUserCont	";\s*\I\i*\s*:$" contains=cUserLabel +"syn match	cUserCont	"^\s*\I\i*\s*:[^:]" contains=cUserLabel +"syn match	cUserCont	";\s*\I\i*\s*:[^:]" contains=cUserLabel + +"syn match	cUserLabel	"\I\i*" contained + +" identifier: class-name [, class-name [...]] [property-list] ; +" Don't highlight comment in class def +syn match tadsClassDef		"\<class\>[^/]*" contains=tadsObjectDef,tadsClass +syn match tadsClass contained   "\<class\>" +syn match tadsObjectDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*[a-zA-Z0-9_$]\+\(\s*,\s*[a-zA-Z][a-zA-Z0-9_$]*\)*\(\s*;\)\=" +syn keyword tadsFunction contained function +syn match tadsFunctionDef	 "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*function[^{]*" contains=tadsFunction +"syn region tadsObject		  transparent start = '[a-zA-Z][\i$]\s*:\s*' end=";" contains=tadsBrace,tadsObjectDef + +" How far back do we go to find matching groups +if !exists("tads_minlines") +  let tads_minlines = 15 +endif +exec "syn sync ccomment tadsComment minlines=" . tads_minlines +if !exists("tads_sync_dist") +  let tads_sync_dist = 100 +endif +execute "syn sync maxlines=" . tads_sync_dist + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +" The default methods for highlighting.  Can be overridden later +hi def link tadsFunctionDef Function +hi def link tadsFunction  Structure +hi def link tadsClass     Structure +hi def link tadsClassDef  Identifier +hi def link tadsObjectDef Identifier +" no highlight for tadsEmbedded, so it prints as normal text w/in the string + +hi def link tadsOperator	Operator +hi def link tadsStructure	Structure +hi def link tadsTodo	Todo +hi def link tadsLabel	Label +hi def link tadsConditional	Conditional +hi def link tadsRepeat	Repeat +hi def link tadsException	Exception +hi def link tadsStatement	Statement +hi def link tadsStorageClass	StorageClass +hi def link tadsKeyWord   Keyword +hi def link tadsSpecial	SpecialChar +hi def link tadsNumber	Number +hi def link tadsBoolean	Boolean +hi def link tadsDoubleString	tadsString +hi def link tadsSingleString	tadsString + +hi def link tadsOctalError	tadsError +hi def link tadsCommentError	tadsError +hi def link tadsBraceError	tadsError +hi def link tadsInBrace	tadsError +hi def link tadsError	Error + +hi def link tadsInclude	Include +hi def link tadsPreProc	PreProc +hi def link tadsDefine	Macro +hi def link tadsIncluded	tadsString +hi def link tadsPreCondit	PreCondit + +hi def link tadsString	String +hi def link tadsComment	Comment + + + +let b:current_syntax = "tads" + +" Changes: +" 11/18/99 Added a bunch of TADS functions, tadsException +" 10/22/99 Misspelled Moolenaar (sorry!), c_minlines to tads_minlines +" +" vim: ts=8 + +endif | 
