Compare commits

..

1 Commits

Author SHA1 Message Date
Adam Stankiewicz
81deccef65 Update 2016-07-30 13:18:40 +02:00
138 changed files with 7065 additions and 12263 deletions

167
README.md
View File

@@ -1,4 +1,4 @@
# vim-polyglot [![Build Status][travis-img-url]][travis-url] [![Maintenance](https://img.shields.io/maintenance/yes/2017.svg?maxAge=2592000)]() # vim-polyglot [![Build Status][travis-img-url]][travis-url] [![Maintenance](https://img.shields.io/maintenance/yes/2016.svg?maxAge=2592000)]()
[travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.svg [travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.svg
[travis-url]: https://travis-ci.org/sheerun/vim-polyglot [travis-url]: https://travis-ci.org/sheerun/vim-polyglot
@@ -8,7 +8,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. > 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 **won't affect your startup time**, as scripts are loaded only on demand\*.
- It **installs and updates 100+ times faster** than 100+ packages it consist of. - It **installs and updates 70+ times faster** than 70+ packages it consist of.
- Solid syntax and indentation support. Only the best language packs. - Solid syntax and indentation support. Only the best language packs.
- All unnecessary files are ignored (like enormous documentation from php support). - All unnecessary files are ignored (like enormous documentation from php support).
- No support for esoteric languages, only most popular ones (modern too, like `slim`). - No support for esoteric languages, only most popular ones (modern too, like `slim`).
@@ -23,119 +23,94 @@ A collection of language packs for Vim.
Optionally download one of the [releases](https://github.com/sheerun/vim-polyglot/releases) and unpack it directly under `~/.vim` directory. Optionally download one of the [releases](https://github.com/sheerun/vim-polyglot/releases) and unpack it directly under `~/.vim` directory.
You can also use Vim 8 built-in package manager:
```
mkdir -p ~/.vim/pack/default/start
git clone https://github.com/sheerun/vim-polyglot ~/.vim/pack/default/start/vim-polyglot
```
NOTE: Not all features of listed language packs are available. We strip them from functionality slowing vim startup in general (for example we ignore `plugins` folder that is loaded regardless of file type, use `ftplugin` instead).
If you need full functionality of any plugin, please use it directly with your plugin manager.
## Language packs ## Language packs
- [ansible](https://github.com/pearofducks/ansible-vim) (syntax, indent, ftplugin)
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim) (syntax)
- [applescript](https://github.com/vim-scripts/applescript.vim) (syntax) - [applescript](https://github.com/vim-scripts/applescript.vim) (syntax)
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent) - [ansible](https://github.com/pearofducks/ansible-vim) (syntax, indent, ftplugin, ftdetect)
- [asciidoc](https://github.com/asciidoc/vim-asciidoc) (syntax) - [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent, ftdetect)
- [blade](https://github.com/jwalton512/vim-blade) (syntax, indent, ftplugin) - [blade](https://github.com/jwalton512/vim-blade) (syntax, indent, ftplugin, ftdetect)
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax) - [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax)
- [c/c++](https://github.com/vim-jp/vim-cpp) (syntax) - [c/c++](https://github.com/vim-jp/vim-cpp) (syntax)
- [caddyfile](https://github.com/joshglendenning/vim-caddyfile) (syntax, indent, ftplugin) - [cjsx](https://github.com/mtscout6/vim-cjsx) (ftdetect, syntax, ftplugin)
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin) - [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin, ftdetect)
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin) - [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin) - [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin, ftdetect)
- [cql](https://github.com/elubow/cql-vim) (syntax) - [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin, ftdetect)
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin) - [cql](https://github.com/elubow/cql-vim) (syntax, ftdetect)
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin)
- [css](https://github.com/JulesWang/css.vim) (syntax) - [css](https://github.com/JulesWang/css.vim) (syntax)
- [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin) - [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin, ftdetect)
- [dart](https://github.com/dart-lang/dart-vim-plugin) (syntax, indent, autoload, ftplugin) - [dart](https://github.com/dart-lang/dart-vim-plugin) (syntax, indent, autoload, ftplugin, ftdetect)
- [dockerfile](https://github.com/docker/docker) (syntax) - [dockerfile](https://github.com/honza/dockerfile.vim) (syntax, ftdetect)
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, autoload, ftplugin) - [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, ftplugin, ftdetect)
- [elm](https://github.com/lambdatoast/elm.vim) (syntax, indent, autoload, ftplugin) - [elm](https://github.com/lambdatoast/elm.vim) (syntax, indent, autoload, ftplugin, ftdetect)
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin) - [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin, ftdetect)
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin) - [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin, ftdetect)
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent) - [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent, ftdetect)
- [fish](https://github.com/dag/vim-fish) (syntax, indent, compiler, autoload, ftplugin) - [fish](https://github.com/dag/vim-fish) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin) - [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin, ftdetect)
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent) - [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent, ftdetect)
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax) - [go](https://github.com/fatih/vim-go) (syntax, compiler, indent, ftdetect)
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
- [graphql](https://github.com/jparise/vim-graphql) (syntax, ftplugin)
- [groovy](https://github.com/vim-scripts/groovy.vim) (syntax) - [groovy](https://github.com/vim-scripts/groovy.vim) (syntax)
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin) - [haml](https://github.com/tpope/vim-haml) (syntax, indent, compiler, ftplugin, ftdetect)
- [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin) - [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin, ftdetect)
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin) - [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin, ftdetect)
- [haxe](https://github.com/yaymukund/vim-haxe) (syntax) - [haxe](https://github.com/yaymukund/vim-haxe) (syntax, ftdetect)
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin) - [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin)
- [i3](https://github.com/PotatoesMaster/i3-vim-syntax) (syntax, ftplugin) - [jasmine](https://github.com/glanotte/vim-jasmine) (syntax, ftdetect)
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax) - [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, ftdetect, ftplugin, extras)
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras) - [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin, ftdetect)
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin) - [jst](https://github.com/briancollins/vim-jst) (syntax, indent, ftdetect)
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent) - [jsx](https://github.com/mxw/vim-jsx) (ftdetect, after)
- [jsx](https://github.com/mxw/vim-jsx) (after) - [julia](https://github.com/dcjones/julia-minimalist-vim) (syntax, indent, ftdetect)
- [julia](https://github.com/dcjones/julia-minimalist-vim) (syntax, indent) - [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent, ftdetect)
- [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent)
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin) - [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin) - [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin, ftdetect)
- [liquid](https://github.com/tpope/vim-liquid) (syntax, indent, ftplugin) - [liquid](https://github.com/tpope/vim-liquid) (syntax, indent, ftplugin, ftdetect)
- [livescript](https://github.com/gkz/vim-ls) (syntax, indent, compiler, ftplugin) - [livescript](https://github.com/gkz/vim-ls) (syntax, indent, compiler, ftplugin, ftdetect)
- [lua](https://github.com/tbastos/vim-lua) (syntax, indent) - [lua](https://github.com/tbastos/vim-lua) (syntax, indent)
- [mako](https://github.com/sophacles/vim-bundle-mako) (syntax, indent, ftplugin) - [mako](https://github.com/sophacles/vim-bundle-mako) (syntax, indent, ftplugin, ftdetect)
- [markdown](https://github.com/plasticboy/vim-markdown) (syntax) - [markdown](https://github.com/plasticboy/vim-markdown) (syntax, ftdetect)
- [mathematica](https://github.com/rsmenon/vim-mathematica) (syntax, ftplugin) - [nginx](https://github.com/othree/nginx-contrib-vim) (syntax, indent, ftdetect)
- [nginx](https://github.com/chr4/nginx.vim) (syntax, indent, ftplugin) - [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent, ftdetect)
- [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent) - [nix](https://github.com/spwhitt/vim-nix) (syntax, ftplugin, ftdetect)
- [nix](https://github.com/spwhitt/vim-nix) (syntax, ftplugin)
- [objc](https://github.com/b4winckler/vim-objc) (ftplugin, syntax, indent) - [objc](https://github.com/b4winckler/vim-objc) (ftplugin, syntax, indent)
- [ocaml](https://github.com/jrk/vim-ocaml) (syntax, indent, ftplugin) - [ocaml](https://github.com/jrk/vim-ocaml) (syntax, indent, ftplugin)
- [octave](https://github.com/vim-scripts/octave.vim--) (syntax) - [octave](https://github.com/vim-scripts/octave.vim--) (syntax)
- [opencl](https://github.com/petRUShka/vim-opencl) (syntax, indent, ftplugin) - [opencl](https://github.com/petRUShka/vim-opencl) (syntax, indent, ftplugin, ftdetect)
- [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin) - [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin, ftdetect)
- [pgsql](https://github.com/exu/pgsql.vim) (syntax) - [pgsql](https://github.com/exu/pgsql.vim) (syntax, ftdetect)
- [php](https://github.com/StanAngeloff/php.vim) (syntax) - [php](https://github.com/StanAngeloff/php.vim) (syntax)
- [plantuml](https://github.com/aklt/plantuml-syntax) (syntax, indent, ftplugin) - [plantuml](https://github.com/aklt/plantuml-syntax) (syntax, ftplugin, ftdetect)
- [powershell](https://github.com/PProvost/vim-ps1) (syntax, indent, ftplugin) - [powershell](https://github.com/Persistent13/vim-ps1) (syntax, indent, ftplugin, ftdetect)
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent) - [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent, ftdetect)
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin) - [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin, ftdetect)
- [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin) - [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin, ftdetect)
- [purescript](https://github.com/raichoo/purescript-vim) (syntax, indent, ftplugin) - [purescript](https://github.com/raichoo/purescript-vim) (syntax, indent, ftdetect)
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload)
- [python](https://github.com/mitsuhiko/vim-python-combined) (syntax, indent) - [python](https://github.com/mitsuhiko/vim-python-combined) (syntax, indent)
- [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin) - [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin, ftdetect)
- [r-lang](https://github.com/vim-scripts/R.vim) (syntax, ftplugin) - [r-lang](https://github.com/vim-scripts/R.vim) (syntax, ftplugin)
- [racket](https://github.com/wlangstroth/vim-racket) (syntax, indent, autoload, ftplugin)
- [ragel](https://github.com/jneen/ragel.vim) (syntax) - [ragel](https://github.com/jneen/ragel.vim) (syntax)
- [raml](https://github.com/IN3D/vim-raml) (syntax, ftplugin) - [rspec](https://github.com/sheerun/rspec.vim) (syntax, ftdetect)
- [rspec](https://github.com/sheerun/rspec.vim) (syntax) - [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin) - [rust](https://github.com/rust-lang/rust.vim) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
- [rust](https://github.com/rust-lang/rust.vim) (syntax, indent, compiler, autoload, ftplugin) - [sbt](https://github.com/derekwyatt/vim-sbt) (syntax, ftdetect)
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax) - [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin, ftdetect)
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin) - [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin, ftdetect)
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, autoload, ftplugin) - [solidity](https://github.com/ethereum/vim-solidity) (syntax, indent, ftdetect)
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin) - [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin, ftdetect)
- [solidity](https://github.com/ethereum/vim-solidity) (syntax, indent) - [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin, ftdetect)
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin) - [systemd](https://github.com/kurayama/systemd-vim-syntax) (syntax, ftdetect)
- [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin) - [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin, ftdetect)
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax) - [thrift](https://github.com/solarnz/thrift.vim) (syntax, ftdetect)
- [systemd](https://github.com/kurayama/systemd-vim-syntax) (syntax) - [tmux](https://github.com/keith/tmux.vim) (syntax, ftplugin, ftdetect)
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, ftplugin)
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin)
- [thrift](https://github.com/solarnz/thrift.vim) (syntax)
- [tmux](https://github.com/keith/tmux.vim) (syntax, ftplugin)
- [tomdoc](https://github.com/wellbredgrapefruit/tomdoc.vim) (syntax) - [tomdoc](https://github.com/wellbredgrapefruit/tomdoc.vim) (syntax)
- [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin) - [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin, ftdetect)
- [twig](https://github.com/lumiliet/vim-twig) (syntax, indent, ftplugin) - [twig](https://github.com/evidens/vim-twig) (syntax, ftplugin)
- [typescript](https://github.com/leafgarland/typescript-vim) (syntax, indent, compiler, ftplugin) - [typescript](https://github.com/leafgarland/typescript-vim) (syntax, indent, compiler, ftplugin, ftdetect)
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent) - [vala](https://github.com/tkztmk/vim-vala) (syntax, indent, ftdetect)
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax) - [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
- [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax) - [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax, ftdetect)
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent) - [vm](https://github.com/lepture/vim-velocity) (syntax, indent, ftdetect)
- [vue](https://github.com/posva/vim-vue) (syntax, indent, ftplugin)
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax) - [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin) - [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin)
- [yard](https://github.com/sheerun/vim-yardoc) (syntax) - [yard](https://github.com/sheerun/vim-yardoc) (syntax)

View File

@@ -7,10 +7,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
setlocal iskeyword+=$ suffixesadd+=.js setlocal iskeyword+=$ suffixesadd+=.js
if exists('b:undo_ftplugin') let b:undo_ftplugin .= ' | setlocal iskeyword< suffixesadd<'
let b:undo_ftplugin .= ' | setlocal iskeyword< suffixesadd<'
else
let b:undo_ftplugin = 'setlocal iskeyword< suffixesadd<'
endif
endif endif

View File

@@ -1,61 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
if !exists('g:terraform_align')
let g:terraform_align = 0
endif
if g:terraform_align && exists(':Tabularize')
inoremap <buffer> <silent> = =<Esc>:call <SID>terraformalign()<CR>a
function! s:terraformalign()
let p = '^.*=[^>]*$'
if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*=\s*\zs.*'))
Tabularize/=/l1
normal! 0
call search(repeat('[^=]*=',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
endif
endfunction
endif
function! TerraformFolds()
let thisline = getline(v:lnum)
if match(thisline, '^resource') >= 0
return ">1"
elseif match(thisline, '^provider') >= 0
return ">1"
elseif match(thisline, '^module') >= 0
return ">1"
elseif match(thisline, '^variable') >= 0
return ">1"
elseif match(thisline, '^output') >= 0
return ">1"
else
return "="
endif
endfunction
setlocal foldmethod=expr
setlocal foldexpr=TerraformFolds()
setlocal foldlevel=1
function! TerraformFoldText()
let foldsize = (v:foldend-v:foldstart)
return getline(v:foldstart).' ('.foldsize.' lines)'
endfunction
setlocal foldtext=TerraformFoldText()
"inoremap <space> <C-O>za
nnoremap <space> za
onoremap <space> <C-C>za
vnoremap <space> zf
" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
if get(g:, "terraform_align", 1)
setlocal tabstop=2
setlocal softtabstop=2
setlocal shiftwidth=2
endif
endif

View File

@@ -20,7 +20,7 @@ setlocal indentexpr=GetCoffeeHtmlIndent(v:lnum)
function! GetCoffeeHtmlIndent(curlinenum) function! GetCoffeeHtmlIndent(curlinenum)
" See if we're inside a coffeescript block. " See if we're inside a coffeescript block.
let scriptlnum = searchpair('<script [^>]*type=[''"]\?text/coffeescript[''"]\?[^>]*>', '', let scriptlnum = searchpair('<script [^>]*type="text/coffeescript"[^>]*>', '',
\ '</script>', 'bWn') \ '</script>', 'bWn')
let prevlnum = prevnonblank(a:curlinenum) let prevlnum = prevnonblank(a:curlinenum)

View File

@@ -24,16 +24,6 @@ syn match cCustomParen "(" contains=cParen contains=cCppParen
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
hi def link cCustomFunc Function hi def link cCustomFunc Function
" -----------------------------------------------------------------------------
" Highlight member variable names.
" -----------------------------------------------------------------------------
if exists('g:cpp_member_variable_highlight') && g:cpp_member_variable_highlight
syn match cCustomDot "\." contained
syn match cCustomPtr "->" contained
syn match cCustomMemVar "\(\.\|->\)\w\+" contains=cCustomDot,cCustomPtr
hi def link cCustomMemVar Function
endif
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------
" Source: aftersyntaxc.vim " Source: aftersyntaxc.vim
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------

File diff suppressed because it is too large Load Diff

View File

@@ -5,11 +5,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script')
" URL: http://github.com/kchmck/vim-coffee-script " URL: http://github.com/kchmck/vim-coffee-script
" License: WTFPL " License: WTFPL
if exists('b:current_syntax')
let s:current_syntax_save = b:current_syntax
endif
" Inherit coffee from html so coffeeComment isn't redefined and given higher " Inherit coffee from html so coffeeComment isn't redefined and given higher
" priority than hamlInterpolation. " priority than hamlInterpolation.
syn cluster hamlCoffeescript contains=@htmlCoffeeScript syn cluster hamlCoffeescript contains=@htmlCoffeeScript
@@ -19,9 +14,4 @@ syn region hamlCoffeescriptFilter matchgroup=hamlFilter
\ contains=@hamlCoffeeScript,hamlInterpolation \ contains=@hamlCoffeeScript,hamlInterpolation
\ keepend \ keepend
if exists('s:current_syntax_save')
let b:current_syntax = s:current_syntax_save
unlet s:current_syntax_save
endif
endif endif

View File

@@ -5,22 +5,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script')
" URL: http://github.com/kchmck/vim-coffee-script " URL: http://github.com/kchmck/vim-coffee-script
" License: WTFPL " License: WTFPL
if exists('b:current_syntax')
let s:current_syntax_save = b:current_syntax
endif
" Syntax highlighting for text/coffeescript script tags " Syntax highlighting for text/coffeescript script tags
syn include @htmlCoffeeScript syntax/coffee.vim syn include @htmlCoffeeScript syntax/coffee.vim
syn region coffeeScript start=#<script [^>]*type=['"]\?text/coffeescript['"]\?[^>]*># syn region coffeeScript start=#<script [^>]*type="text/coffeescript"[^>]*>#
\ end=#</script>#me=s-1 keepend \ end=#</script>#me=s-1 keepend
\ contains=@htmlCoffeeScript,htmlScriptTag,@htmlPreproc \ contains=@htmlCoffeeScript,htmlScriptTag,@htmlPreproc
\ containedin=htmlHead \ containedin=htmlHead
if exists('s:current_syntax_save')
let b:current_syntax = s:current_syntax_save
unlet s:current_syntax_save
endif
endif endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1
@@ -34,22 +25,6 @@ syn region ShaderScript
\ end="</script>"me=s-1 \ end="</script>"me=s-1
\ contains=@GLSL,htmlScriptTag,@htmlPreproc \ contains=@GLSL,htmlScriptTag,@htmlPreproc
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
" Vim syntax file
" Language: HTML (version 5.1)
" Last Change: 2017 Feb 15
" License: Public domain
" (but let me know if you like :) )
"
" Maintainer: Kao, Wei-Ko(othree) ( othree AT gmail DOT com )
" Comment
" https://github.com/w3c/html/issues/694
syntax region htmlComment start=+<!--+ end=+-->+ contains=@Spell
syntax region htmlComment start=+<!DOCTYPE+ keepend end=+>+
endif endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'less') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'less') == -1

View File

@@ -1,107 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mathematica') == -1
"Vim conceal file
" Language: Mathematica
" Maintainer: R. Menon <rsmenon@icloud.com>
" Last Change: Feb 25, 2013
if (exists('g:mma_candy') && g:mma_candy == 0) || !has('conceal') || &enc != 'utf-8'
finish
endif
"These are fairly safe and straightforward conceals
if exists('g:mma_candy') && g:mma_candy > 0
"Rules
syntax match mmaOperator "->" conceal cchar="Rule
syntax match mmaOperator ":>" conceal cchar="RuleDelayed
"Logicals
syntax match mmaOperator "===" conceal cchar="SameQ
syntax match mmaOperator "=!=" conceal cchar="UnsameQ
syntax match mmaOperator "!=" conceal cchar="NotEqual
syntax match mmaOperator "<=" conceal cchar="LessEqual
syntax match mmaOperator ">=" conceal cchar="GreaterEqual
"Constants
syntax keyword mmaSystemSymbol Pi conceal cchar=π
syntax keyword mmaSystemSymbol Infinity conceal cchar=
syntax keyword mmaSystemSymbol Degree conceal cchar=°
"Domains
syntax keyword mmaSystemSymbol Reals conceal cchar=
syntax keyword mmaSystemSymbol Integers conceal cchar=
syntax keyword mmaSystemSymbol Complexes conceal cchar=
syntax keyword mmaSystemSymbol Rationals conceal cchar=
"Greek
syntax match mmaSymbol "\\\[CapitalAlpha\]" conceal cchar=Α
syntax match mmaSymbol "\\\[CapitalBeta\]" conceal cchar=Β
syntax match mmaSymbol "\\\[CapitalGamma\]" conceal cchar=Γ
syntax match mmaSymbol "\\\[CapitalDelta\]" conceal cchar=Δ
syntax match mmaSymbol "\\\[CapitalEpsilon\]" conceal cchar=Ε
syntax match mmaSymbol "\\\[CapitalZeta\]" conceal cchar=Ζ
syntax match mmaSymbol "\\\[CapitalEta\]" conceal cchar=Η
syntax match mmaSymbol "\\\[CapitalTheta\]" conceal cchar=Θ
syntax match mmaSymbol "\\\[CapitalIota\]" conceal cchar=Ι
syntax match mmaSymbol "\\\[CapitalKappa\]" conceal cchar=Κ
syntax match mmaSymbol "\\\[CapitalLambda\]" conceal cchar=Λ
syntax match mmaSymbol "\\\[CapitalMu\]" conceal cchar=Μ
syntax match mmaSymbol "\\\[CapitalNu\]" conceal cchar=Ν
syntax match mmaSymbol "\\\[CapitalXi\]" conceal cchar=Ξ
syntax match mmaSymbol "\\\[CapitalOmicron\]" conceal cchar=Ο
syntax match mmaSymbol "\\\[CapitalPi\]" conceal cchar=Π
syntax match mmaSymbol "\\\[CapitalRho\]" conceal cchar=Ρ
syntax match mmaSymbol "\\\[CapitalSigma\]" conceal cchar=Σ
syntax match mmaSymbol "\\\[CapitalTau\]" conceal cchar=Τ
syntax match mmaSymbol "\\\[CapitalUpsilon\]" conceal cchar=Υ
syntax match mmaSymbol "\\\[CapitalPhi\]" conceal cchar=Φ
syntax match mmaSymbol "\\\[CapitalChi\]" conceal cchar=Χ
syntax match mmaSymbol "\\\[CapitalPsi\]" conceal cchar=Ψ
syntax match mmaSymbol "\\\[CapitalOmega\]" conceal cchar=Ω
syntax match mmaSymbol "\\\[Alpha\]" conceal cchar=α
syntax match mmaSymbol "\\\[Beta\]" conceal cchar=β
syntax match mmaSymbol "\\\[Gamma\]" conceal cchar=γ
syntax match mmaSymbol "\\\[Delta\]" conceal cchar=δ
syntax match mmaSymbol "\\\[Epsilon\]" conceal cchar=ε
syntax match mmaSymbol "\\\[Zeta\]" conceal cchar=ζ
syntax match mmaSymbol "\\\[Eta\]" conceal cchar=η
syntax match mmaSymbol "\\\[Theta\]" conceal cchar=θ
syntax match mmaSymbol "\\\[Iota\]" conceal cchar=ι
syntax match mmaSymbol "\\\[Kappa\]" conceal cchar=κ
syntax match mmaSymbol "\\\[Lambda\]" conceal cchar=λ
syntax match mmaSymbol "\\\[Mu\]" conceal cchar=μ
syntax match mmaSymbol "\\\[Nu\]" conceal cchar=ν
syntax match mmaSymbol "\\\[Xi\]" conceal cchar=ξ
syntax match mmaSymbol "\\\[Omicron\]" conceal cchar=ο
syntax match mmaSymbol "\\\[Pi\]" conceal cchar=π
syntax match mmaSymbol "\\\[Rho\]" conceal cchar=ρ
syntax match mmaSymbol "\\\[Sigma\]" conceal cchar=σ
syntax match mmaSymbol "\\\[Tau\]" conceal cchar=τ
syntax match mmaSymbol "\\\[Upsilon\]" conceal cchar=υ
syntax match mmaSymbol "\\\[Phi\]" conceal cchar=φ
syntax match mmaSymbol "\\\[Chi\]" conceal cchar=χ
syntax match mmaSymbol "\\\[Psi\]" conceal cchar=ψ
syntax match mmaSymbol "\\\[Omega\]" conceal cchar=ω
endif
"These might be troublesome if the appropriate fonts are missing. Also, they don't
"look quite as good as the earlier ones, so enable only if the user chooses to
if exists('g:mma_candy') && g:mma_candy == 2
"Constants
syntax keyword mmaSystemSymbol I conceal cchar=
syntax keyword mmaSystemSymbol E conceal cchar=
"Functions
syntax keyword mmaSystemSymbol Sum conceal cchar=
syntax keyword mmaSystemSymbol Product conceal cchar=
syntax keyword mmaSystemSymbol Sqrt conceal cchar=
"Misc
syntax match mmaOperator ">>" conceal cchar=» "Put
syntax match mmaOperator "<<" conceal cchar=« "Get
endif
hi! link Conceal Normal
setlocal conceallevel=2
endif

View File

@@ -21,7 +21,9 @@ if version < 600
endif endif
syntax clear syntax clear
syn match yamlDelimiter "[:,-]"
syn match yamlBlock "[\[\]\{\}\|\>]" syn match yamlBlock "[\[\]\{\}\|\>]"
syn match yamlOperator "[?^+-]\|=>"
syn region yamlComment start="\#" end="$" syn region yamlComment start="\#" end="$"
syn match yamlIndicator "#YAML:\S\+" syn match yamlIndicator "#YAML:\S\+"
@@ -38,12 +40,11 @@ syn keyword yamlConstant NULL Null null NONE None none NIL Nil nil
syn keyword yamlConstant TRUE True true YES Yes yes ON On on syn keyword yamlConstant TRUE True true YES Yes yes ON On on
syn keyword yamlConstant FALSE False false NO No no OFF Off off syn keyword yamlConstant FALSE False false NO No no OFF Off off
syn match yamlKey "^\s*\zs[^ \t\"]\+\ze\s*:" syn match yamlKey "\w\+\ze\s*:"
syn match yamlKey "^\s*-\s*\zs[^ \t\"]\+\ze\s*:"
syn match yamlAnchor "&\S\+" syn match yamlAnchor "&\S\+"
syn match yamlAlias "*\S\+" syn match yamlAlias "*\S\+"
" Setup the highlighting links " Setupt the hilighting links
hi link yamlConstant Keyword hi link yamlConstant Keyword
hi link yamlIndicator PreCondit hi link yamlIndicator PreCondit
@@ -54,7 +55,10 @@ hi link yamlType Type
hi link yamlComment Comment hi link yamlComment Comment
hi link yamlBlock Operator hi link yamlBlock Operator
hi link yamlOperator Operator
hi link yamlDelimiter Delimiter
hi link yamlString String hi link yamlString String
hi link yamlEscape Special hi link yamlEscape Special
endif endif

View File

@@ -20,20 +20,18 @@ endfunction
function! dart#fmt(q_args) abort function! dart#fmt(q_args) abort
if executable('dartfmt') if executable('dartfmt')
let buffer_content = join(getline(1, '$'), "\n") let path = expand('%:p:gs:\:/:')
let joined_lines = system(printf('dartfmt %s', a:q_args), buffer_content) if filereadable(path)
let joined_lines = system(printf('dartfmt %s %s', a:q_args, shellescape(path)))
if 0 == v:shell_error if 0 == v:shell_error
let win_view = winsaveview()
silent % delete _ silent % delete _
silent put=joined_lines silent put=joined_lines
silent 1 delete _ silent 1 delete _
call winrestview(win_view)
else else
let errors = split(joined_lines, "\n")[2:] call s:cexpr('line %l\, column %c of %f: %m', joined_lines)
let file_path = expand('%') endif
call map(errors, 'file_path.":".v:val') else
let error_format = '%A%f:line %l\, column %c of stdin: %m,%C%.%#' call s:error(printf('cannot read a file: "%s"', path))
call s:cexpr(error_format, join(errors, "\n"))
endif endif
else else
call s:error('cannot execute binary file: dartfmt') call s:error('cannot execute binary file: dartfmt')
@@ -68,86 +66,5 @@ function! dart#tojs(q_args) abort
endif endif
endfunction endfunction
" Finds the path to `uri`.
"
" If the file is a package: uri, looks for a .packages file to resolve the path.
" If the path cannot be resolved, or is not a package: uri, returns the
" original.
function! dart#resolveUri(uri) abort
if a:uri !~ 'package:'
return a:uri
endif
let package_name = substitute(a:uri, 'package:\(\w\+\)\/.*', '\1', '')
let [found, package_map] = s:PackageMap()
if !found
call s:error('cannot find .packages file')
return a:uri
endif
if !has_key(package_map, package_name)
call s:error('no package mapping for '.package_name)
return a:uri
endif
let package_lib = package_map[package_name]
return substitute(a:uri,
\ 'package:'.package_name,
\ escape(package_map[package_name], '\'),
\ '')
endfunction
" A map from package name to lib directory parse from a '.packages' file.
"
" Returns [found, package_map]
function! s:PackageMap() abort
let [found, dot_packages] = s:DotPackagesFile()
if !found
return [v:false, {}]
endif
let dot_packages_dir = fnamemodify(dot_packages, ':p:h')
let lines = readfile(dot_packages)
let map = {}
for line in lines
if line =~ '\s*#'
continue
endif
let package = substitute(line, ':.*$', '', '')
let lib_dir = substitute(line, '^[^:]*:', '', '')
if lib_dir =~ 'file:/'
let lib_dir = substitute(lib_dir, 'file://', '', '')
if lib_dir =~ '/[A-Z]:/'
let lib_dir = lib_dir[1:]
endif
else
let lib_dir = resolve(dot_packages_dir.'/'.lib_dir)
endif
if lib_dir =~ '/$'
let lib_dir = lib_dir[:len(lib_dir) - 2]
endif
let map[package] = lib_dir
endfor
return [v:true, map]
endfunction
" Finds a file name '.packages' in the cwd, or in any directory above the open
" file.
"
" Returns [found, file].
function! s:DotPackagesFile() abort
if filereadable('.packages')
return [v:true, '.packages']
endif
let dir_path = expand('%:p:h')
while v:true
let file_path = dir_path.'/.packages'
if filereadable(file_path)
return [v:true, file_path]
endif
let parent = fnamemodify(dir_path, ':h')
if dir_path == parent
break
endif
let dir_path = parent
endwhile
return [v:false, '']
endfunction
endif endif

View File

@@ -1,347 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
function! elixir#indent#debug(str)
if exists("g:elixir_indent_debug") && g:elixir_indent_debug
echom a:str
endif
endfunction
" Returns 0 or 1 based on whether or not the text starts with the given
" expression and is not a string or comment
function! elixir#indent#starts_with(text, expr, lnum)
let pos = match(a:text, '^\s*'.a:expr)
if pos == -1
return 0
else
" NOTE: @jbodah 2017-02-24: pos is the index of the match which is
" zero-indexed. Add one to make it the column number
if elixir#indent#is_string_or_comment(a:lnum, pos + 1)
return 0
else
return 1
end
end
endfunction
" Returns 0 or 1 based on whether or not the text ends with the given
" expression and is not a string or comment
function! elixir#indent#ends_with(text, expr, lnum)
let pos = match(a:text, a:expr.'\s*$')
if pos == -1
return 0
else
if elixir#indent#is_string_or_comment(a:lnum, pos)
return 0
else
return 1
end
end
endfunction
" Returns 0 or 1 based on whether or not the text matches the given expression
function! elixir#indent#contains(text, expr)
return a:text =~ a:expr
endfunction
" Returns 0 or 1 based on whether or not the given line number and column
" number pair is a string or comment
function! elixir#indent#is_string_or_comment(line, col)
return synIDattr(synID(a:line, a:col, 1), "name") =~ '\%(String\|Comment\)'
endfunction
" Skip expression for searchpair. Returns 0 or 1 based on whether the value
" under the cursor is a string or comment
function! elixir#indent#searchpair_back_skip()
" NOTE: @jbodah 2017-02-27: for some reason this function gets called with
" and index that doesn't exist in the line sometimes. Detect and account for
" that situation
let curr_col = col('.')
if getline('.')[curr_col-1] == ''
let curr_col = curr_col-1
endif
return elixir#indent#is_string_or_comment(line('.'), curr_col)
endfunction
" DRY up searchpair calls
function! elixir#indent#searchpair_back(start, mid, end)
let line = line('.')
return searchpair(a:start, a:mid, a:end, 'bnW', "line('.') == " . line . " || elixir#indent#searchpair_back_skip()")
endfunction
" DRY up searchpairpos calls
function! elixir#indent#searchpairpos_back(start, mid, end)
let line = line('.')
return searchpairpos(a:start, a:mid, a:end, 'bnW', "line('.') == " . line . " || elixir#indent#searchpair_back_skip()")
endfunction
" DRY up regex for keywords that 1) makes sure we only look at complete words
" and 2) ignores atoms
function! elixir#indent#keyword(expr)
return ':\@<!\<\C\%('.a:expr.'\)\>:\@!'
endfunction
function! elixir#indent#starts_with_comment(text)
return match(a:text, '^\s*#') != -1
endfunction
" Start at the end of text and search backwards looking for a match. Also peek
" ahead if we get a match to make sure we get a complete match. This means
" that the result should be the position of the start of the right-most match
function! elixir#indent#find_last_pos(lnum, text, match)
let last = len(a:text) - 1
let c = last
while c >= 0
let substr = strpart(a:text, c, last)
let peek = strpart(a:text, c - 1, last)
let ss_match = match(substr, a:match)
if ss_match != -1
let peek_match = match(peek, a:match)
if peek_match == ss_match + 1
let syng = synIDattr(synID(a:lnum, c + ss_match, 1), 'name')
if syng !~ '\%(String\|Comment\)'
return c + ss_match
end
end
end
let c -= 1
endwhile
return -1
endfunction
function! elixir#indent#handle_top_of_file(_lnum, _text, prev_nb_lnum, _prev_nb_text)
if a:prev_nb_lnum == 0
return 0
else
return -1
end
endfunction
" TODO: @jbodah 2017-03-31: remove
function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text)
if elixir#indent#ends_with(a:prev_nb_text, elixir#indent#keyword('do'), a:prev_nb_lnum)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('end'), a:lnum)
return indent(a:prev_nb_lnum)
else
return indent(a:prev_nb_lnum) + &sw
end
else
return -1
endif
endfunction
function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if elixir#indent#ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text)
if elixir#indent#starts_with(a:text, '|>', a:lnum)
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
if pos == -1
return indent(a:prev_nb_lnum)
else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
if next_word_pos == -1
return indent(a:prev_nb_lnum) + &sw
else
return pos + 1 + next_word_pos
end
end
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with_comment(a:text)
return indent(a:prev_nb_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('end'), a:lnum)
let pair_lnum = elixir#indent#searchpair_back(elixir#indent#keyword('do\|fn'), '', elixir#indent#keyword('end').'\zs')
return indent(pair_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text, _prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('catch\|rescue\|after\|else'), a:lnum)
let pair_lnum = elixir#indent#searchpair_back(elixir#indent#keyword('with\|receive\|try\|if\|fn'), elixir#indent#keyword('catch\|rescue\|after\|else').'\zs', elixir#indent#keyword('end'))
return indent(pair_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_close_bracket(lnum, text, _prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with(a:text, '\%(\]\|}\|)\)', a:lnum)
let pair_lnum = elixir#indent#searchpair_back('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)')
return indent(pair_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if elixir#indent#starts_with(a:text, binary_operator, a:lnum)
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
if pos == -1
return indent(a:prev_nb_lnum)
else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
if next_word_pos == -1
return indent(a:prev_nb_lnum) + &sw
else
return pos + 1 + next_word_pos
end
end
else
return -1
endif
endfunction
" To handle nested structures properly we need to find the innermost
" nested structure. For example, we might be in a function in a map in a
" function, etc... so we need to first figure out what the innermost structure
" is then forward execution to the proper handler
function! elixir#indent#handle_inside_nested_construct(lnum, text, prev_nb_lnum, prev_nb_text)
let start_pattern = '\C\%(\<if\>\|\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<fn\>\|{\|\[\|(\)'
let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)'
let pair_info = elixir#indent#searchpairpos_back(start_pattern, '', end_pattern)
let pair_lnum = pair_info[0]
let pair_col = pair_info[1]
if pair_lnum != 0 || pair_col != 0
let pair_text = getline(pair_lnum)
let pair_char = pair_text[pair_col - 1]
if pair_char == 'f'
call elixir#indent#debug("testing elixir#indent#do_handle_inside_fn")
return elixir#indent#do_handle_inside_fn(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '['
call elixir#indent#debug("testing elixir#indent#do_handle_inside_square_brace")
return elixir#indent#do_handle_inside_square_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '{'
call elixir#indent#debug("testing elixir#indent#do_handle_inside_curly_brace")
return elixir#indent#do_handle_inside_curly_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '('
call elixir#indent#debug("testing elixir#indent#do_handle_inside_parens")
return elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
else
call elixir#indent#debug("testing elixir#indent#do_handle_inside_keyword_block")
return elixir#indent#do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
end
else
return -1
end
endfunction
function! elixir#indent#do_handle_inside_keyword_block(pair_lnum, _pair_col, _lnum, text, prev_nb_lnum, prev_nb_text)
let keyword_pattern = '\C\%(\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<after\>\|\<catch\>\|\<rescue\>\|\<else\>\)'
if a:pair_lnum
" last line is a "receive" or something
if elixir#indent#starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum)
call elixir#indent#debug("prev nb line is keyword")
return indent(a:prev_nb_lnum) + &sw
elseif elixir#indent#contains(a:text, '->')
call elixir#indent#debug("contains ->")
" TODO: @jbodah 2017-03-31: test contains ignores str + comments
return indent(a:pair_lnum) + &sw
elseif elixir#indent#contains(a:prev_nb_text, '->')
call elixir#indent#debug("prev nb line contains ->")
return indent(a:prev_nb_lnum) + &sw
else
call elixir#indent#debug("doesnt start with comment or contain ->")
return indent(a:prev_nb_lnum)
end
else
return -1
endif
endfunction
function! elixir#indent#do_handle_inside_fn(pair_lnum, _pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum && a:pair_lnum != a:lnum
if elixir#indent#contains(a:text, '->')
return indent(a:pair_lnum) + &sw
else
if elixir#indent#ends_with(a:prev_nb_text, '->', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw
else
return indent(a:prev_nb_lnum)
end
end
else
return -1
endif
endfunction
function! elixir#indent#do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
" If in list...
if a:pair_lnum != 0 || a:pair_col != 0
let pair_text = getline(a:pair_lnum)
let substr = strpart(pair_text, a:pair_col, len(pair_text)-1)
let indent_pos = match(substr, '\S')
if indent_pos != -1
return indent_pos + a:pair_col
else
return indent(a:pair_lnum) + &sw
endif
else
return -1
end
endfunction
function! elixir#indent#do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
return indent(a:pair_lnum) + &sw
endfunction
function! elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum
if elixir#indent#ends_with(a:prev_nb_text, '(', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw
elseif a:pair_lnum == a:prev_nb_lnum
" Align indent (e.g. "def add(a,")
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,')
if pos == -1
return 0
else
return pos
end
else
return indent(a:prev_nb_lnum)
end
else
return -1
endif
endfunction
function! elixir#indent#handle_inside_generic_block(lnum, _text, prev_nb_lnum, prev_nb_text)
let pair_lnum = searchpair(elixir#indent#keyword('do\|fn'), '', elixir#indent#keyword('end'), 'bW', "line('.') == ".a:lnum." || elixir#indent#is_string_or_comment(line('.'), col('.'))")
if pair_lnum
" TODO: @jbodah 2017-03-29: this should probably be the case in *all*
" blocks
if elixir#indent#ends_with(a:prev_nb_text, ',', a:prev_nb_lnum)
return indent(pair_lnum) + 2 * &sw
else
return indent(pair_lnum) + &sw
endif
else
return -1
endif
endfunction
endif

View File

@@ -1,28 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
function! elixir#util#get_filename(word) abort
let word = a:word
" get first thing that starts uppercase, until the first space or end of line
let word = substitute(word,'^\s*\(\u[^ ]\+\).*$','\1','g')
" remove any trailing characters that don't look like a nested module
let word = substitute(word,'\.\U.*$','','g')
" replace module dots with slash
let word = substitute(word,'\.','/','g')
" remove any special chars
let word = substitute(word,'[^A-z0-9-_/]','','g')
" convert to snake_case
let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
let word = substitute(word,'\(\l\|\d\)\(\u\)','\1_\2','g')
let word = substitute(word,'-','_','g')
let word = tolower(word)
return word
endfunction
endif

View File

@@ -6,7 +6,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
" Last Change: 2006 Oct 19 " Last Change: 2006 Oct 19
" Modified: othree <othree@gmail.com> " Modified: othree <othree@gmail.com>
" Changes: Add HTML5, WAI-ARIA support " Changes: Add HTML5, WAI-ARIA support
" Last Change: 2016 Oct 11 " Last Change: 2010 Sep 25
if !exists('g:aria_attributes_complete') if !exists('g:aria_attributes_complete')
let g:aria_attributes_complete = 1 let g:aria_attributes_complete = 1
@@ -276,9 +276,7 @@ function! htmlcomplete#CompleteTags(findstart, base)
" 1. Events attributes " 1. Events attributes
if context =~ '\s' if context =~ '\s'
" Sort out style, class, and on* cases " Sort out style, class, and on* cases
if context =~? "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" if context =~? "\\s\\(on[a-z]+\\|id\\|style\\|class\\)\\s*=\\s*[\"']"
\ || context =~? "style\\s*=\\s*[\"'][^\"']*$"
\ || context =~? 'on[a-z]*\s*=\s*\(''[^'']*\|"[^"]*\)$'
" Id, class completion {{{ " Id, class completion {{{
if context =~? "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" if context =~? "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
if context =~? "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" if context =~? "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"

View File

@@ -1,21 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'python-compiler') == -1
" Sometimes Python issues debugging messages
" which don't belong to a call stack context
" this function filters these messages
function! python#utils#fix_qflist() " {{{
let l:traceback = []
let l:qflist = getqflist()
for l:item in l:qflist
if !empty(l:item.type)
call add(l:traceback, l:item)
endif
endfor
if !empty(l:traceback)
call setqflist(l:traceback)
endif
endfunction " }}}
endif

View File

@@ -1,7 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'racket') == -1
if !exists("g:raco_command")
let g:raco_command = system("which raco")
endif
endif

View File

@@ -198,7 +198,7 @@ function! rubycomplete#Complete(findstart, base)
if c =~ '\w' if c =~ '\w'
continue continue
elseif ! c =~ '\.' elseif ! c =~ '\.'
let idx = -1 idx = -1
break break
else else
break break
@@ -589,15 +589,13 @@ class VimRubyCompletion
# {{{ main completion code # {{{ main completion code
def self.preload_rails def self.preload_rails
a = VimRubyCompletion.new a = VimRubyCompletion.new
if VIM::evaluate("has('nvim')") == 0 require 'Thread'
require 'thread'
Thread.new(a) do |b| Thread.new(a) do |b|
begin begin
b.load_rails b.load_rails
rescue rescue
end end
end end
end
a.load_rails a.load_rails
rescue rescue
end end

View File

@@ -22,20 +22,17 @@ endif
let s:got_fmt_error = 0 let s:got_fmt_error = 0
function! s:RustfmtCommandRange(filename, line1, line2) function! rustfmt#Format()
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]} let l:curw = winsaveview()
return printf("%s %s --write-mode=overwrite --file-lines '[%s]'", g:rustfmt_command, g:rustfmt_options, json_encode(l:arg)) let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
endfunction call writefile(getline(1, '$'), l:tmpname)
function! s:RustfmtCommand(filename) let command = g:rustfmt_command . " --write-mode=overwrite "
return g:rustfmt_command . " --write-mode=overwrite " . g:rustfmt_options . " " . shellescape(a:filename)
endfunction
function! s:RunRustfmt(command, curw, tmpname)
if exists("*systemlist") if exists("*systemlist")
let out = systemlist(a:command) let out = systemlist(command . g:rustfmt_options . " " . shellescape(l:tmpname))
else else
let out = split(system(a:command), '\r\?\n') let out = split(system(command . g:rustfmt_options . " " . shellescape(l:tmpname)), '\r\?\n')
endif endif
if v:shell_error == 0 || v:shell_error == 3 if v:shell_error == 0 || v:shell_error == 3
@@ -43,7 +40,7 @@ function! s:RunRustfmt(command, curw, tmpname)
try | silent undojoin | catch | endtry try | silent undojoin | catch | endtry
" Replace current file with temp file, then reload buffer " Replace current file with temp file, then reload buffer
call rename(a:tmpname, expand('%')) call rename(l:tmpname, expand('%'))
silent edit! silent edit!
let &syntax = &syntax let &syntax = &syntax
@@ -81,30 +78,10 @@ function! s:RunRustfmt(command, curw, tmpname)
let s:got_fmt_error = 1 let s:got_fmt_error = 1
lwindow lwindow
" We didn't use the temp file, so clean up " We didn't use the temp file, so clean up
call delete(a:tmpname) call delete(l:tmpname)
endif endif
call winrestview(a:curw) call winrestview(l:curw)
endfunction
function! rustfmt#FormatRange(line1, line2)
let l:curw = winsaveview()
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
call writefile(getline(1, '$'), l:tmpname)
let command = s:RustfmtCommandRange(l:tmpname, a:line1, a:line2)
call s:RunRustfmt(command, l:curw, l:tmpname)
endfunction
function! rustfmt#Format()
let l:curw = winsaveview()
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
call writefile(getline(1, '$'), l:tmpname)
let command = s:RustfmtCommand(l:tmpname)
call s:RunRustfmt(command, l:curw, l:tmpname)
endfunction endfunction
endif endif

View File

@@ -1,41 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'scss') == -1
" usage:
" set indentexpr=scss_indent#GetIndent(v:lnum)
fun! scss_indent#GetIndent(lnum)
" { -> increase indent
" } -> decrease indent
if a:lnum == 1
" start at 0 indentation
return 0
endif
" try to find last line ending with { or }
" ignoring // comments
let regex = '\([{}]\)\%(\/\/.*\)\?$'
let nr = search(regex, 'bnW')
if nr > 0
let last = indent(nr)
let m = matchlist(getline(nr), regex)
let m_curr = matchlist(getline(a:lnum), regex)
echoe string(m).string(m_curr)
if !empty(m_curr) && m_curr[1] == '}' && m[1] == '{'
" last was open, current is close, use same indent
return last
elseif !empty(m_curr) && m_curr[1] == '}' && m[1] == '}'
" } line and last line was }: decrease
return last - &sw
endif
if m[1] == '{'
" line after {: increase indent
return last + &sw
else
" line after } or { - same indent
return last
endif
else
return 0
endif
endfun
endif

View File

@@ -3,220 +3,31 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
" Vim completion for WAI-ARIA data file " Vim completion for WAI-ARIA data file
" Language: HTML + WAI-ARIA " Language: HTML + WAI-ARIA
" Maintainer: othree <othree@gmail.com> " Maintainer: othree <othree@gmail.com>
" Last Change: 2017 Mar 07 " Last Change: 2010 Sep 09
" WAI_ARIA: {{{ " WAI_ARIA: {{{
" Ref: https://www.w3.org/TR/wai-aria-1.1/ " Ref: http://www.w3.org/TR/wai-aria/
" Version: W3C Candidate Recommendation 27 October 2016 " Version: Draft 15 December 2009
let abstract_role = {} let abstract_role = {}
let role_attributes = {} let role_attributes = {}
let default_role = {} let default_role = {}
" Ref: https://www.w3.org/TR/wai-aria-1.1/#roles_categorization " Ref: http://www.w3.org/TR/wai-aria/roles
" Version: W3C Candidate Recommendation 27 October 2016 " Version: Draft 15 December 2009
let widget_role = [ let widget_role = ['alert', 'alertdialog', 'button', 'checkbox', 'combobox', 'dialog', 'gridcell', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'radiogroup', 'scrollbar', 'slider', 'spinbutton', 'status', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'treeitem', 'combobox', 'grid', 'listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid']
\ 'alert', let document_structure = ['article', 'columnheader', 'definition', 'directory', 'document', 'group', 'heading', 'img', 'list', 'listitem', 'math', 'note', 'presentation', 'region', 'row', 'rowheader', 'separator']
\ 'alertdialog', let landmark_role = ['application', 'banner', 'complementary', 'contentinfo', 'form', 'main', 'navigation', 'search']
\ 'button',
\ 'checkbox',
\ 'combobox',
\ 'dialog',
\ 'gridcell',
\ 'link',
\ 'log',
\ 'marquee',
\ 'menuitem',
\ 'menuitemcheckbox',
\ 'menuitemradio',
\ 'option',
\ 'progressbar',
\ 'radio',
\ 'radiogroup',
\ 'scrollbar',
\ 'searchbox',
\ 'slider',
\ 'spinbutton',
\ 'status',
\ 'switch',
\ 'tab',
\ 'tabpanel',
\ 'textbox',
\ 'timer',
\ 'tooltip',
\ 'treeitem',
\ 'combobox',
\ 'grid',
\ 'listbox',
\ 'menu',
\ 'menubar',
\ 'radiogroup',
\ 'tablist',
\ 'tree',
\ 'treegrid'
\ ]
let document_structure = [
\ 'article',
\ 'cell',
\ 'columnheader',
\ 'definition',
\ 'directory',
\ 'document',
\ 'feed',
\ 'figure',
\ 'group',
\ 'heading',
\ 'img',
\ 'list',
\ 'listitem',
\ 'math',
\ 'none',
\ 'note',
\ 'presentation',
\ 'region',
\ 'row',
\ 'rowheader',
\ 'separator',
\ 'table',
\ 'term'
\ ]
let landmark_role = [
\ 'application',
\ 'banner',
\ 'complementary',
\ 'contentinfo',
\ 'form',
\ 'main',
\ 'navigation',
\ 'search'
\ ]
" Ref: https://www.w3.org/TR/dpub-aria-1.0/
" Version: W3C Candidate Recommendation 15 December 2016
let dpub_role = [
\ 'dpub-abstract',
\ 'dpub-afterword',
\ 'dpub-appendix',
\ 'dpub-biblioentry',
\ 'dpub-bibliography',
\ 'dpub-biblioref',
\ 'dpub-chapter',
\ 'dpub-cover',
\ 'dpub-epilogue',
\ 'dpub-footnote',
\ 'dpub-footnotes',
\ 'dpub-foreword',
\ 'dpub-glossary',
\ 'dpub-glossdef',
\ 'dpub-glossref',
\ 'dpub-glossterm',
\ 'dpub-index',
\ 'dpub-locator',
\ 'dpub-noteref',
\ 'dpub-notice',
\ 'dpub-pagebreak',
\ 'dpub-pagelist',
\ 'dpub-part',
\ 'dpub-preface',
\ 'dpub-prologue',
\ 'dpub-pullquote',
\ 'dpub-qna',
\ 'dpub-subtitle',
\ 'dpub-tip',
\ 'dpub-title',
\ 'dpub-toc'
\ ]
let role = extend(widget_role, document_structure) let role = extend(widget_role, document_structure)
let role = extend(role, landmark_role) let role = extend(role, landmark_role)
let role = extend(role, dpub_role)
" https://www.w3.org/TR/wai-aria-1.1/#states_and_properties " http://www.w3.org/TR/wai-aria/states_and_properties#state_prop_taxonomy
let global_states_and_properties = { "let global_states_and_properties = {'aria-atomic': ['true', 'false'], 'aria-busy': ['true', 'false'], 'aria-controls': [], 'aria-describedby': [], 'aria-disabled': ['true', 'false'], 'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'], 'aria-flowto': [], 'aria-grabbed': ['true', 'false', 'undefined'], 'aria-haspopup': ['true', 'false'], 'aria-hidden': ['true', 'false'], 'aria-invalid': ['grammar', 'spelling', 'true', 'false'], 'aria-label': [], 'aria-labelledby': [], 'aria-live': ['off', 'polite', 'assertive'], 'aria-owns': [], 'aria-relevant': ['additions', 'removals', 'text', 'all']}
\ 'aria-atomic': ['true', 'false'], let widget_attributes = {'aria-autocomplete': ['inline', 'list', 'both', 'none'], 'aria-checked': ['true', 'false', 'mixed', 'undefined'], 'aria-disabled': ['true', 'false'], 'aria-expanded': ['true', 'false', 'undefined'], 'aria-haspopup': ['true', 'false'], 'aria-hidden': ['true', 'false'], 'aria-invalid': ['grammar', 'spelling', 'true', 'false'], 'aria-label': [], 'aria-level': [], 'aria-multiline': ['true', 'false'], 'aria-multiselectable': ['true', 'false'], 'aria-orientation': ['horizontal', 'vertical'], 'aria-pressed': ['true', 'false', 'mixed', 'undefined'], 'aria-readonly': ['true', 'false'], 'aria-required': ['true', 'false'], 'aria-selected': ['true', 'false', 'undefined'], 'aria-sort': ['ascending', 'descending', 'none', 'other'], 'aria-valuemax': [], 'aria-valuemin': [], 'aria-valuenow': [], 'aria-valuetext': []}
\ 'aria-busy': ['true', 'false'], let live_region_attributes = {'aria-atomic': ['true', 'false'], 'aria-busy': ['true', 'false'], 'aria-live': ['off', 'polite', 'assertive'], 'aria-relevant': ['additions', 'removals', 'text', 'all', 'additions text']}
\ 'aria-controls': [], let drag_and_drop_attributes = {'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'], 'aria-grabbed': ['true', 'false', 'undefined']}
\ 'aria-current': [], let relationship_attributes = {'aria-activedescendant': [], 'aria-controls': [], 'aria-describedby': [], 'aria-flowto': [], 'aria-labelledby': [], 'aria-owns': [], 'aria-posinset': [], 'aria-setsize': []}
\ 'aria-describedby': [], let aria_attributes = widget_attributes
\ 'aria-disabled': ['true', 'false'],
\ 'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'],
\ 'aria-errormessage': [],
\ 'aria-flowto': [],
\ 'aria-grabbed': ['true', 'false', 'undefined'],
\ 'aria-haspopup': ['true', 'false'],
\ 'aria-hidden': ['true', 'false'],
\ 'aria-invalid': ['grammar', 'spelling', 'true', 'false'],
\ 'aria-keyshortcuts': [],
\ 'aria-label': [],
\ 'aria-labelledby': [],
\ 'aria-live': ['off', 'polite', 'assertive'],
\ 'aria-owns': [],
\ 'aria-relevant': ['additions', 'removals', 'text', 'all'],
\ 'aria-roledescription': [],
\ }
let widget_attributes = {
\ 'aria-autocomplete': ['inline', 'list', 'both', 'none'],
\ 'aria-checked': ['true', 'false', 'mixed', 'undefined'],
\ 'aria-disabled': ['true', 'false'],
\ 'aria-errormessage': [],
\ 'aria-expanded': ['true', 'false', 'undefined'],
\ 'aria-haspopup': ['true', 'false'],
\ 'aria-hidden': ['true', 'false'],
\ 'aria-invalid': ['grammar', 'spelling', 'true', 'false'],
\ 'aria-label': [],
\ 'aria-level': [],
\ 'aria-modal': ['true', 'false'],
\ 'aria-multiline': ['true', 'false'],
\ 'aria-multiselectable': ['true', 'false'],
\ 'aria-orientation': ['horizontal', 'vertical'],
\ 'aria-placeholder': [],
\ 'aria-pressed': ['true', 'false', 'mixed', 'undefined'],
\ 'aria-readonly': ['true', 'false'],
\ 'aria-required': ['true', 'false'],
\ 'aria-selected': ['true', 'false', 'undefined'],
\ 'aria-sort': ['ascending', 'descending', 'none', 'other'],
\ 'aria-valuemax': [],
\ 'aria-valuemin': [],
\ 'aria-valuenow': [],
\ 'aria-valuetext': []
\ }
let live_region_attributes = {
\ 'aria-atomic': ['true', 'false'],
\ 'aria-busy': ['true', 'false'],
\ 'aria-live': ['off', 'polite', 'assertive'],
\ 'aria-relevant': ['additions', 'removals', 'text', 'all', 'additions text']
\ }
let drag_and_drop_attributes = {
\ 'aria-dropeffect': ['copy', 'move', 'link', 'execute', 'popup', 'none'],
\ 'aria-grabbed': ['true', 'false', 'undefined']
\ }
let relationship_attributes = {
\ 'aria-activedescendant': [],
\ 'aria-colcount': [],
\ 'aria-colindex': [],
\ 'aria-colspan': [],
\ 'aria-controls': [],
\ 'aria-describedby': [],
\ 'aria-details': [],
\ 'aria-errormessage': [],
\ 'aria-flowto': [],
\ 'aria-labelledby': [],
\ 'aria-owns': [],
\ 'aria-posinset': [],
\ 'aria-rowcount': [],
\ 'aria-rowindex': [],
\ 'aria-rowspan': [],
\ 'aria-setsize': []
\ }
let aria_attributes = global_states_and_properties
let aria_attributes = extend(aria_attributes, widget_attributes)
let aria_attributes = extend(aria_attributes, live_region_attributes) let aria_attributes = extend(aria_attributes, live_region_attributes)
let aria_attributes = extend(aria_attributes, drag_and_drop_attributes) let aria_attributes = extend(aria_attributes, drag_and_drop_attributes)
let aria_attributes = extend(aria_attributes, relationship_attributes) let aria_attributes = extend(aria_attributes, relationship_attributes)
@@ -271,8 +82,6 @@ let role_attributes['status'] = abstract_role['composite'] + role_attributes['re
let role_attributes['tab'] = abstract_role['sectionhead'] + abstract_role['widget'] + ['aria-selected'] let role_attributes['tab'] = abstract_role['sectionhead'] + abstract_role['widget'] + ['aria-selected']
let role_attributes['tabpanel'] = role_attributes['region'] let role_attributes['tabpanel'] = role_attributes['region']
let role_attributes['textbox'] = abstract_role['input'] + ['aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required'] let role_attributes['textbox'] = abstract_role['input'] + ['aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required']
let role_attributes['searchbox'] = role_attributes['textbox']
let role_attributes['switch'] = role_attributes['checkbox']
let role_attributes['timer'] = role_attributes['status'] let role_attributes['timer'] = role_attributes['status']
let role_attributes['tooltip'] = abstract_role['section'] let role_attributes['tooltip'] = abstract_role['section']
let role_attributes['treeitem'] = role_attributes['listitem'] + role_attributes['option'] let role_attributes['treeitem'] = role_attributes['listitem'] + role_attributes['option']
@@ -290,22 +99,16 @@ let role_attributes['treegrid'] = role_attributes['grid'] + role_attributes['tre
let role_attributes['document'] = abstract_role['structure'] + ['aria-expanded'] let role_attributes['document'] = abstract_role['structure'] + ['aria-expanded']
let role_attributes['article'] = role_attributes['document'] + role_attributes['region'] let role_attributes['article'] = role_attributes['document'] + role_attributes['region']
let role_attributes['cell'] = abstract_role['section'] + ['aria-colindex', 'aria-colspan', 'aria-rowindex', 'aria-rowspan']
let role_attributes['columnheader'] = role_attributes['gridcell'] + abstract_role['sectionhead'] + ['aria-sort'] let role_attributes['columnheader'] = role_attributes['gridcell'] + abstract_role['sectionhead'] + ['aria-sort']
let role_attributes['definition'] = abstract_role['section'] let role_attributes['definition'] = abstract_role['section']
let role_attributes['feed'] = role_attributes['list']
let role_attributes['figure'] = abstract_role['section']
let role_attributes['heading'] = abstract_role['sectionhead'] + ['aria-level'] let role_attributes['heading'] = abstract_role['sectionhead'] + ['aria-level']
let role_attributes['img'] = abstract_role['section'] let role_attributes['img'] = abstract_role['section']
let role_attributes['math'] = abstract_role['section'] let role_attributes['math'] = abstract_role['section']
let role_attributes['note'] = abstract_role['section'] let role_attributes['note'] = abstract_role['section']
let role_attributes['presentation'] = abstract_role['structure'] let role_attributes['presentation'] = abstract_role['structure']
let role_attributes['none'] = role_attributes['presentation']
let role_attributes['row'] = role_attributes['group'] + ['aria-level', 'aria-selected'] let role_attributes['row'] = role_attributes['group'] + ['aria-level', 'aria-selected']
let role_attributes['rowheader'] = role_attributes['gridcell'] + abstract_role['sectionhead'] let role_attributes['rowheader'] = role_attributes['gridcell'] + abstract_role['sectionhead']
let role_attributes['separator'] = abstract_role['structure'] + ['aria-expanded'] let role_attributes['separator'] = abstract_role['structure'] + ['aria-expanded']
let role_attributes['table'] = abstract_role['section'] + ['aria-colcount', 'aria-rowcount']
let role_attributes['term'] = abstract_role['section']
" Landmark Roles " Landmark Roles
let role_attributes['application'] = abstract_role['landmark'] let role_attributes['application'] = abstract_role['landmark']
@@ -321,30 +124,19 @@ let role_attributes['search'] = abstract_role['landmark']
let aria_attributes_value = { let aria_attributes_value = {
\ 'aria-autocomplete': ['ID', ''], \ 'aria-autocomplete': ['ID', ''],
\ 'aria-checked': ['Token', ''], \ 'aria-checked': ['Token', ''],
\ 'aria-colcount': ['Number', ''],
\ 'aria-colindex': ['Number', ''],
\ 'aria-colspan': ['Number', ''],
\ 'aria-disabled': ['true/false', ''], \ 'aria-disabled': ['true/false', ''],
\ 'aria-errormessage': ['ID', ''],
\ 'aria-expanded': ['Token', ''], \ 'aria-expanded': ['Token', ''],
\ 'aria-haspopup': ['Token', ''], \ 'aria-haspopup': ['true/false', ''],
\ 'aria-hidden': ['true/false', ''], \ 'aria-hidden': ['true/false', ''],
\ 'aria-invalid': ['Token', ''], \ 'aria-invalid': ['Token', ''],
\ 'aria-keyshortcuts': ['String', ''],
\ 'aria-label': ['String', ''], \ 'aria-label': ['String', ''],
\ 'aria-level': ['Int', ''], \ 'aria-level': ['Int', ''],
\ 'aria-modal': ['true/false', ''],
\ 'aria-multiline': ['true/false', ''], \ 'aria-multiline': ['true/false', ''],
\ 'aria-multiselectable': ['true/false', ''], \ 'aria-multiselectable': ['true/false', ''],
\ 'aria-orientation': ['Token', ''], \ 'aria-orientation': ['Token', ''],
\ 'aria-placeholder': ['String', ''],
\ 'aria-pressed': ['Token', ''], \ 'aria-pressed': ['Token', ''],
\ 'aria-readonly': ['true/false', ''], \ 'aria-readonly': ['true/false', ''],
\ 'aria-required': ['true/false', ''], \ 'aria-required': ['true/false', ''],
\ 'aria-roledescription': ['String', ''],
\ 'aria-rowcount': ['Number', ''],
\ 'aria-rowindex': ['Number', ''],
\ 'aria-rowspan': ['Number', ''],
\ 'aria-selected': ['Token', ''], \ 'aria-selected': ['Token', ''],
\ 'aria-sort': ['Token', ''], \ 'aria-sort': ['Token', ''],
\ 'aria-valuemax': ['Number', ''], \ 'aria-valuemax': ['Number', ''],

View File

@@ -62,8 +62,6 @@ let charset = [
\ 'windows-1256', 'windows-1257', 'windows-1258', 'TIS-620', ] \ 'windows-1256', 'windows-1257', 'windows-1258', 'TIS-620', ]
" }}} " }}}
let autofill_tokens = ['on', 'off', 'name', 'honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix', 'nickname', 'username', 'new-password', 'current-password', 'organization-title', 'organization', 'street-address', 'address-line1', 'address-line2', 'address-line3', 'address-level4', 'address-level3', 'address-level2', 'address-level1', 'country', 'country-name', 'postal-code', 'cc-name', 'cc-given-name', 'cc-additional-name', 'cc-family-name', 'cc-number', 'cc-exp', 'cc-exp-month', 'cc-exp-year', 'cc-csc', 'cc-type', 'transaction-currency', 'transaction-amount', 'language', 'bday', 'bday-day', 'bday-month', 'bday-year', 'sex', 'url', 'photo']
" Attributes_and_Settings: {{{ " Attributes_and_Settings: {{{
let core_attributes = {'accesskey': [], 'class': [], 'contenteditable': ['true', 'false', ''], 'contextmenu': [], 'dir': ['ltr', 'rtl'], 'draggable': ['true', 'false'], 'hidden': ['hidden', ''], 'id': [], 'is': [], 'lang': lang_tag, 'spellcheck': ['true', 'false', ''], 'style': [], 'tabindex': [], 'title': []} let core_attributes = {'accesskey': [], 'class': [], 'contenteditable': ['true', 'false', ''], 'contextmenu': [], 'dir': ['ltr', 'rtl'], 'draggable': ['true', 'false'], 'hidden': ['hidden', ''], 'id': [], 'is': [], 'lang': lang_tag, 'spellcheck': ['true', 'false', ''], 'style': [], 'tabindex': [], 'title': []}
let xml_attributes = {'xml:lang': lang_tag, 'xml:space': ['preserve'], 'xml:base': [], 'xmlns': ['http://www.w3.org/1999/xhtml', 'http://www.w3.org/1998/Math/MathML', 'http://www.w3.org/2000/svg', 'http://www.w3.org/1999/xlink']} let xml_attributes = {'xml:lang': lang_tag, 'xml:space': ['preserve'], 'xml:base': [], 'xmlns': ['http://www.w3.org/1999/xhtml', 'http://www.w3.org/1998/Math/MathML', 'http://www.w3.org/2000/svg', 'http://www.w3.org/1999/xlink']}
@@ -80,12 +78,9 @@ let attributes_value = {
\ 'accept-charset': ['Charset', ''], \ 'accept-charset': ['Charset', ''],
\ 'accesskey': ['Character', ''], \ 'accesskey': ['Character', ''],
\ 'action': ['URL', ''], \ 'action': ['URL', ''],
\ 'allowfullscreen': ['Bool', ''],
\ 'allowpaymentrequest': ['Bool', ''],
\ 'allowusermedia': ['Bool', ''],
\ 'alt': ['Text', ''], \ 'alt': ['Text', ''],
\ 'async': ['Bool', ''], \ 'async': ['Bool', ''],
\ 'autocomplete': ['*Token', ''], \ 'autocomplete': ['on/off', ''],
\ 'autofocus': ['Bool', ''], \ 'autofocus': ['Bool', ''],
\ 'autoplay': ['Bool', ''], \ 'autoplay': ['Bool', ''],
\ 'border': ['1', ''], \ 'border': ['1', ''],
@@ -145,7 +140,6 @@ let attributes_value = {
\ 'optimum': ['Number', ''], \ 'optimum': ['Number', ''],
\ 'pattern': ['Pattern', ''], \ 'pattern': ['Pattern', ''],
\ 'placeholder': ['Text', ''], \ 'placeholder': ['Text', ''],
\ 'playsinline': ['Bool', ''],
\ 'poster': ['URL', ''], \ 'poster': ['URL', ''],
\ 'preload': ['Token', ''], \ 'preload': ['Token', ''],
\ 'pubdate': ['Bool', ''], \ 'pubdate': ['Bool', ''],
@@ -319,15 +313,13 @@ if !exists('g:html5_aria_attributes_complete')
let g:html5_aria_attributes_complete = 1 let g:html5_aria_attributes_complete = 1
endif endif
if g:html5_aria_attributes_complete == 1 if g:html5_aria_attributes_complete == 1
" Ref: https://www.w3.org/TR/wai-aria-1.1/#role_definitions " Ref: http://www.w3.org/TR/wai-aria/roles
" Version: W3C Candidate Recommendation 27 October 2016 " Version: Draft 15 December 2009
let widget_role = ['alert', 'alertdialog', 'button', 'checkbox', 'combobox', 'dialog', 'gridcell', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'radiogroup', 'scrollbar', 'searchbox', 'slider', 'spinbutton', 'status', 'switch', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'treeitem', 'combobox', 'grid', 'listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'] let widget_role = ['alert', 'alertdialog', 'button', 'checkbox', 'combobox', 'dialog', 'gridcell', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'radiogroup', 'scrollbar', 'slider', 'spinbutton', 'status', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'treeitem', 'combobox', 'grid', 'listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid']
let document_structure = ['article', 'cell', 'columnheader', 'definition', 'directory', 'document', 'feed', 'figure', 'group', 'heading', 'img', 'list', 'listitem', 'math', 'none', 'note', 'presentation', 'region', 'row', 'rowheader', 'separator', 'table', 'term'] let document_structure = ['article', 'columnheader', 'definition', 'directory', 'document', 'group', 'heading', 'img', 'list', 'listitem', 'math', 'note', 'presentation', 'region', 'row', 'rowheader', 'separator']
let landmark_role = ['application', 'banner', 'complementary', 'contentinfo', 'form', 'main', 'navigation', 'search'] let landmark_role = ['application', 'banner', 'complementary', 'contentinfo', 'form', 'main', 'navigation', 'search']
let dpub_role = ['dpub-abstract', 'dpub-afterword', 'dpub-appendix', 'dpub-biblioentry', 'dpub-bibliography', 'dpub-biblioref', 'dpub-chapter', 'dpub-cover', 'dpub-epilogue', 'dpub-footnote', 'dpub-footnotes', 'dpub-foreword', 'dpub-glossary', 'dpub-glossdef', 'dpub-glossref', 'dpub-glossterm', 'dpub-index', 'dpub-locator', 'dpub-noteref', 'dpub-notice', 'dpub-pagebreak', 'dpub-pagelist', 'dpub-part', 'dpub-preface', 'dpub-prologue', 'dpub-pullquote', 'dpub-qna', 'dpub-subtitle', 'dpub-tip', 'dpub-title', 'dpub-toc']
let role = extend(widget_role, document_structure) let role = extend(widget_role, document_structure)
let role = extend(role, landmark_role) let role = extend(role, landmark_role)
let role = extend(role, dpub_role)
let global_attributes = extend(global_attributes, {'role': role}) let global_attributes = extend(global_attributes, {'role': role})
endif endif
" }}} " }}}
@@ -340,38 +332,14 @@ let metadata_elements = ['link', 'style', 'meta', 'script', 'noscript', 'command
let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'element', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details'] let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'element', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details']
" https://html.spec.whatwg.org/#linkTypes " http://dev.w3.org/html5/spec/Overview.html#linkTypes
let linktypes = ['alternate', 'author', 'bookmark', 'dns-prefetch', 'external', 'help', 'icon', 'license', 'next', 'nofollow', 'noreferrer', 'noopener', 'pingback', 'preconnect', 'prefetch', 'preload', 'prerender', 'prev', 'search', 'stylesheet', 'tag'] let linktypes = ['alternate', 'author', 'bookmark', 'external', 'help', 'icon', 'license', 'next', 'nofollow', 'noreferrer', 'pingback', 'prefetch', 'prev', 'search', 'stylesheet', 'sidebar', 'tag']
" https://w3c.github.io/manifest/
let linkreltypes = linktypes
let linkreltypes = linkreltypes + ['manifest']
" http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html " http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html
" http://www.ysearchblog.com/2009/02/12/fighting-duplication-adding-more-arrows-to-your-quiver/ let linkreltypes = linktypes + ['canonical', 'import']
" http://blogs.bing.com/webmaster/2009/02/12/partnering-to-help-solve-duplicate-content-issues
let linkreltypes = linkreltypes + ['canonical']
" http://w3c.github.io/webcomponents/spec/imports/
let linkreltypes = linkreltypes + ['import']
" https://www.w3.org/TR/webmention/#sender-discovers-receiver-webmention-endpoint
let linkreltypes = linkreltypes + ['webmention']
" http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_HTML.2FXHTML
let linkreltypes = linkreltypes + ['search']
" http://microformats.org/wiki/rel-sitemap
let linkreltypes = linkreltypes + ['sitemap']
" https://www.ampproject.org/docs/get_started/create/prepare_for_discovery
let linkreltypes = linkreltypes + ['amphtml']
" https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html
let linkreltypes = linkreltypes + ['apple-touch-icon', 'apple-touch-icon-precomposed', 'apple-touch-startup-image']
" https://developer.chrome.com/webstore/inline_installation
let linkreltypes = linkreltypes + ['chrome-webstore-item']
" http://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html#rfc.section.4
let linkreltypes = linkreltypes + ['hub']
" https://golem.ph.utexas.edu/~distler/blog/archives/000320.html
let linkreltypes = linkreltypes + ['pgpkey']
" a and button are special elements for interactive, some element can't be its descendent " a and button are special elements for interactive, some element can't be its descendent
let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|textarea' let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|textarea'
let crossorigin = ['anonymous', 'use-credentials']
let g:xmldata_html5 = { let g:xmldata_html5 = {
@@ -379,7 +347,7 @@ let g:xmldata_html5 = {
\ 'vimxmlroot': ['html', 'head', 'body'] + flow_elements, \ 'vimxmlroot': ['html', 'head', 'body'] + flow_elements,
\ 'a': [ \ 'a': [
\ filter(copy(flow_elements), "!(v:val =~ '". abutton_dec ."')"), \ filter(copy(flow_elements), "!(v:val =~ '". abutton_dec ."')"),
\ extend(copy(global_attributes), {'name': [], 'href': [], 'target': [], 'rel': linktypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url']}) \ extend(copy(global_attributes), {'name': [], 'href': [], 'target': [], 'rel': linktypes, 'hreflang': lang_tag, 'media': [], 'type': []})
\ ], \ ],
\ 'abbr': [ \ 'abbr': [
\ phrasing_elements, \ phrasing_elements,
@@ -391,7 +359,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'area': [ \ 'area': [
\ [], \ [],
\ extend(copy(global_attributes), {'alt': [], 'href': [], 'target': [], 'rel': linktypes, 'media': [], 'hreflang': lang_tag, 'type': [], 'shape': ['rect', 'circle', 'poly', 'default'], 'coords': [], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url']}) \ extend(copy(global_attributes), {'alt': [], 'href': [], 'target': [], 'rel': linktypes, 'media': [], 'hreflang': lang_tag, 'type': [], 'shape': ['rect', 'circle', 'poly', 'default'], 'coords': []})
\ ], \ ],
\ 'article': [ \ 'article': [
\ flow_elements + ['style'], \ flow_elements + ['style'],
@@ -527,7 +495,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'form': [ \ 'form': [
\ flow_elements, \ flow_elements,
\ extend(copy(global_attributes), {'name': [], 'action': [], 'enctype': ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain'], 'method': ['get', 'post', 'put', 'delete'], 'target': [], 'novalidate': ['novalidate', ''], 'accept-charset': charset, 'autocomplete': autofill_tokens}) \ extend(copy(global_attributes), {'name': [], 'action': [], 'enctype': ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain'], 'method': ['get', 'post', 'put', 'delete'], 'target': [], 'novalidate': ['novalidate', ''], 'accept-charset': charset, 'autocomplete': ['on', 'off']})
\ ], \ ],
\ 'h1': [ \ 'h1': [
\ phrasing_elements, \ phrasing_elements,
@@ -579,15 +547,15 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'iframe': [ \ 'iframe': [
\ [], \ [],
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowusermedia': []}) \ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', '']})
\ ], \ ],
\ 'img': [ \ 'img': [
\ [], \ [],
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'crossorigin': ['anonymous', 'use-credentials']}) \ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'usemap': [], 'ismap': ['ismap', '']})
\ ], \ ],
\ 'input': [ \ 'input': [
\ [], \ [],
\ extend(copy(global_attributes), {'type': ['text', 'password', 'checkbox', 'radio', 'button', 'submit', 'reset', 'file', 'hidden', 'image', 'datetime', 'datetime-local', 'date', 'month', 'time', 'week', 'number', 'range', 'email', 'url', 'search', 'tel', 'color'], 'name': [], 'disabled': ['disabled', ''], 'form': [], 'maxlength': [], 'readonly': ['readonly', ''], 'size': [], 'value': [], 'autocomplete': autofill_tokens, 'autofocus': ['autofocus', ''], 'list': [], 'pattern': [], 'required': ['required', ''], 'placeholder': [], 'checked': ['checked'], 'accept': [], 'multiple': ['multiple', ''], 'alt': [], 'src': [], 'height': [], 'width': [], 'min': [], 'max': [], 'step': [], 'formenctype': ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain'], 'formmethod': ['get', 'post', 'put', 'delete'], 'formtarget': [], 'formnovalidate': ['formnovalidate', '']}) \ extend(copy(global_attributes), {'type': ['text', 'password', 'checkbox', 'radio', 'button', 'submit', 'reset', 'file', 'hidden', 'image', 'datetime', 'datetime-local', 'date', 'month', 'time', 'week', 'number', 'range', 'email', 'url', 'search', 'tel', 'color'], 'name': [], 'disabled': ['disabled', ''], 'form': [], 'maxlength': [], 'readonly': ['readonly', ''], 'size': [], 'value': [], 'autocomplete': ['on', 'off'], 'autofocus': ['autofocus', ''], 'list': [], 'pattern': [], 'required': ['required', ''], 'placeholder': [], 'checked': ['checked'], 'accept': [], 'multiple': ['multiple', ''], 'alt': [], 'src': [], 'height': [], 'width': [], 'min': [], 'max': [], 'step': [], 'formenctype': ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain'], 'formmethod': ['get', 'post', 'put', 'delete'], 'formtarget': [], 'formnovalidate': ['formnovalidate', '']})
\ ], \ ],
\ 'ins': [ \ 'ins': [
\ flow_elements, \ flow_elements,
@@ -615,7 +583,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'link': [ \ 'link': [
\ [], \ [],
\ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any'], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'crossorigin': crossorigin, 'preload': ['preload', ''], 'prefetch': ['prefetch', '']}) \ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any']})
\ ], \ ],
\ 'main': [ \ 'main': [
\ flow_elements + ['style'], \ flow_elements + ['style'],
@@ -723,7 +691,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'script': [ \ 'script': [
\ [], \ [],
\ extend(copy(global_attributes), {'src': [], 'defer': ['defer', ''], 'async': ['async', ''], 'type': [], 'charset': charset, 'nonce': [], 'crossorigin': crossorigin}) \ extend(copy(global_attributes), {'src': [], 'defer': ['defer', ''], 'async': ['async', ''], 'type': [], 'charset': charset})
\ ], \ ],
\ 'section': [ \ 'section': [
\ flow_elements + ['style'], \ flow_elements + ['style'],
@@ -755,7 +723,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'style': [ \ 'style': [
\ [], \ [],
\ extend(copy(global_attributes), {'type': [], 'media': [], 'scoped': ['scoped', ''], 'nonce': []}) \ extend(copy(global_attributes), {'type': [], 'media': [], 'scoped': ['scoped', '']})
\ ], \ ],
\ 'sub': [ \ 'sub': [
\ phrasing_elements, \ phrasing_elements,
@@ -835,7 +803,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'video': [ \ 'video': [
\ flow_elements + ['source', 'track'], \ flow_elements + ['source', 'track'],
\ extend(copy(global_attributes), {'autoplay': ['autoplay', ''], 'preload': ['none', 'metadata', 'auto', ''], 'controls': ['controls', ''], 'loop': ['loop', ''], 'playsinline': ['playsinline', ''], 'poster': [], 'height': [], 'width': [], 'src': [], 'crossorigin': crossorigin}) \ extend(copy(global_attributes), {'autoplay': ['autoplay', ''], 'preload': ['none', 'metadata', 'auto', ''], 'controls': ['controls', ''], 'loop': ['loop', ''], 'poster': [], 'height': [], 'width': [], 'src': []})
\ ], \ ],
\ 'wbr': [ \ 'wbr': [
\ [], \ [],

63
build
View File

@@ -2,12 +2,11 @@
set -E set -E
DIRS="syntax indent compiler autoload ftplugin after/syntax after/indent after/ftplugin" DIRS="syntax indent compiler autoload ftplugin ftdetect after/syntax after/indent after/ftplugin after/ftdetect"
DIRS_BASIC="syntax compiler indent after/syntax after/indent" DIRS_BASIC="syntax compiler indent ftdetect after/syntax after/indent after/ftdetect"
DIRS_ALL="syntax indent compiler autoload ftplugin after" DIRS_ALL="syntax indent compiler autoload ftplugin ftdetect after"
DIRS_SYNTAX="syntax after/syntax" DIRS_SYNTAX="syntax ftdetect after/syntax after/ftdetect"
DIRS_JAVASCRIPT="${DIRS} extras" DIRS_JAVASCRIPT="${DIRS} extras"
DIRS_RM="$DIRS_JAVASCRIPT"
OUTPUT="" OUTPUT=""
@@ -29,9 +28,6 @@ download() {
extract() { extract() {
printf "\n" printf "\n"
cat config.vim >> tmp/polyglot.vim
for pack in $1; do for pack in $1; do
name="$(printf "$pack" | cut -d ':' -f 1)" name="$(printf "$pack" | cut -d ':' -f 1)"
path="$(printf "$pack" | cut -d ':' -f 2)" path="$(printf "$pack" | cut -d ':' -f 2)"
@@ -52,21 +48,10 @@ extract() {
fi fi
done done
for f in ${dir}/ftdetect/*; do
(
echo "augroup filetypedetect";
echo '" '"$pack";
cat "${f}";
echo "augroup END";
echo
) >> tmp/polyglot.vim;
done
output "${subdirs##, })\n" output "${subdirs##, })\n"
done done
mv tmp/polyglot.vim ftdetect/
for pack in $1; do for pack in $1; do
name="$(printf "$pack" | cut -d ':' -f 1)" name="$(printf "$pack" | cut -d ':' -f 1)"
path="$(printf "$pack" | cut -d ':' -f 2)" path="$(printf "$pack" | cut -d ':' -f 2)"
@@ -90,6 +75,13 @@ copy_dir() {
done done
} }
concat_ftdetect() {
cat config.vim >> tmp/polyglot.vim
for f in ftdetect/*; do (echo '" '"$f"; cat "${f}"; echo) >> tmp/polyglot.vim; done
rm -f ftdetect/*
mv tmp/polyglot.vim ftdetect/
}
update_readme() { update_readme() {
OLD_README="$(cat README.md)" OLD_README="$(cat README.md)"
@@ -98,7 +90,7 @@ update_readme() {
+2kb +2kb
/## /##
'b,-2c 'b,-2c
$(printf -- "$OUTPUT" | sort) $(printf -- "$OUTPUT")
. .
w w
q q
@@ -107,16 +99,12 @@ EOF
} }
PACKS=" PACKS="
apiblueprint:sheerun/apiblueprint.vim
applescript:vim-scripts/applescript.vim applescript:vim-scripts/applescript.vim
asciidoc:asciidoc/vim-asciidoc
yaml:stephpy/vim-yaml
ansible:pearofducks/ansible-vim ansible:pearofducks/ansible-vim
arduino:sudar/vim-arduino-syntax arduino:sudar/vim-arduino-syntax
blade:jwalton512/vim-blade blade:jwalton512/vim-blade
c++11:octol/vim-cpp-enhanced-highlight c++11:octol/vim-cpp-enhanced-highlight
c/c++:vim-jp/vim-cpp c/c++:vim-jp/vim-cpp
caddyfile:joshglendenning/vim-caddyfile
cjsx:mtscout6/vim-cjsx cjsx:mtscout6/vim-cjsx
clojure:guns/vim-clojure-static clojure:guns/vim-clojure-static
coffee-script:kchmck/vim-coffee-script coffee-script:kchmck/vim-coffee-script
@@ -126,7 +114,7 @@ PACKS="
css:JulesWang/css.vim css:JulesWang/css.vim
cucumber:tpope/vim-cucumber cucumber:tpope/vim-cucumber
dart:dart-lang/dart-vim-plugin dart:dart-lang/dart-vim-plugin
dockerfile:docker/docker::/contrib/syntax/vim/ dockerfile:honza/dockerfile.vim
elixir:elixir-lang/vim-elixir elixir:elixir-lang/vim-elixir
elm:lambdatoast/elm.vim elm:lambdatoast/elm.vim
emberscript:yalesov/vim-ember-script emberscript:yalesov/vim-ember-script
@@ -135,16 +123,13 @@ PACKS="
fish:dag/vim-fish fish:dag/vim-fish
git:tpope/vim-git git:tpope/vim-git
glsl:tikhomirov/vim-glsl glsl:tikhomirov/vim-glsl
gnuplot:vim-scripts/gnuplot-syntax-highlighting
go:fatih/vim-go:_BASIC go:fatih/vim-go:_BASIC
graphql:jparise/vim-graphql
groovy:vim-scripts/groovy.vim groovy:vim-scripts/groovy.vim
haml:sheerun/vim-haml haml:tpope/vim-haml
handlebars:mustache/vim-mustache-handlebars handlebars:mustache/vim-mustache-handlebars
haskell:neovimhaskell/haskell-vim haskell:neovimhaskell/haskell-vim
haxe:yaymukund/vim-haxe haxe:yaymukund/vim-haxe
html5:othree/html5.vim html5:othree/html5.vim
i3:PotatoesMaster/i3-vim-syntax
jasmine:glanotte/vim-jasmine jasmine:glanotte/vim-jasmine
javascript:pangloss/vim-javascript:_JAVASCRIPT javascript:pangloss/vim-javascript:_JAVASCRIPT
json:elzr/vim-json json:elzr/vim-json
@@ -159,8 +144,7 @@ PACKS="
lua:tbastos/vim-lua lua:tbastos/vim-lua
mako:sophacles/vim-bundle-mako mako:sophacles/vim-bundle-mako
markdown:plasticboy/vim-markdown:_SYNTAX markdown:plasticboy/vim-markdown:_SYNTAX
mathematica:rsmenon/vim-mathematica nginx:othree/nginx-contrib-vim
nginx:chr4/nginx.vim
nim:zah/nim.vim:_BASIC nim:zah/nim.vim:_BASIC
nix:spwhitt/vim-nix nix:spwhitt/vim-nix
objc:b4winckler/vim-objc objc:b4winckler/vim-objc
@@ -171,54 +155,49 @@ PACKS="
pgsql:exu/pgsql.vim pgsql:exu/pgsql.vim
php:StanAngeloff/php.vim php:StanAngeloff/php.vim
plantuml:aklt/plantuml-syntax plantuml:aklt/plantuml-syntax
powershell:PProvost/vim-ps1 powershell:Persistent13/vim-ps1
protobuf:uarun/vim-protobuf protobuf:uarun/vim-protobuf
pug:digitaltoad/vim-pug pug:digitaltoad/vim-pug
puppet:voxpupuli/vim-puppet puppet:voxpupuli/vim-puppet
purescript:raichoo/purescript-vim purescript:raichoo/purescript-vim
python:mitsuhiko/vim-python-combined python:mitsuhiko/vim-python-combined
python-compiler:aliev/vim-compiler-python
qml:peterhoeg/vim-qml qml:peterhoeg/vim-qml
r-lang:vim-scripts/R.vim r-lang:vim-scripts/R.vim
racket:wlangstroth/vim-racket
raml:IN3D/vim-raml
ragel:jneen/ragel.vim ragel:jneen/ragel.vim
rspec:sheerun/rspec.vim rspec:sheerun/rspec.vim
ruby:vim-ruby/vim-ruby ruby:vim-ruby/vim-ruby
rust:rust-lang/rust.vim rust:rust-lang/rust.vim
sbt:derekwyatt/vim-sbt sbt:derekwyatt/vim-sbt
scala:derekwyatt/vim-scala scala:derekwyatt/vim-scala
scss:cakebaker/scss-syntax.vim
slim:slim-template/vim-slim slim:slim-template/vim-slim
solidity:ethereum/vim-solidity solidity:ethereum/vim-solidity
stylus:wavded/vim-stylus stylus:wavded/vim-stylus
swift:keith/swift.vim swift:keith/swift.vim
sxhkd:baskerville/vim-sxhkdrc
systemd:kurayama/systemd-vim-syntax systemd:kurayama/systemd-vim-syntax
terraform:hashivim/vim-terraform
textile:timcharper/textile.vim textile:timcharper/textile.vim
thrift:solarnz/thrift.vim thrift:solarnz/thrift.vim
tmux:keith/tmux.vim tmux:keith/tmux.vim
tomdoc:wellbredgrapefruit/tomdoc.vim tomdoc:wellbredgrapefruit/tomdoc.vim
toml:cespare/vim-toml toml:cespare/vim-toml
twig:lumiliet/vim-twig twig:evidens/vim-twig
typescript:leafgarland/typescript-vim typescript:leafgarland/typescript-vim
vala:arrufat/vala.vim vala:tkztmk/vim-vala
vbnet:vim-scripts/vbnet.vim vbnet:vim-scripts/vbnet.vim
vcl:smerrill/vcl-vim-plugin vcl:smerrill/vcl-vim-plugin
vue:posva/vim-vue
vm:lepture/vim-velocity vm:lepture/vim-velocity
xls:vim-scripts/XSLT-syntax xls:vim-scripts/XSLT-syntax
yaml:stephpy/vim-yaml
yard:sheerun/vim-yardoc yard:sheerun/vim-yardoc
" "
rm -rf tmp rm -rf tmp
rm -rf $DIRS_RM rm -rf $DIRS_ALL
mkdir tmp mkdir tmp
printf "Downloading packs..." printf "Downloading packs..."
download "$PACKS" download "$PACKS"
extract "$PACKS" extract "$PACKS"
concat_ftdetect
update_readme update_readme
rm -rf tmp rm -rf tmp

View File

@@ -21,12 +21,51 @@ else
CompilerSet makeprg=cargo\ $* CompilerSet makeprg=cargo\ $*
endif endif
" Ignore general cargo progress messages " Allow a configurable global Cargo.toml name. This makes it easy to
CompilerSet errorformat+= " support variations like 'cargo.toml'.
\%-G%\\s%#Downloading%.%#, let s:cargo_manifest_name = get(g:, 'cargo_manifest_name', 'Cargo.toml')
\%-G%\\s%#Compiling%.%#,
\%-G%\\s%#Finished%.%#, function! s:is_absolute(path)
\%-G%\\s%#error:\ Could\ not\ compile\ %.%#, return a:path[0] == '/' || a:path =~ '[A-Z]\+:'
\%-G%\\s%#To\ learn\ more\\,%.%# endfunction
CompilerSet errorformat+=%-G%\\s%#Compiling%.%#
let s:local_manifest = findfile(s:cargo_manifest_name, '.;')
if s:local_manifest != ''
let s:local_manifest = fnamemodify(s:local_manifest, ':p:h').'/'
augroup cargo
au!
au QuickfixCmdPost make call s:FixPaths()
augroup END
" FixPaths() is run after Cargo, and is used to change the file paths
" to be relative to the current directory instead of Cargo.toml.
function! s:FixPaths()
let qflist = getqflist()
let manifest = s:local_manifest
for qf in qflist
if !qf.valid
let m = matchlist(qf.text, '(file://\(.*\))$')
if !empty(m)
let manifest = m[1].'/'
" Manually strip another slash if needed; usually just an
" issue on Windows.
if manifest =~ '^/[A-Z]\+:/'
let manifest = manifest[1:]
endif
endif
continue
endif
let filename = bufname(qf.bufnr)
if s:is_absolute(filename)
continue
endif
let qf.filename = simplify(manifest.filename)
call remove(qf, 'bufnr')
endfor
call setqflist(qflist, 'r')
endfunction
endif
endif endif

View File

@@ -1,20 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
" Vim compiler plugin
" Language: JavaScript
" Maintainer: vim-javascript community
" URL: https://github.com/pangloss/vim-javascript
if exists("current_compiler")
finish
endif
let current_compiler = "eslint"
if exists(":CompilerSet") != 2
command! -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=eslint\ -f\ compact\ %
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m
endif

View File

@@ -1,71 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'python-compiler') == -1
" Vim compiler file
" Compiler: Unit testing tool for Python
" Maintainer: Ali Aliev <ali@aliev.me>
" Last Change: 2015 Nov 2
if exists("current_compiler")
finish
endif
let current_compiler = "python"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
" Disable Python warnings
if !exists('$PYTHONWARNINGS')
let $PYTHONWARNINGS="ignore"
endif
" For Flake8 first
CompilerSet efm =%E%f:%l:\ could\ not\ compile,
CompilerSet efm +=%-Z%p^,
CompilerSet efm +=%A%f:%l:%c:\ %t%n\ %m,
CompilerSet efm +=%A%f:%l:\ %t%n\ %m,
" Python errors are multi-lined. They often start with 'Traceback', so
" we want to capture that (with +G) and show it in the quickfix window
" because it explains the order of error messages.
CompilerSet efm +=%+GTraceback%.%#,
" The error message itself starts with a line with 'File' in it. There
" are a couple of variations, and we need to process a line beginning
" with whitespace followed by File, the filename in "", a line number,
" and optional further text. %E here indicates the start of a multi-line
" error message. The %\C at the end means that a case-sensitive search is
" required.
CompilerSet efm +=%E\ \ File\ \"%f\"\\,\ line\ %l\\,%m%\\C,
CompilerSet efm +=%E\ \ File\ \"%f\"\\,\ line\ %l%\\C,
" The possible continutation lines are idenitifed to Vim by %C. We deal
" with these in order of most to least specific to ensure a proper
" match. A pointer (^) identifies the column in which the error occurs
" (but will not be entirely accurate due to indention of Python code).
CompilerSet efm +=%C%p^,
" Any text, indented by more than two spaces contain useful information.
" We want this to appear in the quickfix window, hence %+.
CompilerSet efm +=%+C\ \ \ \ %.%#,
CompilerSet efm +=%+C\ \ %.%#,
" The last line (%Z) does not begin with any whitespace. We use a zero
" width lookahead (\&) to check this. The line contains the error
" message itself (%m)
CompilerSet efm +=%Z%\\S%\\&%m,
" We can ignore any other lines (%-G)
CompilerSet efm +=%-G%.%#
if filereadable("Makefile")
CompilerSet makeprg=make
else
CompilerSet makeprg=python
endif
" vim:foldmethod=marker:foldlevel=0
endif

View File

@@ -24,10 +24,10 @@ CompilerSet errorformat=
\%D(in\ %f), \%D(in\ %f),
\%\\s%#from\ %f:%l:%m, \%\\s%#from\ %f:%l:%m,
\%\\s%#from\ %f:%l:, \%\\s%#from\ %f:%l:,
\%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%.%#, \%\\s%##\ %f:%l:%m,
\%\\s%##\ %f:%l%\\&%.%#%\\D:%.%#, \%\\s%##\ %f:%l,
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%.%#, \%\\s%#[%f:%l:\ %#%m,
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%.%#, \%\\s%#%f:%l:\ %#%m,
\%\\s%#%f:%l:, \%\\s%#%f:%l:,
\%m\ [%f:%l]:, \%m\ [%f:%l]:,
\%+Erake\ aborted!, \%+Erake\ aborted!,

View File

@@ -23,7 +23,6 @@ else
CompilerSet makeprg=rustc\ \% CompilerSet makeprg=rustc\ \%
endif endif
" Old errorformat (before nightly 2016/08/10)
CompilerSet errorformat= CompilerSet errorformat=
\%f:%l:%c:\ %t%*[^:]:\ %m, \%f:%l:%c:\ %t%*[^:]:\ %m,
\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m, \%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m,
@@ -32,17 +31,6 @@ CompilerSet errorformat=
\%-G%*[\ ]^%*[~], \%-G%*[\ ]^%*[~],
\%-G%*[\ ]... \%-G%*[\ ]...
" New errorformat (after nightly 2016/08/10)
CompilerSet errorformat+=
\%-G,
\%-Gerror:\ aborting\ %.%#,
\%-Gerror:\ Could\ not\ compile\ %.%#,
\%Eerror:\ %m,
\%Eerror[E%n]:\ %m,
\%Wwarning:\ %m,
\%Inote:\ %m,
\%C\ %#-->\ %f:%l:%c
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save

34
compiler/sass.vim Normal file
View File

@@ -0,0 +1,34 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haml') == -1
" Vim compiler file
" Compiler: Sass
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2013 May 30
if exists("current_compiler")
finish
endif
let current_compiler = "sass"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo-=C
CompilerSet makeprg=sass
CompilerSet errorformat=
\%f:%l:%m\ (Sass::Syntax%trror),
\%ESyntax\ %trror:%m,
\%C%\\s%\\+on\ line\ %l\ of\ %f,
\%Z%.%#,
\%-G%.%#
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:set sw=2 sts=2:
endif

View File

@@ -13,10 +13,6 @@ if !exists("g:typescript_compiler_options")
let g:typescript_compiler_options = "" let g:typescript_compiler_options = ""
endif endif
if exists(":CompilerSet") != 2
command! -nargs=* CompilerSet setlocal <args>
endif
let &l:makeprg = g:typescript_compiler_binary . ' ' . g:typescript_compiler_options . ' $* %' let &l:makeprg = g:typescript_compiler_binary . ' ' . g:typescript_compiler_options . ' $* %'
CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m

View File

@@ -7,5 +7,3 @@ endif
if !exists('g:vim_json_syntax_conceal') if !exists('g:vim_json_syntax_conceal')
let g:vim_json_syntax_conceal = 0 let g:vim_json_syntax_conceal = 0
endif endif
let g:filetype_euphoria = 'elixir'

View File

@@ -1,22 +1,250 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject
syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass
syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock
syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend
syntax region jsFlowTypeObject contained start=/{/ end=/}/ contains=jsFlowTypeKey skipwhite skipempty nextgroup=jsFunctionBlock extend
syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]/ contains=@jsFlowCluster
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster
syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster
syntax keyword jsFlowDeclareKeyword contained declare
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array
syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow
syntax match jsFlowNoise contained /[:;,<>]/
syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow
syntax keyword jsFlowStorageClass contained const var let
syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue
syntax region jsFlowClass contained matchgroup=jsFlowNoise start=/</ end=/>/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsFlow PreProc
HiLink jsFlowReturn PreProc
HiLink jsFlowArray PreProc
HiLink jsFlowDeclareBlock PreProc
HiLink jsFlowObject PreProc
HiLink jsFlowParenRegion PreProc
HiLink jsFlowClass PreProc
HiLink jsFlowTypeObject PreProc
HiLink jsFlowTypeKey PreProc
HiLink jsFlowTypeValue PreProc
HiLink jsFlowClassProperty jsClassProperty
HiLink jsFlowType Type
HiLink jsFlowDeclareKeyword Type
HiLink jsFlowNoise Noise
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject
syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass
syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock
syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend
syntax region jsFlowTypeObject contained start=/{/ end=/}/ contains=jsFlowTypeKey skipwhite skipempty nextgroup=jsFunctionBlock extend
syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]/ contains=@jsFlowCluster
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster
syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster
syntax keyword jsFlowDeclareKeyword contained declare
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array
syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow
syntax match jsFlowNoise contained /[:;,<>]/
syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow
syntax keyword jsFlowStorageClass contained const var let
syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue
syntax region jsFlowClass contained matchgroup=jsFlowNoise start=/</ end=/>/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsFlow PreProc
HiLink jsFlowReturn PreProc
HiLink jsFlowArray PreProc
HiLink jsFlowDeclareBlock PreProc
HiLink jsFlowObject PreProc
HiLink jsFlowParenRegion PreProc
HiLink jsFlowClass PreProc
HiLink jsFlowTypeObject PreProc
HiLink jsFlowTypeKey PreProc
HiLink jsFlowTypeValue PreProc
HiLink jsFlowClassProperty jsClassProperty
HiLink jsFlowType Type
HiLink jsFlowDeclareKeyword Type
HiLink jsFlowNoise Noise
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject
syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass
syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock
syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend
syntax region jsFlowTypeObject contained start=/{/ end=/}/ contains=jsFlowTypeKey skipwhite skipempty nextgroup=jsFunctionBlock extend
syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]/ contains=@jsFlowCluster
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster
syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster
syntax keyword jsFlowDeclareKeyword contained declare
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array
syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow
syntax match jsFlowNoise contained /[:;,<>]/
syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow
syntax keyword jsFlowStorageClass contained const var let
syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue
syntax region jsFlowClass contained matchgroup=jsFlowNoise start=/</ end=/>/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsFlow PreProc
HiLink jsFlowReturn PreProc
HiLink jsFlowArray PreProc
HiLink jsFlowDeclareBlock PreProc
HiLink jsFlowObject PreProc
HiLink jsFlowParenRegion PreProc
HiLink jsFlowClass PreProc
HiLink jsFlowTypeObject PreProc
HiLink jsFlowTypeKey PreProc
HiLink jsFlowTypeValue PreProc
HiLink jsFlowClassProperty jsClassProperty
HiLink jsFlowType Type
HiLink jsFlowDeclareKeyword Type
HiLink jsFlowNoise Noise
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject
syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass
syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock
syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend
syntax region jsFlowTypeObject contained start=/{/ end=/}/ contains=jsFlowTypeKey skipwhite skipempty nextgroup=jsFunctionBlock extend
syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]/ contains=@jsFlowCluster
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster
syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster
syntax keyword jsFlowDeclareKeyword contained declare
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array
syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow
syntax match jsFlowNoise contained /[:;,<>]/
syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow
syntax keyword jsFlowStorageClass contained const var let
syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue
syntax region jsFlowClass contained matchgroup=jsFlowNoise start=/</ end=/>/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsFlow PreProc
HiLink jsFlowReturn PreProc
HiLink jsFlowArray PreProc
HiLink jsFlowDeclareBlock PreProc
HiLink jsFlowObject PreProc
HiLink jsFlowParenRegion PreProc
HiLink jsFlowClass PreProc
HiLink jsFlowTypeObject PreProc
HiLink jsFlowTypeKey PreProc
HiLink jsFlowTypeValue PreProc
HiLink jsFlowClassProperty jsClassProperty
HiLink jsFlowType Type
HiLink jsFlowDeclareKeyword Type
HiLink jsFlowNoise Noise
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject
syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass
syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock
syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend
syntax region jsFlowTypeObject contained start=/{/ end=/}/ contains=jsFlowTypeKey skipwhite skipempty nextgroup=jsFunctionBlock extend
syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]/ contains=@jsFlowCluster
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster
syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster
syntax keyword jsFlowDeclareKeyword contained declare
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array
syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow
syntax match jsFlowNoise contained /[:;,<>]/
syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow
syntax keyword jsFlowStorageClass contained const var let
syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue
syntax region jsFlowClass contained matchgroup=jsFlowNoise start=/</ end=/>/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsFlow PreProc
HiLink jsFlowReturn PreProc
HiLink jsFlowArray PreProc
HiLink jsFlowDeclareBlock PreProc
HiLink jsFlowObject PreProc
HiLink jsFlowParenRegion PreProc
HiLink jsFlowClass PreProc
HiLink jsFlowTypeObject PreProc
HiLink jsFlowTypeKey PreProc
HiLink jsFlowTypeValue PreProc
HiLink jsFlowClassProperty jsClassProperty
HiLink jsFlowType Type
HiLink jsFlowDeclareKeyword Type
HiLink jsFlowNoise Noise
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen
syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\|=>\@!\)\@=/ contains=@jsFlowCluster syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\|=>\@!\)\@=/ contains=@jsFlowCluster
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster
syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster
syntax match jsFlowNoise contained /[:;,<>]/ syntax match jsFlowNoise contained /[:;,<>]/
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array Function object array bool class syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object array bool class
syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType
syntax match jsFlowTypeCustom contained /[0-9a-zA-Z_.]*/ skipwhite skipempty nextgroup=jsFlowGroup syntax match jsFlowTypeCustom contained /\k*/ skipwhite skipempty nextgroup=jsFlowGroup
syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster
syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster
syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens
syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments,jsFlowObject,jsFlowReturnObject syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments
syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject
syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster
syntax keyword jsFlowImportType contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup
syntax match jsFlowWildcard contained /*/
syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster
syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp
@@ -26,12 +254,11 @@ syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowT
syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword
syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp
syntax match jsFlowReturnOrOp contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax match jsFlowReturnOrOp contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster
syntax match jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=jsFuncBlock
syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs
syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
syntax region jsFlowTypeStatement start=/type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend syntax region jsFlowTypeStatement start=/type/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend
syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression,jsFlowGroup,jsFlowMaybe syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression,jsFlowGroup,jsFlowMaybe
syntax match jsFlowTypeOperator contained /=/ syntax match jsFlowTypeOperator contained /=/
syntax keyword jsFlowTypeKeyword contained type syntax keyword jsFlowTypeKeyword contained type
@@ -46,8 +273,8 @@ syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ e
syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend
syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp
syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator
if version >= 508 || !exists("did_javascript_syn_inits") if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508 if version < 508
@@ -88,8 +315,6 @@ if version >= 508 || !exists("did_javascript_syn_inits")
HiLink jsFlowObjectKey jsObjectKey HiLink jsFlowObjectKey jsObjectKey
HiLink jsFlowOrOperator PreProc HiLink jsFlowOrOperator PreProc
HiLink jsFlowReturnOrOp jsFlowOrOperator HiLink jsFlowReturnOrOp jsFlowOrOperator
HiLink jsFlowWildcard PreProc
HiLink jsFlowWildcardReturn PreProc
delcommand HiLink delcommand HiLink
endif endif

View File

@@ -6,9 +6,9 @@ syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contai
" tags containing a param " tags containing a param
syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam
" tags containing type and param " tags containing type and param
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\|typedef\)\>" skipwhite nextgroup=jsDocType syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
" tags containing type but no param " tags containing type but no param
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
" tags containing references " tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax) " other tags (no extra syntax)
@@ -20,7 +20,222 @@ syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRe
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
syntax region jsDocTypeNoParam contained start="{" end="}" oneline syntax region jsDocTypeNoParam contained start="{" end="}" oneline
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.\{-}]\|=\)\+" syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsDocTags Special
HiLink jsDocSeeTag Function
HiLink jsDocType Type
HiLink jsDocTypeBrackets jsDocType
HiLink jsDocTypeRecord jsDocType
HiLink jsDocTypeNoParam Type
HiLink jsDocParam Label
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
"" syntax coloring for javadoc comments (HTML)
syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
" tags containing a param
syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam
" tags containing type and param
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
" tags containing type but no param
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
" tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax)
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
syntax region jsDocTypeNoParam contained start="{" end="}" oneline
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsDocTags Special
HiLink jsDocSeeTag Function
HiLink jsDocType Type
HiLink jsDocTypeBrackets jsDocType
HiLink jsDocTypeRecord jsDocType
HiLink jsDocTypeNoParam Type
HiLink jsDocParam Label
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
"" syntax coloring for javadoc comments (HTML)
syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
" tags containing a param
syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam
" tags containing type and param
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
" tags containing type but no param
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
" tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax)
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
syntax region jsDocTypeNoParam contained start="{" end="}" oneline
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsDocTags Special
HiLink jsDocSeeTag Function
HiLink jsDocType Type
HiLink jsDocTypeBrackets jsDocType
HiLink jsDocTypeRecord jsDocType
HiLink jsDocTypeNoParam Type
HiLink jsDocParam Label
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
"" syntax coloring for javadoc comments (HTML)
syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
" tags containing a param
syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam
" tags containing type and param
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
" tags containing type but no param
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
" tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax)
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
syntax region jsDocTypeNoParam contained start="{" end="}" oneline
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsDocTags Special
HiLink jsDocSeeTag Function
HiLink jsDocType Type
HiLink jsDocTypeBrackets jsDocType
HiLink jsDocTypeRecord jsDocType
HiLink jsDocTypeNoParam Type
HiLink jsDocParam Label
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
"" syntax coloring for javadoc comments (HTML)
syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
" tags containing a param
syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam
" tags containing type and param
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
" tags containing type but no param
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
" tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax)
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
syntax region jsDocTypeNoParam contained start="{" end="}" oneline
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
let did_javascript_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink jsDocTags Special
HiLink jsDocSeeTag Function
HiLink jsDocType Type
HiLink jsDocTypeBrackets jsDocType
HiLink jsDocTypeRecord jsDocType
HiLink jsDocTypeNoParam Type
HiLink jsDocParam Label
delcommand HiLink
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
"" syntax coloring for javadoc comments (HTML)
syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
" tags containing a param
syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam
" tags containing type and param
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
" tags containing type but no param
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
" tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax)
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
syntax region jsDocTypeNoParam contained start="{" end="}" oneline
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
if version >= 508 || !exists("did_javascript_syn_inits") if version >= 508 || !exists("did_javascript_syn_inits")

View File

@@ -5,3 +5,38 @@ syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" n
syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+" syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"
endif endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite
syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite
syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite
syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite
syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite
syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite
syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite
syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite
syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite
syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite
syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"
endif

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,5 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1
if exists('+regexpengine') && ('&regexpengine' == 0) if exists('+regexpengine') && ('&regexpengine' == 0)
setlocal regexpengine=1 setlocal regexpengine=1
endif endif
set path+=./../templates,./../files
endif endif

View File

@@ -23,8 +23,7 @@ setlocal comments+=s:{{--,m:\ \ \ \ ,e:--}}
if exists('loaded_matchit') && exists('b:match_words') if exists('loaded_matchit') && exists('b:match_words')
" Append to html matchit words " Append to html matchit words
let b:match_words .= ',' . let b:match_words .= ',' .
\ '@\%(section\s*([^\,]*)\|if\|unless\|foreach\|forelse\|for\|while\|push\|can\|cannot\|hasSection\|' . \ '@\%(section\|if\|unless\|foreach\|forelse\|for\|while\|push\|can\|cannot\|hasSection\|php\|verbatim\)\>' .
\ 'php\s*(\@!\|verbatim\|component\|slot\|prepend\)' .
\ ':' . \ ':' .
\ '@\%(else\|elseif\|empty\|break\|continue\|elsecan\|elsecannot\)\>' . \ '@\%(else\|elseif\|empty\|break\|continue\|elsecan\|elsecannot\)\>' .
\ ':' . \ ':' .

View File

@@ -1,28 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'caddyfile') == -1
" Language: Caddyfile
" Author: Josh Glendenning <josh@isobit.io>
if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
setlocal commentstring=#\ %s
" Add NERDCommenter delimiters
let s:delimiters = {'left': '#'}
if exists('g:NERDDelimiterMap')
if !has_key(g:NERDDelimiterMap, 'caddyfile')
let g:NERDDelimiterMap.caddyfile = s:delimiters
endif
elseif exists('g:NERDCustomDelimiters')
if !has_key(g:NERDCustomDelimiters, 'caddyfile')
let g:NERDDelimiterMap.caddyfile = s:delimiters
endif
else
let g:NERDCustomDelimiters = {'caddyfile': s:delimiters}
endif
unlet s:delimiters
endif

View File

@@ -12,7 +12,7 @@ if exists('loaded_matchit') && !exists('b:match_words')
let b:match_ignorecase = 0 let b:match_ignorecase = 0
let b:match_words = let b:match_words =
\ '\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|struct\|lib\|macro\|ifdef\|def\|fun\|begin\|enum\)\>=\@!' . \ '\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|struct\|lib\|macro\|ifdef\|def\|fun\|begin\)\>=\@!' .
\ ':' . \ ':' .
\ '\<\%(else\|elsif\|ensure\|when\|rescue\|break\|redo\|next\|retry\)\>' . \ '\<\%(else\|elsif\|ensure\|when\|rescue\|break\|redo\|next\|retry\)\>' .
\ ':' . \ ':' .

View File

@@ -25,9 +25,7 @@ let &l:errorformat =
\ '%m' \ '%m'
\ ], ',') \ ], ',')
setlocal includeexpr=dart#resolveUri(v:fname)
setlocal isfname+=:
let b:undo_ftplugin = 'setl et< fo< sw< sts< com< cms< inex< isf<' let b:undo_ftplugin = 'setl et< fo< sw< sts< com< cms<'
endif endif

View File

@@ -16,7 +16,7 @@ if !exists("g:eelixir_default_subtype")
endif endif
if !exists("b:eelixir_subtype") if !exists("b:eelixir_subtype")
let s:lines = join(getline(1, 5) + [getline('$')], "\n") let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
let b:eelixir_subtype = matchstr(s:lines,'eelixir_subtype=\zs\w\+') let b:eelixir_subtype = matchstr(s:lines,'eelixir_subtype=\zs\w\+')
if b:eelixir_subtype == '' if b:eelixir_subtype == ''
let b:eelixir_subtype = matchstr(&filetype,'^eex\.\zs\w\+') let b:eelixir_subtype = matchstr(&filetype,'^eex\.\zs\w\+')
@@ -80,27 +80,10 @@ if exists("loaded_matchit")
let b:match_words = s:match_words let b:match_words = s:match_words
endif endif
if !exists('b:surround_45')
" When using surround `-` (ASCII 45) would provide `<% selection %>`
let b:surround_45 = "<% \r %>"
endif
if !exists('b:surround_61')
" When using surround `=` (ASCII 61) would provide `<%= selection %>`
let b:surround_61 = "<%= \r %>"
endif
if !exists('b:surround_35')
" When using surround `#` (ASCII 35) would provide `<%# selection %>`
let b:surround_35 = "<%# \r %>"
endif
if !exists('b:surround_5')
" When using surround `<C-e>` (ASCII 5 `ENQ`) would provide `<% selection %>\n<% end %>`
let b:surround_5 = "<% \r %>\n<% end %>"
endif
setlocal comments=:<%# setlocal comments=:<%#
setlocal commentstring=<%#\ %s\ %> setlocal commentstring=<%#\ %s\ %>
let b:undo_ftplugin = "setl cms< " . let b:undo_ftplugin = "setl cms< "
\ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
let &cpo = s:save_cpo let &cpo = s:save_cpo

View File

@@ -17,24 +17,45 @@ if exists("loaded_matchit") && !exists("b:match_words")
\ ',{:},\[:\],(:)' \ ',{:},\[:\],(:)'
endif endif
setlocal shiftwidth=2 softtabstop=2 expandtab iskeyword+=!,?
setlocal comments=:# setlocal comments=:#
setlocal commentstring=#\ %s setlocal commentstring=#\ %s
function! GetElixirFilename(word)
let word = a:word
" get first thing that starts uppercase, until the first space or end of line
let word = substitute(word,'^\s*\(\u[^ ]\+\).*$','\1','g')
" remove any trailing characters that don't look like a nested module
let word = substitute(word,'\.\U.*$','','g')
" replace module dots with slash
let word = substitute(word,'\.','/','g')
" remove any special chars
let word = substitute(word,'[^A-z0-9-_/]','','g')
" convert to snake_case
let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
let word = substitute(word,'\(\u\+\)\(\u\l\)','\1_\2','g')
let word = substitute(word,'\(\l\|\d\)\(\u\)','\1_\2','g')
let word = substitute(word,'-','_','g')
let word = tolower(word)
return word
endfunction
let &l:path = let &l:path =
\ join([ \ join([
\ 'lib', \ getcwd().'/lib',
\ 'src', \ getcwd().'/src',
\ 'deps/**/lib', \ getcwd().'/deps/**/lib',
\ 'deps/**/src', \ getcwd().'/deps/**/src',
\ &g:path \ &g:path
\ ], ',') \ ], ',')
setlocal includeexpr=elixir#util#get_filename(v:fname) setlocal includeexpr=GetElixirFilename(v:fname)
setlocal suffixesadd=.ex,.exs,.eex,.erl,.yrl,.hrl setlocal suffixesadd=.ex,.exs,.eex,.erl,.yrl,.hrl
silent! setlocal formatoptions-=t formatoptions+=croqlj silent! setlocal formatoptions-=t formatoptions+=croqlj
let b:undo_ftplugin = 'setlocal sw< sts< et< isk< com< cms< path< inex< sua< '.
\ '| unlet! b:match_ignorecase b:match_words'
endif endif

View File

@@ -1,17 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
" Vim filetype plugin
" Language: GraphQL
" Maintainer: Jon Parise <jon@indelible.org>
if (exists("b:did_ftplugin"))
finish
endif
let b:did_ftplugin = 1
setlocal comments=:#
setlocal commentstring=#\ %s
setlocal formatoptions-=t
setlocal iskeyword+=$,@-@
endif

View File

@@ -1,5 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'i3') == -1
setlocal commentstring=#\ %s
endif

View File

@@ -1,5 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
runtime ftplugin/coffee.vim
endif

View File

@@ -1,63 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mathematica') == -1
"Vim filetype plugin
" Language: Mathematica
" Maintainer: R. Menon <rsmenon@icloud.com>
" Last Change: Feb 26, 2013
" Initialization {
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
"}
" Syntax completion function {
if exists('&ofu')
setlocal omnifunc=syntaxcomplete#Complete
setlocal completefunc=syntaxcomplete#Complete
endif
"}
" Main functions {
if has('python')
" Random ID generator {
function! RandomID()
"Python implementation follows; do not alter indentations/whitespace
python << EOF
import random, string, vim
vim.command("let l:id = '" + (''.join(random.sample(string.ascii_uppercase + string.digits, 8))) + "'")
EOF
return l:id
endfunction
"}
"Unit test template {
function! Test()
if exists("*strftime")
let l:date = strftime("%Y%m%d") . "-"
else
let l:date = ""
endif
let l:testid = expand("%:t") . "-" . l:date . RandomID()
let l:template = "Test[\rtest\r,\rresult\r,\rTestID -> \"" . l:testid . "\"\r\b]"
exe ":normal i" . l:template
endfunction
"}
endif
"}
" Cleanup {
let &cpo = s:cpo_save
unlet s:cpo_save
"}
" vim: set foldmarker={,} foldlevel=0 foldmethod=marker:
endif

View File

@@ -1,5 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nginx') == -1
setlocal commentstring=#\ %s
endif

92
ftplugin/perl6.vim Normal file
View File

@@ -0,0 +1,92 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'perl') == -1
" Vim filetype plugin file
" Language: Perl 6
" Maintainer: vim-perl <vim-perl@googlegroups.com>
" Homepage: http://github.com/vim-perl/vim-perl
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
" Last Change: {{LAST_CHANGE}}
" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
"
" Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
if exists("b:did_ftplugin") | finish | endif
let b:did_ftplugin = 1
" Make sure the continuation lines below do not cause problems in
" compatibility mode.
let s:save_cpo = &cpo
set cpo-=C
setlocal formatoptions-=t
setlocal formatoptions+=crqol
setlocal keywordprg=p6doc
setlocal comments=:#\|,:#=,:#
setlocal commentstring=#%s
" Change the browse dialog on Win32 to show mainly Perl-related files
if has("gui_win32")
let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
\ "Perl Modules (*.pm)\t*.pm\n" .
\ "Perl Documentation Files (*.pod)\t*.pod\n" .
\ "All Files (*.*)\t*.*\n"
endif
" Provided by Ned Konz <ned at bike-nomad dot com>
"---------------------------------------------
setlocal include=\\<\\(use\\\|require\\)\\>
setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
setlocal define=[^A-Za-z_]
" The following line changes a global variable but is necessary to make
" gf and similar commands work. Thanks to Andrew Pimlott for pointing out
" the problem. If this causes a " problem for you, add an
" after/ftplugin/perl6.vim file that contains
" set isfname-=:
set isfname+=:
setlocal iskeyword=@,48-57,_,192-255,-
" Set this once, globally.
if !exists("perlpath")
if executable("perl6")
try
if &shellxquote != '"'
let perlpath = system('perl6 -e "@*INC.join(q/,/).say"')
else
let perlpath = system("perl6 -e '@*INC.join(q/,/).say'")
endif
let perlpath = substitute(perlpath,',.$',',,','')
catch /E145:/
let perlpath = ".,,"
endtry
else
" If we can't call perl to get its path, just default to using the
" current directory and the directory of the current file.
let perlpath = ".,,"
endif
endif
" Append perlpath to the existing path value, if it is set. Since we don't
" use += to do it because of the commas in perlpath, we have to handle the
" global / local settings, too.
if &l:path == ""
if &g:path == ""
let &l:path=perlpath
else
let &l:path=&g:path.",".perlpath
endif
else
let &l:path=&l:path.",".perlpath
endif
"---------------------------------------------
" Undo the stuff we changed.
let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< isk< kp< path<" .
\ " | unlet! b:browsefilter"
" Restore the saved compatibility options.
let &cpo = s:save_cpo
unlet s:save_cpo
endif

View File

@@ -1,37 +1,22 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -1
if exists('b:loaded_plantuml_plugin') " Vim plugin file
" Language: PlantUML
" Maintainer: Aaron C. Meadows < language name at shadowguarddev dot com>
" Last Change: 19-Jun-2012
" Version: 0.1
if exists("g:loaded_plantuml_plugin")
finish finish
endif endif
let b:loaded_plantuml_plugin = 1 let g:loaded_plantuml_plugin = 1
let s:cpo_save = &cpo
set cpo&vim
if !exists('g:plantuml_executable_script') if !exists("g:plantuml_executable_script")
let g:plantuml_executable_script='plantuml' let g:plantuml_executable_script="plantuml"
endif endif
if exists('loaded_matchit') autocmd Filetype plantuml let &l:makeprg=g:plantuml_executable_script . " " . fnameescape(expand("%"))
let b:match_ignorecase = 0
let b:match_words =
\ '\(\<ref\>\|\<box\>\|\<opt\>\|\<alt\>\|\<group\>\|\<loop\>\|\<note\>\|\<legend\>\):\<else\>:\<end\>' .
\ ',\<if\>:\<elseif\>:\<else\>:\<endif\>' .
\ ',\<rnote\>:\<endrnote\>' .
\ ',\<hnote\>:\<endhnote\>' .
\ ',\<title\>:\<endtitle\>' .
\ ',\<\while\>:\<endwhile\>'
endif
let &l:makeprg=g:plantuml_executable_script . ' ' . fnameescape(expand('%'))
setlocal comments=s1:/',mb:',ex:'/,:' commentstring=/'%s'/ formatoptions-=t formatoptions+=croql setlocal comments=s1:/',mb:',ex:'/,:' commentstring=/'%s'/ formatoptions-=t formatoptions+=croql
let b:endwise_addition = '\=index(["note","legend"], submatch(0))!=-1 ? "end " . submatch(0) : "end"'
let b:endwise_words = 'loop,group,alt,note,legend'
let b:endwise_pattern = '^\s*\zs\<\(loop\|group\|alt\|note\ze[^:]*$\|legend\)\>.*$'
let b:endwise_syngroups = 'plantumlKeyword'
let &cpo = s:cpo_save
unlet s:cpo_save
endif endif

View File

@@ -19,8 +19,6 @@ setlocal formatoptions=tcqro
" Enable autocompletion of hyphenated PowerShell commands, " Enable autocompletion of hyphenated PowerShell commands,
" e.g. Get-Content or Get-ADUser " e.g. Get-Content or Get-ADUser
setlocal iskeyword+=- setlocal iskeyword+=-
" MS applications (including PowerShell) require a Byte Order Mark (BOM) for UTF-8.
setlocal bomb
" Change the browse dialog on Win32 to show mainly PowerShell-related files " Change the browse dialog on Win32 to show mainly PowerShell-related files
if has("gui_win32") if has("gui_win32")

View File

@@ -16,8 +16,6 @@ let b:did_ftplugin = 1
setlocal tw=0 setlocal tw=0
setlocal commentstring=#%s setlocal commentstring=#%s
setlocal formatoptions=tcqro setlocal formatoptions=tcqro
" MS applications (including PowerShell) require a Byte Order Mark (BOM) for UTF-8.
setlocal bomb
" Change the browse dialog on Win32 to show mainly PowerShell-related files " Change the browse dialog on Win32 to show mainly PowerShell-related files
if has("gui_win32") if has("gui_win32")

View File

@@ -1,5 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1
setlocal comments=s1fl:{-,mb:\ \ ,ex:-},:--
endif

View File

@@ -1,63 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'racket') == -1
" Language: Racket
" Maintainer: Will Langstroth <will@langstroth.com>
" URL: http://github.com/wlangstroth/vim-racket
setl iskeyword+=#,%,^
setl lispwords+=module,module*,module+,parameterize,let-values,let*-values,letrec-values,local
setl lispwords+=define-values,opt-lambda,case-lambda,syntax-rules,with-syntax,syntax-case,syntax-parse
setl lispwords+=define-signature,unit,unit/sig,compund-unit/sig,define-values/invoke-unit/sig
setl lispwords+=define-opt/c,define-syntax-rule
setl lispwords+=struct
" Racket OOP
setl lispwords+=class,define/public,define/private
" kanren
setl lispwords+=fresh,run,run*,project,conde,condu
" loops
setl lispwords+=for,for/list,for/fold,for*,for*/list,for*/fold,for/or,for/and
setl lispwords+=for/hash,for/sum,for/flvector,for*/flvector,for/vector
setl lispwords+=match,match*,match/values,define/match,match-lambda,match-lambda*,match-lambda**
setl lispwords+=match-let,match-let*,match-let-values,match-let*-values
setl lispwords+=match-letrec,match-define,match-define-values
setl lisp
" Enable auto begin new comment line when continuing from an old comment line
setl comments+=:;
setl formatoptions+=r
setl makeprg=raco\ make\ --\ %
" Simply setting keywordprg like this works:
" setl keywordprg=raco\ docs
" but then vim says:
" "press ENTER or type a command to continue"
" We avoid the annoyance of having to hit enter by remapping K directly.
nnoremap <buffer> K :silent !raco docs <cword><cr>:redraw!<cr>
" For the visual mode K mapping, it's slightly more convoluted to get the
" selected text:
function! s:Racket_visual_doc()
try
let l:old_a = @a
normal! gv"ay
call system("raco docs '". @a . "'")
redraw!
return @a
finally
let @a = l:old_a
endtry
endfunction
vnoremap <buffer> K :call <SID>Racket_visual_doc()<cr>
nnoremap <buffer> <f9> :!racket -t %<cr>
"setl commentstring=;;%s
setl commentstring=#\|\ %s\ \|#
endif

View File

@@ -1,5 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'raml') == -1
set ts=2 sts=2 sw=2 et
endif

View File

@@ -71,15 +71,15 @@ endif
function! s:query_path(root) abort function! s:query_path(root) abort
let code = "print $:.join %q{,}" let code = "print $:.join %q{,}"
if &shell =~# 'sh' && empty(&shellxquote) if &shell =~# 'sh'
let prefix = 'env PATH='.shellescape($PATH).' ' let prefix = 'env PATH='.shellescape($PATH).' '
else else
let prefix = '' let prefix = ''
endif endif
if &shellxquote == "'" if &shellxquote == "'"
let path_check = prefix.'ruby --disable-gems -e "' . code . '"' let path_check = prefix.'ruby -e --disable-gems"' . code . '"'
else else
let path_check = prefix."ruby --disable-gems -e '" . code . "'" let path_check = prefix."ruby -e --disable-gems'" . code . "'"
endif endif
let cd = haslocaldir() ? 'lcd' : 'cd' let cd = haslocaldir() ? 'lcd' : 'cd'
@@ -164,23 +164,23 @@ if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
nmap <buffer><script> <SID>: :<C-U> nmap <buffer><script> <SID>: :<C-U>
nmap <buffer><script> <SID>c: :<C-U><C-R>=v:count ? v:count : ''<CR> nmap <buffer><script> <SID>c: :<C-U><C-R>=v:count ? v:count : ''<CR>
nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','n')<CR> nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','n')<CR>
nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','n')<CR> nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','n')<CR>
nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','n')<CR> nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','n')<CR>
nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','n')<CR> nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','n')<CR>
xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','v')<CR> xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','v')<CR>
xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','v')<CR> xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','v')<CR>
xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','v')<CR> xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','v')<CR>
xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','v')<CR> xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','v')<CR>
nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','n')<CR> nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','n')<CR>
nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','n')<CR> nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','n')<CR>
nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','n')<CR> nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','n')<CR>
nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','n')<CR> nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','n')<CR>
xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','v')<CR> xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','v')<CR>
xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','v')<CR> xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','v')<CR>
xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','v')<CR> xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','v')<CR>
xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','v')<CR> xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','v')<CR>
let b:undo_ftplugin = b:undo_ftplugin let b:undo_ftplugin = b:undo_ftplugin
\."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['" \."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
@@ -290,13 +290,12 @@ function! s:searchsyn(pattern, syn, flags, mode) abort
norm! gv norm! gv
endif endif
let i = 0 let i = 0
call map(a:syn, 'hlID(v:val)')
while i < cnt while i < cnt
let i = i + 1 let i = i + 1
let line = line('.') let line = line('.')
let col = col('.') let col = col('.')
let pos = search(a:pattern,'W'.a:flags) let pos = search(a:pattern,'W'.a:flags)
while pos != 0 && index(a:syn, s:synid()) < 0 while pos != 0 && s:synname() !~# a:syn
let pos = search(a:pattern,'W'.a:flags) let pos = search(a:pattern,'W'.a:flags)
endwhile endwhile
if pos == 0 if pos == 0
@@ -306,8 +305,8 @@ function! s:searchsyn(pattern, syn, flags, mode) abort
endwhile endwhile
endfunction endfunction
function! s:synid() abort function! s:synname() abort
return synID(line('.'),col('.'),0) return synIDattr(synID(line('.'),col('.'),0),'name')
endfunction endfunction
function! s:wrap_i(back,forward) abort function! s:wrap_i(back,forward) abort
@@ -363,7 +362,7 @@ function! RubyCursorFile() abort
let pre = matchstr(strpart(getline('.'), 0, col('.')-1), '.*\f\@<!') let pre = matchstr(strpart(getline('.'), 0, col('.')-1), '.*\f\@<!')
let post = matchstr(strpart(getline('.'), col('.')), '\f\@!.*') let post = matchstr(strpart(getline('.'), col('.')), '\f\@!.*')
let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : '' let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : ''
if s:synid() ==# hlID('rubyConstant') if s:synname() ==# 'rubyConstant'
let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','') let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','')
let cfile = substitute(cfile,'::','/','g') let cfile = substitute(cfile,'::','/','g')
let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g') let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g')

View File

@@ -48,6 +48,7 @@ endif
" This includeexpr isn't perfect, but it's a good start " This includeexpr isn't perfect, but it's a good start
setlocal includeexpr=substitute(v:fname,'::','/','g') setlocal includeexpr=substitute(v:fname,'::','/','g')
" NOT adding .rc as it's being phased out (0.7)
setlocal suffixesadd=.rs setlocal suffixesadd=.rs
if exists("g:ftplugin_rust_source_path") if exists("g:ftplugin_rust_source_path")
@@ -112,6 +113,16 @@ xnoremap <silent> <buffer> ]] :call rust#Jump('v', 'Forward')<CR>
onoremap <silent> <buffer> [[ :call rust#Jump('o', 'Back')<CR> onoremap <silent> <buffer> [[ :call rust#Jump('o', 'Back')<CR>
onoremap <silent> <buffer> ]] :call rust#Jump('o', 'Forward')<CR> onoremap <silent> <buffer> ]] :call rust#Jump('o', 'Forward')<CR>
" %-matching. <:> is handy for generics.
set matchpairs+=<:>
" There are two minor issues with it; (a) comparison operators in expressions,
" where a less-than may match a greater-than later on—this is deemed a trivial
" issue—and (b) `Fn() -> X` syntax. This latter issue is irremediable from the
" highlighting perspective (built into Vim), but the actual % functionality
" can be fixed by this use of matchit.vim.
let b:match_skip = 's:comment\|string\|rustArrow'
source $VIMRUNTIME/macros/matchit.vim
" Commands {{{1 " Commands {{{1
" See |:RustRun| for docs " See |:RustRun| for docs
@@ -132,9 +143,6 @@ command! -range=% RustPlay :call rust#Play(<count>, <line1>, <line2>, <f-args>)
" See |:RustFmt| for docs " See |:RustFmt| for docs
command! -buffer RustFmt call rustfmt#Format() command! -buffer RustFmt call rustfmt#Format()
" See |:RustFmtRange| for docs
command! -range -buffer RustFmtRange call rustfmt#FormatRange(<line1>, <line2>)
" Mappings {{{1 " Mappings {{{1
" Bind ⌘R in MacVim to :RustRun " Bind ⌘R in MacVim to :RustRun
@@ -182,27 +190,18 @@ let b:undo_ftplugin = "
\|ounmap <buffer> ]] \|ounmap <buffer> ]]
\|set matchpairs-=<:> \|set matchpairs-=<:>
\|unlet b:match_skip \|unlet b:match_skip
\|augroup! rust.vim
\" \"
" }}}1 " }}}1
" Code formatting on save " Code formatting on save
if get(g:, "rustfmt_autosave", 0) if get(g:, "rustfmt_autosave", 0)
autocmd BufWritePre *.rs silent! call rustfmt#Format() autocmd BufWritePre *.rs call rustfmt#Format()
endif endif
augroup END augroup END
" %-matching. <:> is handy for generics.
set matchpairs+=<:>
" There are two minor issues with it; (a) comparison operators in expressions,
" where a less-than may match a greater-than later on—this is deemed a trivial
" issue—and (b) `Fn() -> X` syntax. This latter issue is irremediable from the
" highlighting perspective (built into Vim), but the actual % functionality
" can be fixed by this use of matchit.vim.
let b:match_skip = 's:comment\|string\|rustArrow'
source $VIMRUNTIME/macros/matchit.vim
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo

27
ftplugin/sass.vim Normal file
View File

@@ -0,0 +1,27 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haml') == -1
" Vim filetype plugin
" Language: Sass
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2010 Jul 26
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let b:undo_ftplugin = "setl com< cms< def< inc< inex< ofu< sua<"
setlocal comments=://
setlocal commentstring=//\ %s
setlocal define=^\\s*\\%(@mixin\\\|=\\)
setlocal includeexpr=substitute(v:fname,'\\%(.*/\\\|^\\)\\zs','_','')
setlocal omnifunc=csscomplete#CompleteCSS
setlocal suffixesadd=.sass,.scss,.css
let &l:include = '^\s*@import\s\+\%(url(\)\=["'']\='
" vim:set sw=2:
endif

View File

@@ -18,11 +18,7 @@ silent! setlocal formatoptions+=j
" Just like c.vim, but additionally doesn't wrap text onto /** line when " Just like c.vim, but additionally doesn't wrap text onto /** line when
" formatting. Doesn't bungle bulleted lists when formatting. " formatting. Doesn't bungle bulleted lists when formatting.
if get(g:, 'scala_scaladoc_indent', 0) setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/**,mb:*,ex:*/,s1:/*,mb:*,ex:*/,://
setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s2:/**,mb:*,ex:*/,s1:/*,mb:*,ex:*/,://
else
setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/**,mb:*,ex:*/,s1:/*,mb:*,ex:*/,://
endif
setlocal commentstring=//\ %s setlocal commentstring=//\ %s
setlocal shiftwidth=2 softtabstop=2 expandtab setlocal shiftwidth=2 softtabstop=2 expandtab

View File

@@ -1,17 +1,17 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'scss') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haml') == -1
if exists('b:did_indent') && b:did_indent " Vim filetype plugin
" be kind. allow users to override this. Does it work? " Language: SCSS
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2010 Jul 26
if exists("b:did_ftplugin")
finish finish
endif endif
setlocal indentexpr=scss_indent#GetIndent(v:lnum) runtime! ftplugin/sass.vim
" Automatically insert the current comment leader after hitting <Enter>
" in Insert mode respectively after hitting 'o' or 'O' in Normal mode
setlocal formatoptions+=ro
" SCSS comments are either /* */ or //
setlocal comments=s1:/*,mb:*,ex:*/,:// setlocal comments=s1:/*,mb:*,ex:*/,://
" vim:set sw=2:
endif endif

View File

@@ -1,23 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
" Vim filetype plugin
" Language: Vue.js
" Maintainer: Eduardo San Martin Morote
" Author: Adriaan Zonnenberg
if exists("b:did_ftplugin")
finish
endif
runtime! ftplugin/html.vim
setlocal suffixesadd+=.vue
if exists('g:loaded_ale')
let g:ale_linters = get(g:, 'ale_linters', {})
let g:ale_linters.vue = get(g:ale_linters, 'vue', ['eslint'])
let g:ale_linter_aliases = get(g:, 'ale_linter_aliases', {})
let g:ale_linter_aliases.vue = get(g:ale_linter_aliases, 'vue', 'javascript')
endif
endif

View File

@@ -29,11 +29,6 @@ function GetAnsibleIndent(lnum)
if a:lnum == 1 || !prevnonblank(a:lnum-1) if a:lnum == 1 || !prevnonblank(a:lnum-1)
return 0 return 0
endif endif
if exists("g:ansible_unindent_after_newline")
if (a:lnum -1) != prevnonblank(a:lnum - 1)
return 0
endif
endif
let prevlnum = prevnonblank(a:lnum - 1) let prevlnum = prevnonblank(a:lnum - 1)
let maintain = indent(prevlnum) let maintain = indent(prevlnum)
let increase = maintain + &sw let increase = maintain + &sw

View File

@@ -4,22 +4,22 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'blade') == -1
" Language: Blade (Laravel) " Language: Blade (Laravel)
" Maintainer: Jason Walton <jwalton512@gmail.com> " Maintainer: Jason Walton <jwalton512@gmail.com>
if exists('b:did_indent') if exists("b:did_indent")
finish finish
endif endif
runtime! indent/html.vim runtime! indent/html.vim
let s:htmlindent = &indentexpr let s:htmlindent = &indentexpr
unlet! b:did_indent unlet! b:did_indent
runtime! indent/php.vim runtime! indent/php.vim
let s:phpindent = &indentexpr let s:phpindent = &indentexpr
unlet! b:did_indent
let b:did_indent = 1 let b:did_indent = 1
" Doesn't include 'foreach' and 'forelse' because these already get matched by 'for'. " Doesn't include 'foreach' and 'forelse' because these already get matched by 'for'.
let s:directives_start = 'if\|else\|unless\|for\|while\|empty\|push\|section\|can\|hasSection\|verbatim\|php\|' . let s:directives_start = 'if\|else\|unless\|for\|while\|empty\|push\|section\|can\|hasSection\|verbatim'
\ 'component\|slot\|prepend'
let s:directives_end = 'else\|end\|empty\|show\|stop\|append\|overwrite' let s:directives_end = 'else\|end\|empty\|show\|stop\|append\|overwrite'
if exists('g:blade_custom_directives_pairs') if exists('g:blade_custom_directives_pairs')
@@ -29,71 +29,55 @@ endif
setlocal autoindent setlocal autoindent
setlocal indentexpr=GetBladeIndent() setlocal indentexpr=GetBladeIndent()
exe 'setlocal indentkeys=o,O,<>>,!^F,0=}},0=!!},=@' . substitute(s:directives_end, '\\|', ',=@', 'g') exe "setlocal indentkeys=o,O,<>>,!^F,0=}},0=!!},=@" . substitute(s:directives_end, '\\|', ',=@', 'g')
" Only define the function once. " Only define the function once.
if exists('*GetBladeIndent') if exists("*GetBladeIndent")
finish finish
endif endif
function! s:IsStartingDelimiter(lnum)
let line = getline(a:lnum)
return line =~# '\%(\w\|@\)\@<!@\%(' . s:directives_start . '\)\%(.*@end\|.*@stop\)\@!'
\ || line =~# '{{\%(.*}}\)\@!'
\ || line =~# '{!!\%(.*!!}\)\@!'
\ || line =~# '<?\%(.*?>\)\@!'
endfunction
function! GetBladeIndent() function! GetBladeIndent()
let lnum = prevnonblank(v:lnum - 1) let lnum = prevnonblank(v:lnum-1)
if lnum == 0 if lnum == 0
return 0 return 0
endif endif
let line = getline(lnum) let line = substitute(substitute(getline(lnum), '\s\+$', '', ''), '^\s\+', '', '')
let cline = getline(v:lnum) let cline = substitute(substitute(getline(v:lnum), '\s\+$', '', ''), '^\s\+', '', '')
let indent = indent(lnum) let indent = indent(lnum)
if cline =~# '@\%(' . s:directives_end . '\)' ||
" 1. Check for special directives \ cline =~# '\%(<?.*\)\@<!?>\|\%({{.*\)\@<!}}\|\%({!!.*\)\@<!!!}'
" @section is a single-line directive if it has a second argument. let indent = indent - &sw
" @php is a single-line directive if it is followed by parentheses. elseif line =~# '<?\%(.*?>\)\@!\|@php\%(\s*(\)\@!'
if (line =~# '@section\%(.*@end\)\@!' && line !~# '@section\s*([^,]*)') let indent = indent + &sw
\ || line =~# '@php\s*(' else
return indent if exists("*GetBladeIndentCustom")
endif let hindent = GetBladeIndentCustom()
" Don't use PHP indentation if line is a comment
" 2. When the current line is an ending delimiter: decrease indentation
" if the previous line wasn't a starting delimiter.
if cline =~# '^\s*@\%(' . s:directives_end . '\)'
\ || cline =~# '\%(<?.*\)\@<!?>'
\ || cline =~# '\%({{.*\)\@<!}}'
\ || cline =~# '\%({!!.*\)\@<!!!}'
return s:IsStartingDelimiter(lnum) ? indent : indent - &sw
endif
" 3. Increase indentation if the line contains a starting delimiter.
if s:IsStartingDelimiter(lnum)
return indent + &sw
endif
" 4. External indent scripts (PHP and HTML)
execute 'let indent = ' . s:htmlindent
if exists('*GetBladeIndentCustom')
let indent = GetBladeIndentCustom()
elseif line !~# '^\s*\%(#\|//\)\|\*/\s*$' && ( elseif line !~# '^\s*\%(#\|//\)\|\*/\s*$' && (
\ searchpair('@include\%(If\)\?\s*(', '', ')', 'bWr') || \ searchpair('@include\%(If\)\?\s*(', '', ')', 'bWr') ||
\ searchpair('{!!', '', '!!}', 'bWr') || \ searchpair('{!!', '', '!!}', 'bWr') ||
\ searchpair('{{', '', '}}', 'bWr') || \ searchpair('{{', '', '}}', 'bWr') ||
\ searchpair('<?', '', '?>', 'bWr') || \ searchpair('<?', '', '?>', 'bWr') ||
\ searchpair('@php\s*(\@!', '', '@endphp', 'bWr') ) \ searchpair('@php\%(\s*(\)\@!', '', '@endphp', 'bWr') )
" Only use PHP's indent if the region spans multiple lines execute 'let hindent = ' . s:phpindent
if !s:IsStartingDelimiter(v:lnum) else
execute 'let indent = ' . s:phpindent execute 'let hindent = ' . s:htmlindent
endif
if hindent > -1
let indent = hindent
endif endif
endif endif
let increase = indent + &sw
if line =~# '@\%(section\)\%(.*@end\)\@!' && line !~# '@\%(section\)\s*([^,]*)'
return indent return indent
elseif line =~# '@\%(' . s:directives_start . '\)\%(.*@end\|.*@stop\)\@!' ||
\ line =~# '{{\%(.*}}\)\@!' || line =~# '{!!\%(.*!!}\)\@!'
return increase
else
return indent
endif
endfunction endfunction
endif endif

View File

@@ -1,46 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'caddyfile') == -1
if exists('b:did_indent')
finish
endif
let b:did_indent = 1
setlocal nolisp
setlocal autoindent
setlocal indentexpr=GetCaddyfileIndent(v:lnum)
setlocal indentkeys+=<:>,0=},0=)
" setlocal cindent
if exists('*shiftwidth')
func s:sw()
return shiftwidth()
endfunc
else
func s:sw()
return &sw
endfunc
endif
function! GetCaddyfileIndent(lnum)
let prevlnum = prevnonblank(a:lnum-1)
if prevlnum == 0
return 0
endif
let thisl = substitute(getline(a:lnum), '#.*$', '', '')
let prevl = substitute(getline(prevlnum), '#.*$', '', '')
let ind = indent(prevlnum)
if prevl =~ '{\s*$'
let ind += s:sw()
endif
if thisl =~ '^\s*}\s*$'
let ind -= s:sw()
endif
return ind
endfunction
endif

View File

@@ -89,7 +89,7 @@ if exists("*searchpairpos")
function! s:match_pairs(open, close, stopat) function! s:match_pairs(open, close, stopat)
" Stop only on vector and map [ resp. {. Ignore the ones in strings and " Stop only on vector and map [ resp. {. Ignore the ones in strings and
" comments. " comments.
if a:stopat == 0 && g:clojure_maxlines > 0 if a:stopat == 0
let stopat = max([line(".") - g:clojure_maxlines, 0]) let stopat = max([line(".") - g:clojure_maxlines, 0])
else else
let stopat = a:stopat let stopat = a:stopat
@@ -123,7 +123,7 @@ if exists("*searchpairpos")
if s:syn_id_name() !~? "string" if s:syn_id_name() !~? "string"
return -1 return -1
endif endif
if s:current_char() != '\' if s:current_char() != '\\'
return -1 return -1
endif endif
call cursor(0, col("$") - 1) call cursor(0, col("$") - 1)

View File

@@ -8,32 +8,6 @@ let b:did_indent = 1
setlocal cindent setlocal cindent
setlocal cinoptions+=j1,J1 setlocal cinoptions+=j1,J1
setlocal indentexpr=DartIndent()
let b:undo_indent = 'setl cin< cino<' let b:undo_indent = 'setl cin< cino<'
if exists("*DartIndent")
finish
endif
function! DartIndent()
" Default to cindent in most cases
let indentTo = cindent(v:lnum)
let previousLine = getline(prevnonblank(v:lnum - 1))
let currentLine = getline(v:lnum)
" Don't indent after an annotation
if previousLine =~# '^\s*@.*$'
let indentTo = indent(v:lnum - 1)
endif
" Indent after opening List literal
if previousLine =~# '\[$' && !(currentLine =~# '^\s*\]')
let indentTo = indent(v:lnum - 1) + &shiftwidth
endif
return indentTo
endfunction
endif endif

View File

@@ -8,9 +8,6 @@ runtime! indent/elixir.vim
unlet! b:did_indent unlet! b:did_indent
setlocal indentexpr= setlocal indentexpr=
let s:cpo_save = &cpo
set cpo&vim
if exists("b:eelixir_subtype") if exists("b:eelixir_subtype")
exe "runtime! indent/".b:eelixir_subtype.".vim" exe "runtime! indent/".b:eelixir_subtype.".vim"
else else
@@ -56,21 +53,19 @@ function! GetEelixirIndent(...)
let line = getline(lnum) let line = getline(lnum)
let cline = getline(v:lnum) let cline = getline(v:lnum)
if cline =~# '^\s*<%\s*\%(end\|else\|elsif\|catch\|after\|rescue\)\>.*%>' if cline =~# '^\s*<%\s*\%(end\|else\|elsif\|catch\|after\|rescue\)\>.*%>'
let ind -= &sw let ind = ind - &sw
elseif line =~# '\S\s*<%\s*end\s*%>' elseif line =~# '\S\s*<%\s*end\s*%>'
let ind -= &sw let ind = ind - &sw
endif endif
if line =~# '<%[=%]\=\s*.*\(\<do\|->\)\s*%>' || if line =~# '<%[=%]\=\s*.*\<do\s*%>'
\ line =~# '<%\s*\%(else\|elsif\|catch\|after\|rescue\)\>.*%>' let ind = ind + &sw
let ind += &sw elseif line =~# '<%\s*\%(else\|elsif\|catch\|after\|rescue\)\>.*%>'
let ind = ind + &sw
endif endif
if cline =~# '^\s*%>\s*$' if cline =~# '^\s*%>\s*$'
let ind -= &sw let ind = ind - &sw
endif endif
return ind return ind
endfunction endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
endif endif

View File

@@ -2,47 +2,144 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
if exists("b:did_indent") if exists("b:did_indent")
finish finish
end endif
let b:did_indent = 1 let b:did_indent = 1
setlocal indentexpr=elixir#indent(v:lnum) setlocal nosmartindent
setlocal indentkeys+=0=end,0=catch,0=rescue,0=after,0=else,=->,0},0],0),0=\|>,0=<> setlocal indentexpr=GetElixirIndent()
" TODO: @jbodah 2017-02-27: all operators should cause reindent when typed setlocal indentkeys+=0),0],0=end,0=else,0=match,0=elsif,0=catch,0=after,0=rescue
function! elixir#indent(lnum) if exists("*GetElixirIndent")
let lnum = a:lnum finish
let text = getline(lnum) endif
let prev_nb_lnum = prevnonblank(lnum-1)
let prev_nb_text = getline(prev_nb_lnum)
call elixir#indent#debug("==> Indenting line " . lnum) let s:cpo_save = &cpo
call elixir#indent#debug("text = '" . text . "'") set cpo&vim
let handlers = [ let s:no_colon_before = ':\@<!'
\'top_of_file', let s:no_colon_after = ':\@!'
\'starts_with_end', let s:symbols_end = '\]\|}\|)'
\'starts_with_mid_or_end_block_keyword', let s:symbols_start = '\[\|{\|('
\'following_trailing_do', let s:arrow = '^.*->$'
\'following_trailing_binary_operator', let s:skip_syntax = '\%(Comment\|String\)$'
\'starts_with_pipe', let s:block_skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '".s:skip_syntax."'"
\'starts_with_close_bracket', let s:block_start = '\<\%(do\|fn\)\>'
\'starts_with_binary_operator', let s:block_middle = 'else\|match\|elsif\|catch\|after\|rescue'
\'inside_nested_construct', let s:block_end = 'end'
\'starts_with_comment', let s:starts_with_pipeline = '^\s*|>.*$'
\'inside_generic_block' let s:ending_with_assignment = '=\s*$'
\]
for handler in handlers
call elixir#indent#debug('testing handler elixir#indent#handle_'.handler)
let indent = function('elixir#indent#handle_'.handler)(lnum, text, prev_nb_lnum, prev_nb_text)
if indent != -1
call elixir#indent#debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
return indent
endif
endfor
call elixir#indent#debug("defaulting") let s:indent_keywords = '\<'.s:no_colon_before.'\%('.s:block_start.'\|'.s:block_middle.'\)$'.'\|'.s:arrow
let s:deindent_keywords = '^\s*\<\%('.s:block_end.'\|'.s:block_middle.'\)\>'.'\|'.s:arrow
let s:pair_start = '\<\%('.s:no_colon_before.s:block_start.'\)\>'.s:no_colon_after
let s:pair_middle = '\<\%('.s:block_middle.'\)\>'.s:no_colon_after.'\zs'
let s:pair_end = '\<\%('.s:no_colon_before.s:block_end.'\)\>\zs'
let s:inside_block = 0
function! GetElixirIndent()
let lnum = prevnonblank(v:lnum - 1)
" At the start of the file use zero indent.
if lnum == 0
return 0 return 0
endif
let opened_symbol = 0
let current_line = getline(v:lnum)
let last_line = getline(lnum)
let ind = indent(lnum)
" TODO: Remove these 2 lines
" I don't know why, but for the test on spec/indent/lists_spec.rb:24.
" Vim is making some mess on parsing the syntax of 'end', it is being
" recognized as 'elixirString' when should be recognized as 'elixirBlock'.
" This forces vim to sync the syntax.
call synID(v:lnum, 1, 1)
syntax sync fromstart
if synIDattr(synID(v:lnum, 1, 1), "name") !~ s:skip_syntax
if last_line !~ s:arrow
let split_line = split(last_line, '\zs')
let opened_symbol += count(split_line, '(') - count(split_line, ')')
let opened_symbol += count(split_line, '[') - count(split_line, ']')
let opened_symbol += count(split_line, '{') - count(split_line, '}')
end
" if start symbol is followed by a character, indent based on the
" whitespace after the symbol, otherwise use the default shiftwidth
if last_line =~ '\('.s:symbols_start.'\).'
let opened_prefix = matchlist(last_line, '\('.s:symbols_start.'\)\s*')[0]
let ind += (opened_symbol * strlen(opened_prefix))
else
let ind += (opened_symbol * &sw)
endif
if last_line =~ '^\s*\('.s:symbols_end.'\)' || last_line =~ s:indent_keywords
let ind += &sw
endif
if current_line =~ '^\s*\('.s:symbols_end.'\)'
let ind -= &sw
endif
if last_line =~ s:ending_with_assignment && opened_symbol == 0
let b:old_ind = indent(lnum)
let ind += &sw
end
" if line starts with pipeline
" and last line ends with a pipeline,
" align them
if last_line =~ '|>.*$' &&
\ current_line =~ s:starts_with_pipeline
let ind = float2nr(match(last_line, '|>') / &sw) * &sw
" if line starts with pipeline
" and last line is an attribution
" indents pipeline in same level as attribution
elseif current_line =~ s:starts_with_pipeline &&
\ last_line =~ '^[^=]\+=.\+$'
if !exists('b:old_ind') || b:old_ind == 0
let b:old_ind = indent(lnum)
end
let ind = float2nr(matchend(last_line, '=\s*[^ ]') / &sw) * &sw
endif
" if last line starts with pipeline
" and current line doesn't start with pipeline
" returns the indentation before the pipeline
if last_line =~ s:starts_with_pipeline &&
\ current_line !~ s:starts_with_pipeline
let ind = b:old_ind
endif
if current_line =~ s:deindent_keywords
let bslnum = searchpair(
\ s:pair_start,
\ s:pair_middle,
\ s:pair_end,
\ 'nbW',
\ s:block_skip
\ )
let ind = indent(bslnum)
endif
" indent case statements '->'
if current_line =~ s:arrow
let ind += &sw
endif
endif
return ind
endfunction endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
endif endif

View File

@@ -6,9 +6,9 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'erlang') == -1
" Contributors: Edwin Fine <efine145_nospam01 at usa dot net> " Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
" Pawel 'kTT' Salata <rockplayer.pl@gmail.com> " Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
" Ricardo Catalinas Jiménez <jimenezrick@gmail.com> " Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
" Last Update: 2017-Feb-28 " Last Update: 2013-Jul-21
" License: Vim license " License: Vim license
" URL: https://github.com/vim-erlang/vim-erlang-runtime " URL: https://github.com/hcs42/vim-erlang
" Note About Usage: " Note About Usage:
" This indentation script works best with the Erlang syntax file created by " This indentation script works best with the Erlang syntax file created by
@@ -528,9 +528,7 @@ endfunction
" ok. % IsLineAtomContinuation = false " ok. % IsLineAtomContinuation = false
function! s:IsLineAtomContinuation(lnum) function! s:IsLineAtomContinuation(lnum)
if has('syntax_items') if has('syntax_items')
let syn_name = synIDattr(synID(a:lnum, 1, 0), 'name') return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangQuotedAtom'
return syn_name =~# '^erlangQuotedAtom' ||
\ syn_name =~# '^erlangQuotedRecord'
else else
return 0 return 0
endif endif
@@ -684,7 +682,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol, lnum, i)
call s:Pop(a:stack) call s:Pop(a:stack)
if empty(a:stack) if empty(a:stack)
call s:Log(' Stack is ["when"], so LTI is in a guard -> return') call s:Log(' Stack is ["when"], so LTI is in a guard -> return')
return [1, a:stored_vcol + shiftwidth() + 2] return [1, a:stored_vcol + &sw + 2]
else else
return [1, s:UnexpectedToken(a:token, a:stack)] return [1, s:UnexpectedToken(a:token, a:stack)]
endif endif
@@ -693,7 +691,7 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol, lnum, i)
call s:Pop(a:stack) call s:Pop(a:stack)
if empty(a:stack) if empty(a:stack)
call s:Log(' Stack is ["->"], so LTI is in function body -> return') call s:Log(' Stack is ["->"], so LTI is in function body -> return')
return [1, a:stored_vcol + shiftwidth()] return [1, a:stored_vcol + &sw]
elseif a:stack[0] ==# ';' elseif a:stack[0] ==# ';'
call s:Pop(a:stack) call s:Pop(a:stack)
@@ -845,7 +843,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
elseif token ==# 'begin' elseif token ==# 'begin'
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
\stored_vcol, 'end', shiftwidth()) \stored_vcol, 'end', &sw)
if ret | return res | endif if ret | return res | endif
" case EXPR of BRANCHES end " case EXPR of BRANCHES end
@@ -896,11 +894,11 @@ function! s:ErlangCalcIndent2(lnum, stack)
elseif stack == ['->'] elseif stack == ['->']
call s:Log(' LTI is in a branch after ' . call s:Log(' LTI is in a branch after ' .
\'"of/receive/after/if/catch" -> return') \'"of/receive/after/if/catch" -> return')
return stored_vcol + shiftwidth() return stored_vcol + &sw
elseif stack == ['when'] elseif stack == ['when']
call s:Log(' LTI is in a guard after ' . call s:Log(' LTI is in a guard after ' .
\'"of/receive/after/if/catch" -> return') \'"of/receive/after/if/catch" -> return')
return stored_vcol + shiftwidth() return stored_vcol + &sw
else else
return s:UnexpectedToken(token, stack) return s:UnexpectedToken(token, stack)
endif endif
@@ -936,7 +934,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
if empty(stack) if empty(stack)
call s:Log(' LTI is in a condition; matching ' . call s:Log(' LTI is in a condition; matching ' .
\'"case/if/try/receive" found') \'"case/if/try/receive" found')
let stored_vcol = curr_vcol + shiftwidth() let stored_vcol = curr_vcol + &sw
elseif stack[0] ==# 'align_to_begin_element' elseif stack[0] ==# 'align_to_begin_element'
call s:Pop(stack) call s:Pop(stack)
let stored_vcol = curr_vcol let stored_vcol = curr_vcol
@@ -945,23 +943,23 @@ function! s:ErlangCalcIndent2(lnum, stack)
\'"case/if/try/receive" found') \'"case/if/try/receive" found')
call s:Pop(stack) call s:Pop(stack)
call s:Pop(stack) call s:Pop(stack)
let stored_vcol = curr_vcol + shiftwidth() let stored_vcol = curr_vcol + &sw
elseif stack[0] ==# '->' elseif stack[0] ==# '->'
call s:Log(' LTI is in a branch; matching ' . call s:Log(' LTI is in a branch; matching ' .
\'"case/if/try/receive" found') \'"case/if/try/receive" found')
call s:Pop(stack) call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * shiftwidth() let stored_vcol = curr_vcol + 2 * &sw
elseif stack[0] ==# 'when' elseif stack[0] ==# 'when'
call s:Log(' LTI is in a guard; matching ' . call s:Log(' LTI is in a guard; matching ' .
\'"case/if/try/receive" found') \'"case/if/try/receive" found')
call s:Pop(stack) call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * shiftwidth() + 2 let stored_vcol = curr_vcol + 2 * &sw + 2
endif endif
endif endif
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
\stored_vcol, 'end', shiftwidth()) \stored_vcol, 'end', &sw)
if ret | return res | endif if ret | return res | endif
elseif token ==# 'fun' elseif token ==# 'fun'
@@ -987,7 +985,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
" stack = ['when'] => LTI is in a guard " stack = ['when'] => LTI is in a guard
if empty(stack) if empty(stack)
call s:Log(' LTI is in a condition; matching "fun" found') call s:Log(' LTI is in a condition; matching "fun" found')
let stored_vcol = curr_vcol + shiftwidth() let stored_vcol = curr_vcol + &sw
elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';' elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';'
call s:Log(' LTI is in a condition; matching "fun" found') call s:Log(' LTI is in a condition; matching "fun" found')
call s:Pop(stack) call s:Pop(stack)
@@ -995,15 +993,15 @@ function! s:ErlangCalcIndent2(lnum, stack)
elseif stack[0] ==# '->' elseif stack[0] ==# '->'
call s:Log(' LTI is in a branch; matching "fun" found') call s:Log(' LTI is in a branch; matching "fun" found')
call s:Pop(stack) call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * shiftwidth() let stored_vcol = curr_vcol + 2 * &sw
elseif stack[0] ==# 'when' elseif stack[0] ==# 'when'
call s:Log(' LTI is in a guard; matching "fun" found') call s:Log(' LTI is in a guard; matching "fun" found')
call s:Pop(stack) call s:Pop(stack)
let stored_vcol = curr_vcol + 2 * shiftwidth() + 2 let stored_vcol = curr_vcol + 2 * &sw + 2
endif endif
let [ret, res] = s:BeginElementFound(stack, token, curr_vcol, let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
\stored_vcol, 'end', shiftwidth()) \stored_vcol, 'end', &sw)
if ret | return res | endif if ret | return res | endif
else else
" Pass: we have a function reference (e.g. "fun f/0") " Pass: we have a function reference (e.g. "fun f/0")
@@ -1277,7 +1275,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
" when A, " when A,
" LTI " LTI
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol, let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
\stored_vcol, shiftwidth()) \stored_vcol, &sw)
if ret | return res | endif if ret | return res | endif
else else
" Example: " Example:
@@ -1309,7 +1307,7 @@ function! s:ErlangCalcIndent2(lnum, stack)
" If LTI is between an 'after' and the corresponding " If LTI is between an 'after' and the corresponding
" 'end', then let's return " 'end', then let's return
let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol, let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
\stored_vcol, shiftwidth()) \stored_vcol, &sw)
if ret | return res | endif if ret | return res | endif
endif endif

View File

@@ -43,10 +43,6 @@ if exists("*GetErubyIndent")
finish finish
endif endif
" this file uses line continuations
let s:cpo_sav = &cpo
set cpo&vim
function! GetErubyIndent(...) function! GetErubyIndent(...)
" The value of a single shift-width " The value of a single shift-width
if exists('*shiftwidth') if exists('*shiftwidth')
@@ -97,7 +93,6 @@ function! GetErubyIndent(...)
let ind = ind + sw let ind = ind + sw
endif endif
if line !~# '^\s*<%' && line =~# '%>\s*$' && line !~# '^\s*end\>' if line !~# '^\s*<%' && line =~# '%>\s*$' && line !~# '^\s*end\>'
\ && synID(v:lnum, match(cline, '\S') + 1, 1) != hlID('htmlEndTag')
let ind = ind - sw let ind = ind - sw
endif endif
if cline =~# '^\s*[-=]\=%>\s*$' if cline =~# '^\s*[-=]\=%>\s*$'
@@ -106,9 +101,6 @@ function! GetErubyIndent(...)
return ind return ind
endfunction endfunction
let &cpo = s:cpo_sav
unlet! s:cpo_sav
" vim:set sw=2 sts=2 ts=8 noet: " vim:set sw=2 sts=2 ts=8 noet:
endif endif

View File

@@ -32,13 +32,13 @@ function! GetGoHTMLTmplIndent(lnum)
" If need to indent based on last line " If need to indent based on last line
let last_line = getline(a:lnum-1) let last_line = getline(a:lnum-1)
if last_line =~ '^\s*{{-\=\s*\%(if\|else\|range\|with\|define\|block\).*}}' if last_line =~ '^\s*{{\s*\%(if\|else\|range\|with\|define\|block\).*}}'
let ind += sw let ind += sw
endif endif
" End of FuncMap block " End of FuncMap block
let current_line = getline(a:lnum) let current_line = getline(a:lnum)
if current_line =~ '^\s*{{-\=\s*\%(else\|end\).*}}' if current_line =~ '^\s*{{\s*\%(else\|end\).*}}'
let ind -= sw let ind -= sw
endif endif

View File

@@ -13,10 +13,6 @@ if exists('b:did_indent')
finish finish
endif endif
if get(g:, 'haskell_indent_disable', 0)
finish
endif
let b:did_indent = 1 let b:did_indent = 1
if !exists('g:haskell_indent_if') if !exists('g:haskell_indent_if')
@@ -64,35 +60,18 @@ if !exists('g:haskell_indent_guard')
endif endif
setlocal indentexpr=GetHaskellIndent() setlocal indentexpr=GetHaskellIndent()
setlocal indentkeys=0},0),0],!^F,o,O,0=where,0=let,0=deriving,<space> setlocal indentkeys=0{,0},0(,0),0[,0],!^F,o,O,0\=,0=where,0=let,0=deriving,<space>
function! s:isInBlock(hlstack) function! s:isInBlock(hlstack)
return index(a:hlstack, 'haskellDelimiter') > -1 || index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1 || index(a:hlstack, 'haskellBlockComment') > -1 || index(a:hlstack, 'haskellPragma') > -1 return index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1
endfunction
function! s:stripComment(line)
if a:line =~ '^\s*--\(-*\s\+\|$\)'
return ''
else
let l:stripped = split(a:line, '-- ')
if len(l:stripped) > 1
return substitute(l:stripped[0], '\s*$', '', '')
else
return a:line
endif
endif
endfunction
function! s:isSYN(grp, line, col)
return index(s:getHLStack(a:line, a:col), a:grp) != -1
endfunction endfunction
function! s:getNesting(hlstack) function! s:getNesting(hlstack)
return filter(a:hlstack, 'v:val == "haskellBlock" || v:val == "haskellBrackets" || v:val == "haskellParens" || v:val == "haskellBlockComment" || v:val == "haskellPragma" ') return filter(a:hlstack, 'v:val == "haskellBlock" || v:val == "haskellBrackets" || v:val == "haskellParens"')
endfunction endfunction
function! s:getHLStack(line, col) function! s:getHLStack()
return map(synstack(a:line, a:col), 'synIDattr(v:val, "name")') return map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunction endfunction
" indent matching character " indent matching character
@@ -131,14 +110,14 @@ function! s:indentGuard(pos, prevline)
endfunction endfunction
function! GetHaskellIndent() function! GetHaskellIndent()
let l:hlstack = s:getHLStack(line('.'), col('.')) let l:hlstack = s:getHLStack()
" do not indent in strings and quasiquotes " do not indent in strings and quasiquotes
if index(l:hlstack, 'haskellQuasiQuote') > -1 || index(l:hlstack, 'haskellBlockComment') > -1 if index(l:hlstack, 'haskellQuasiQuote') > -1 || index(l:hlstack, 'haskellBlockComment') > -1
return -1 return -1
endif endif
let l:prevline = s:stripComment(getline(v:lnum - 1)) let l:prevline = getline(v:lnum - 1)
let l:line = getline(v:lnum) let l:line = getline(v:lnum)
" indent multiline strings " indent multiline strings
@@ -155,6 +134,11 @@ function! GetHaskellIndent()
return 0 return 0
endif endif
" comment indentation
if l:line =~ '^\s*--'
return match(l:prevline, '-- ')
endif
" { foo :: Int " { foo :: Int
" >>, " >>,
" "
@@ -162,21 +146,17 @@ function! GetHaskellIndent()
" ... " ...
" >>, " >>,
if l:line =~ '^\s*,' if l:line =~ '^\s*,'
if s:isInBlock(s:getHLStack(line('.'), col('.'))) if s:isInBlock(l:hlstack)
normal! 0 normal! 0
call search(',', 'cW') call search(',', 'cW')
let l:n = s:getNesting(s:getHLStack(line('.'), col('.'))) let l:n = s:getNesting(s:getHLStack())
call search('[([{]', 'bW') call search('[([{]', 'bW')
let l:cl = line('.')
let l:cc = col('.')
while l:n != s:getNesting(s:getHLStack(l:cl, l:cc)) || s:isSYN('haskellString', l:cl, l:cc) || s:isSYN('haskellChar', l:cl, l:cc) while l:n != s:getNesting(s:getHLStack())
call search('[([{]', 'bW') call search('[([{]', 'bW')
let l:cl = line('.')
let l:cc = col('.')
endwhile endwhile
return l:cc - 1 return col('.') - 1
else else
let l:s = s:indentGuard(match(l:line, ','), l:prevline) let l:s = s:indentGuard(match(l:line, ','), l:prevline)
if l:s > -1 if l:s > -1
@@ -212,20 +192,11 @@ function! GetHaskellIndent()
" >>>>y = 2 " >>>>y = 2
if l:prevline =~ '\C\<let\>\s\+.\+$' if l:prevline =~ '\C\<let\>\s\+.\+$'
if l:line =~ '\C^\s*\<let\>' if l:line =~ '\C^\s*\<let\>'
let l:s = match(l:prevline, '\C\<let\>') return match(l:prevline, '\C\<let\>')
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
return l:s
endif
elseif l:line =~ '\C^\s*\<in\>' elseif l:line =~ '\C^\s*\<in\>'
let l:s = match(l:prevline, '\C\<let\>') return match(l:prevline, '\C\<let\>') + g:haskell_indent_in
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
return l:s + g:haskell_indent_in
endif
else else
let l:s = match(l:prevline, '\C\<let\>') return match(l:prevline, '\C\<let\>') + g:haskell_indent_let
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
return l:s + g:haskell_indent_let
endif
endif endif
endif endif
@@ -245,49 +216,35 @@ function! GetHaskellIndent()
" where " where
" >>foo " >>foo
" "
if l:prevline =~ '\C\<where\>\s*$'
return match(l:prevline, '\S') + get(g:, 'haskell_indent_after_bare_where', &shiftwidth)
endif
" do " do
" >>foo " >>foo
" "
" foo = " foo =
" >>bar " >>bar
if l:prevline =~ '\C\(\<do\>\|=\)\s*$' if l:prevline =~ '\C\(\<where\>\|\<do\>\|=\)\s*$'
return match(l:prevline, '\S') + &shiftwidth return match(l:prevline, '\S') + &shiftwidth
endif endif
" do foo
" >>>bar
if l:prevline =~ '\C\<do\>\s\+\S\+.*$'
let l:s = match(l:prevline, '\C\<do\>')
if s:isSYN('haskellKeyword', v:lnum - 1, l:s + 1)
return l:s + g:haskell_indent_do
endif
endif
" case foo of
" >>bar -> quux
if l:prevline =~ '\C\<case\>.\+\<of\>\s*$'
if get(g:,'haskell_indent_case_alternative', 0)
return match(l:prevline, '\S') + &shiftwidth
else
return match(l:prevline, '\C\<case\>') + g:haskell_indent_case
endif
endif
"" where foo "" where foo
"" >>>>>>bar "" >>>>>>bar
if l:prevline =~ '\C\<where\>\s\+\S\+.*$' if l:prevline =~ '\C\<where\>\s\+\S\+.*$'
if l:line =~ '^\s*[=-]>\s' && l:prevline =~ ' :: ' if l:line =~ '^\s*[=-]>\s' && l:prevline =~ ' :: '
return match(l:prevline, ':: ') return match(l:prevline, ':: ')
else else
let l:s = match(l:prevline, '\C\<where\>') return match(l:prevline, '\C\<where\>') + g:haskell_indent_where
if s:isSYN('haskellWhere', v:lnum - 1, l:s + 1)
return l:s + g:haskell_indent_where
endif endif
endif endif
" do foo
" >>>bar
if l:prevline =~ '\C\<do\>\s\+\S\+.*$'
return match(l:prevline, '\C\<do\>') + g:haskell_indent_do
endif
" case foo of
" >>bar -> quux
if l:prevline =~ '\C\<case\>.\+\<of\>\s*$'
return match(l:prevline, '\C\<case\>') + g:haskell_indent_case
endif endif
" newtype Foo = Foo " newtype Foo = Foo
@@ -310,14 +267,6 @@ function! GetHaskellIndent()
endif endif
endif endif
" foo :: Int
" -> Int
" >>>>-> Int
"
" foo :: Monad m
" => Functor f
" >>>>=> Int
"
" foo :: Int " foo :: Int
" -> Int " -> Int
" foo x " foo x
@@ -326,12 +275,9 @@ function! GetHaskellIndent()
" :: Int " :: Int
" -> Int " -> Int
" foo x " foo x
if l:prevline =~ '^\s*[-=]>' if l:prevline =~ '^\s*[-=]>' && l:line !~ '^\s*[-=]>'
if l:line =~ '^\s*[-=]>'
return match(l:prevline, '[-=]')
else
if s:isInBlock(l:hlstack) if s:isInBlock(l:hlstack)
return match(l:prevline, '[^-=]') return match(l:prevline, '[^\s-=>]')
else else
let l:m = matchstr(l:line, '^\s*\zs\<\S\+\>\ze') let l:m = matchstr(l:line, '^\s*\zs\<\S\+\>\ze')
let l:l = l:prevline let l:l = l:prevline
@@ -339,8 +285,8 @@ function! GetHaskellIndent()
while v:lnum != l:c while v:lnum != l:c
" fun decl " fun decl
if l:l =~ ('^\s*' . l:m . '\(\s*::\|\n\s\+::\)')
let l:s = match(l:l, l:m) let l:s = match(l:l, l:m)
if l:s >= 0
if match(l:l, '\C^\s*\<default\>') > -1 if match(l:l, '\C^\s*\<default\>') > -1
return l:s - 8 return l:s - 8
else else
@@ -357,7 +303,6 @@ function! GetHaskellIndent()
return 0 return 0
endif endif
endif endif
endif
" | otherwise = ... " | otherwise = ...
" foo " foo
@@ -397,7 +342,7 @@ function! GetHaskellIndent()
" foo " foo
" >>{ " >>{
if l:line =~ '^\s*{ ' if l:line =~ '^\s*{' && l:prevline !~ '^{'
let l:s = match(l:prevline, '\S') let l:s = match(l:prevline, '\S')
if l:s >= 0 if l:s >= 0
return l:s + &shiftwidth return l:s + &shiftwidth
@@ -406,17 +351,12 @@ function! GetHaskellIndent()
" in foo " in foo
" where bar " where bar
"
" or
"
" foo
" >>where
if l:line =~ '\C^\s*\<where\>' if l:line =~ '\C^\s*\<where\>'
if match(l:prevline, '\C^\s\+in\s\+') == 0 if match(l:prevline, '\C^\s\+in\s\+') == 0
return match(l:prevline, 'in') - g:haskell_indent_in return match(l:prevline, 'in') - g:haskell_indent_in
endif endif
return match(l:prevline, '\S') + get(g:, 'haskell_indent_before_where', &shiftwidth) return match(l:prevline, '\S') + &shiftwidth
endif endif
" let x = 1 " let x = 1
@@ -483,8 +423,22 @@ function! GetHaskellIndent()
if l:line =~ '^\s*]' if l:line =~ '^\s*]'
return s:indentMatching(']') return s:indentMatching(']')
endif endif
"
" indent import
if l:line =~ '\C^\s*import'
return 0
endif
" do not reindent indented lines
if match(l:prevline, '\S') < match(l:line, '\S')
return -1 return -1
endif
if l:line !~ '^\s*[=-]>\s' && l:line =~ '^\s*[!#$%&*+./<>?@\\^|~-]\+'
return -1
endif
return match(l:prevline, '\S')
endfunction endfunction
endif endif

View File

@@ -42,7 +42,6 @@ setlocal indentkeys=o,O,*<Return>,<>>,{,},!^F
let s:tags = [] let s:tags = []
let s:no_tags = []
" [-- <ELEMENT ? - - ...> --] " [-- <ELEMENT ? - - ...> --]
call add(s:tags, 'a') call add(s:tags, 'a')
@@ -166,44 +165,6 @@ call add(s:tags, 'text')
call add(s:tags, 'textPath') call add(s:tags, 'textPath')
call add(s:tags, 'tref') call add(s:tags, 'tref')
call add(s:tags, 'tspan') call add(s:tags, 'tspan')
" Common self closing SVG elements
call add(s:no_tags, 'animate')
call add(s:no_tags, 'animateTransform')
call add(s:no_tags, 'circle')
call add(s:no_tags, 'ellipse')
call add(s:no_tags, 'feBlend')
call add(s:no_tags, 'feColorMatrix')
call add(s:no_tags, 'feComposite')
call add(s:no_tags, 'feConvolveMatrix')
call add(s:no_tags, 'feDisplacementMap')
call add(s:no_tags, 'feFlood')
call add(s:no_tags, 'feFuncR')
call add(s:no_tags, 'feFuncG')
call add(s:no_tags, 'feFuncB')
call add(s:no_tags, 'feFuncA')
call add(s:no_tags, 'feGaussianBlur')
call add(s:no_tags, 'feImage')
call add(s:no_tags, 'feMergeNode')
call add(s:no_tags, 'feMorphology')
call add(s:no_tags, 'feOffset')
call add(s:no_tags, 'fePointLight')
call add(s:no_tags, 'feSpotLight')
call add(s:no_tags, 'feTile')
call add(s:no_tags, 'feTurbulence')
call add(s:no_tags, 'hatchpath')
call add(s:no_tags, 'hkern')
call add(s:no_tags, 'image')
call add(s:no_tags, 'line')
call add(s:no_tags, 'mpath')
call add(s:no_tags, 'polygon')
call add(s:no_tags, 'polyline')
call add(s:no_tags, 'path')
call add(s:no_tags, 'rect')
call add(s:no_tags, 'solidColor')
call add(s:no_tags, 'stop')
call add(s:no_tags, 'use')
call add(s:no_tags, 'view')
call add(s:no_tags, 'vkern')
call add(s:tags, 'html') call add(s:tags, 'html')
call add(s:tags, 'head') call add(s:tags, 'head')
@@ -216,6 +177,8 @@ call add(s:tags, 'tr')
call add(s:tags, 'th') call add(s:tags, 'th')
call add(s:tags, 'td') call add(s:tags, 'td')
let s:no_tags = []
call add(s:no_tags, 'base') call add(s:no_tags, 'base')
call add(s:no_tags, 'link') call add(s:no_tags, 'link')
call add(s:no_tags, 'meta') call add(s:no_tags, 'meta')

View File

@@ -2,40 +2,26 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
" Vim indent file " Vim indent file
" Language: Javascript " Language: Javascript
" Maintainer: Chris Paul ( https://github.com/bounceme ) " Maintainer: vim-javascript community
" URL: https://github.com/pangloss/vim-javascript " URL: https://github.com/pangloss/vim-javascript
" Last Change: May 16, 2017 " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists('b:did_indent') if exists("b:did_indent")
finish finish
endif endif
let b:did_indent = 1 let b:did_indent = 1
" indent correctly if inside <script>
" vim/vim@690afe1 for the switch from cindent
let b:html_indent_script1 = 'inc'
" Now, set up our indentation expression and keys that trigger it. " Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetJavascriptIndent() setlocal indentexpr=GetJavascriptIndent()
setlocal autoindent nolisp nosmartindent setlocal nolisp
setlocal indentkeys+=0],0) setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e
" Testable with something like: setlocal cinoptions+=j1,J1
" vim -eNs "+filetype plugin indent on" "+syntax on" "+set ft=javascript" \
" "+norm! gg=G" '+%print' '+:q!' testfile.js \
" | diff -uBZ testfile.js -
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<' let b:undo_indent = 'setlocal indentexpr< indentkeys< cinoptions<'
" Regex of syntax group names that are or delimit string or are comments.
let b:syng_strcom = get(b:,'syng_strcom','string\|comment\|regex\|special\|doc\|template\%(braces\)\@!')
let b:syng_str = get(b:,'syng_str','string\|template\|special')
" template strings may want to be excluded when editing graphql:
" au! Filetype javascript let b:syng_str = '^\%(.*template\)\@!.*string\|special'
" au! Filetype javascript let b:syng_strcom = '^\%(.*template\)\@!.*string\|comment\|regex\|special\|doc'
" Only define the function once. " Only define the function once.
if exists('*GetJavascriptIndent') if exists("*GetJavascriptIndent")
finish finish
endif endif
@@ -44,417 +30,172 @@ set cpo&vim
" Get shiftwidth value " Get shiftwidth value
if exists('*shiftwidth') if exists('*shiftwidth')
function s:sw() func s:sw()
return shiftwidth() return shiftwidth()
endfunction endfunc
else else
function s:sw() func s:sw()
return &l:shiftwidth ? &l:shiftwidth : &l:tabstop return &sw
endfunction endfunc
endif endif
" Performance for forwards search(): start search at pos rather than masking let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*'
" matches before pos. let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:\C'
let s:z = has('patch-7.4.984') ? 'z' : '' " Regex of syntax group names that are or delimit string or are comments.
let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c'
" Regex of syntax group names that are strings or documentation.
let s:syng_comment = '\%(comment\|doc\)\c'
let s:syng_com = 'comment\|doc'
" Expression used to check whether we should skip a match with searchpair(). " Expression used to check whether we should skip a match with searchpair().
let s:skip_expr = "s:syn_at(line('.'),col('.')) =~? b:syng_strcom" let s:skip_expr = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : s:IsSyn(line('.'),col('.'),'')"
" searchpair() wrapper func s:lookForParens(start,end,flags,time)
if has('reltime')
function s:GetPair(start,end,flags,skip,time,...)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time)
endfunction
else
function s:GetPair(start,end,flags,skip,...)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)]))
endfunction
endif
function s:syn_at(l,c)
let pos = join([a:l,a:c],',')
if has_key(s:synId_cache,pos)
return s:synId_cache[pos]
endif
let s:synId_cache[pos] = synIDattr(synID(a:l,a:c,0),'name')
return s:synId_cache[pos]
endfunction
function s:parse_cino(f)
let [cin, divider, n] = [strridx(&cino,a:f), 0, '']
if cin == -1
return
endif
let [sign, cstr] = &cino[cin+1] ==# '-' ? [-1, &cino[cin+2:]] : [1, &cino[cin+1:]]
for c in split(cstr,'\zs')
if c ==# '.' && !divider
let divider = 1
elseif c ==# 's'
if n is ''
let n = s:W
else
let n = str2nr(n) * s:W
endif
break
elseif c =~ '\d'
let [n, divider] .= [c, 0]
else
break
endif
endfor
return sign * str2nr(n) / max([str2nr(divider),1])
endfunction
" Optimized {skip} expr, used only once per GetJavascriptIndent() call
function s:skip_func()
if s:topCol == 1 || line('.') < s:scriptTag
return {} " E728, used as limit condition for loops and searchpair()
endif
let s:topCol = col('.')
if getline('.') =~ '\%<'.s:topCol.'c\/.\{-}\/\|\%>'.s:topCol.'c[''"]\|\\$'
if eval(s:skip_expr)
let s:topCol = 0
endif
return !s:topCol
elseif s:checkIn || search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn)
let s:checkIn = eval(s:skip_expr)
if s:checkIn
let s:topCol = 0
endif
endif
let s:looksyn = line('.')
return s:checkIn
endfunction
function s:alternatePair()
let [l:pos, pat, l:for] = [getpos('.'), '[][(){};]', 3]
while search('\m'.pat,'bW')
if s:skip_func() | continue | endif
let idx = stridx('])};',s:looking_at())
if idx is 3
if l:for is 1
return s:GetPair('{','}','bW','s:skip_func()',2000) > 0 || setpos('.',l:pos)
endif
let [pat, l:for] = ['[{}();]', l:for - 1]
elseif idx + 1
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000) < 1
break
endif
else
return
endif
endwhile
call setpos('.',l:pos)
endfunction
function s:looking_at()
return getline('.')[col('.')-1]
endfunction
function s:token()
return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at()
endfunction
function s:previous_token()
let l:pos = getpos('.')
if search('\m\k\{1,}\|\S','ebW')
if (strpart(getline('.'),col('.')-2,2) == '*/' || line('.') != l:pos[1] &&
\ getline('.')[:col('.')-1] =~ '\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com
while search('\m\S\ze\_s*\/[/*]','bW')
if s:syn_at(line('.'),col('.')) !~? s:syng_com
return s:token()
endif
endwhile
else
return s:token()
endif
call setpos('.',l:pos)
endif
return ''
endfunction
for s:__ in ['__previous_token','__IsBlock']
function s:{s:__}(...)
let l:pos = getpos('.')
try try
return call('s:'.matchstr(expand('<sfile>'),'.*__\zs\w\+'),a:000) return searchpair(a:start,'',a:end,a:flags,s:skip_expr,0,a:time)
catch catch /E118/
finally return searchpair(a:start,'',a:end,a:flags,0,0)
call setpos('.',l:pos)
endtry endtry
endfunction endfunc
endfor
function s:expr_col() let s:line_term = '\s*\%(\%(:\@<!\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$'
if getline('.')[col('.')-2] == ':'
return 1
endif
let [bal, l:pos] = [0, getpos('.')]
while bal < 1 && search('\m[{}?:;]','bW',s:scriptTag)
if eval(s:skip_expr)
continue
elseif s:looking_at() == ':'
let bal -= strpart(getline('.'),col('.')-2,3) !~ '::'
elseif s:looking_at() == '?'
let bal += 1
elseif s:looking_at() == '{' && getpos('.')[1:2] != b:js_cache[1:] && !s:IsBlock()
let bal = 1
elseif s:looking_at() != '}' || s:GetPair('{','}','bW',s:skip_expr,200) < 1
break
endif
endwhile
call setpos('.',l:pos)
return max([bal,0])
endfunction
" configurable regexes that define continuation lines, not including (, {, or [. " configurable regexes that define continuation lines, not including (, {, or [.
let s:opfirst = '^' . get(g:,'javascript_opfirst', if !exists('g:javascript_opfirst')
\ '\C\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') let g:javascript_opfirst = '\%([,:?^%]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\||\|&\|in\%(stanceof\)\=\>\)\C'
let s:continuation = get(g:,'javascript_continuation', endif
\ '\C\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$' let g:javascript_opfirst = s:line_pre . g:javascript_opfirst
function s:continues(ln,con) if !exists('g:javascript_continuation')
let token = matchstr(a:con[-15:],s:continuation) let g:javascript_continuation = '\%([*,.?:^%]\|+\@<!+\|-\@<!-\|\*\@<!\/\|=\||\|&\|\<in\%(stanceof\)\=\)\C'
if strlen(token) endif
call cursor(a:ln,strlen(a:con)) let g:javascript_continuation .= s:line_term
if token =~ '[/>]'
return s:syn_at(a:ln,col('.')) !~? (token == '>' ? 'jsflow\|^html' : 'regex') function s:Onescope(lnum,text,add)
elseif token =~ '\l' return a:text =~ '\%(\<else\|\<do\|=>' . (a:add ? '\|\<try\|\<finally' : '' ) . '\)\C' . s:line_term ||
return s:previous_token() != '.' \ (a:add && a:text =~ s:line_pre . s:line_term && getline(s:PrevCodeLine(a:lnum - 1)) =~ ')' . s:line_term) ||
elseif token == ':' \ (cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1 &&
return s:expr_col() \ s:lookForParens('(', ')', 'cbW', 100) > 0 &&
endif \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)\C' :
return 1 \ '\<\%(for\%(\s+each\)\=\|if\|let\|switch\|while\|with\)\C') . '\_s*\%#','bW')) &&
endif \ (a:add || (expand("<cword>") == 'while' ? !s:lookForParens('\<do\>\C', '\<while\>\C','bW',100) : 1))
endfunction endfunction
function s:Trim(ln) " Auxiliary Functions {{{2
let pline = substitute(getline(a:ln),'\s*$','','')
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')]) " Check if the character at lnum:col is inside a string, comment, or is ascii.
while l:max != -1 && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com function s:IsSyn(lnum, col, reg)
let pline = pline[: l:max] return synIDattr(synID(a:lnum, a:col, 1), 'name') =~? (a:reg != '' ? a:reg : s:syng_strcom)
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
let pline = substitute(pline[:-2],'\s*$','','')
endwhile
return pline
endfunction endfunction
" Find line above 'lnum' that isn't empty or in a comment " Find line above 'lnum' that isn't empty, in a comment, or in a string.
function s:PrevCodeLine(lnum) function s:PrevCodeLine(lnum)
let l:n = prevnonblank(a:lnum) let lnum = prevnonblank(a:lnum)
while l:n while lnum > 0
if getline(l:n) =~ '^\s*\/[/*]' if !s:IsSyn(lnum, matchend(getline(lnum), '^\s*[^''"]'),'')
if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&
\ s:syn_at(l:n,1) =~? b:syng_str
break
endif
let l:n = prevnonblank(l:n-1)
elseif stridx(getline(l:n), '*/') + 1 && s:syn_at(l:n,1) =~? s:syng_com
let l:pos = getpos('.')
call cursor(l:n,1)
let l:n = search('\m\S\_s*\/\*','nbW')
call setpos('.',l:pos)
else
break break
endif endif
let lnum = prevnonblank(lnum - 1)
endwhile endwhile
return l:n return lnum
endfunction endfunction
" Check if line 'lnum' has a balanced amount of parentheses. " Check if line 'lnum' has more opening brackets than closing ones.
function s:Balanced(lnum) function s:LineHasOpeningBrackets(lnum)
let l:open = 0 let open_0 = 0
let l:line = getline(a:lnum) let open_2 = 0
let pos = match(l:line, '[][(){}]', 0) let open_4 = 0
let line = getline(a:lnum)
let pos = match(line, '[][(){}]', 0)
let last = 0
while pos != -1 while pos != -1
if s:syn_at(a:lnum,pos + 1) !~? b:syng_strcom if !s:IsSyn(a:lnum, pos + 1, '')
let l:open += match(' ' . l:line[pos],'[[({]') let idx = stridx('(){}[]', line[pos])
if l:open < 0 if idx % 2 == 0
return let open_{idx} = open_{idx} + 1
endif let last = pos
endif
let pos = match(l:line, (l:open ?
\ '['.matchstr(['][','()','{}'],l:line[pos]).']' :
\ '[][(){}]'), pos + 1)
endwhile
return !l:open
endfunction
function s:OneScope(lnum)
let pline = s:Trim(a:lnum)
call cursor(a:lnum,strlen(pline))
let kw = 'else do'
if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
if s:previous_token() =~# '^\%(await\|each\)$'
call s:previous_token()
let kw = 'for'
else else
let kw = 'for if let while with' let open_{idx - 1} = open_{idx - 1} - 1
endif endif
endif endif
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 && let pos = match(line, '[][(){}]', pos + 1)
\ s:__previous_token() != '.' && !s:doWhile()
endfunction
function s:doWhile()
if expand('<cword>') ==# 'while'
let [bal, l:pos] = [0, getpos('.')]
call search('\m\<','cbW')
while bal < 1 && search('\m\C[{}]\|\<\%(do\|while\)\>','bW')
if eval(s:skip_expr)
continue
elseif s:looking_at() ==# 'd'
let bal += s:__IsBlock(1)
elseif s:looking_at() ==# 'w'
let bal -= s:__previous_token() != '.'
elseif s:looking_at() != '}' || s:GetPair('{','}','bW',s:skip_expr,200) < 1
break
endif
endwhile endwhile
call setpos('.',l:pos) return [(open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) .
return max([bal,0]) \ (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)), last]
endif
endfunction endfunction
" }}}
" returns braceless levels started by 'i' and above lines * &sw. 'num' is the
" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is
" a continued expression, which could have started in a braceless context
function s:iscontOne(i,num,cont)
let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0]
let pind = a:num ? indent(l:num) + s:W : 0
let ind = indent(l:i) + (a:cont ? 0 : s:W)
while l:i >= l:num && (ind > pind || l:i == l:num)
if indent(l:i) < ind && s:OneScope(l:i)
let bL += s:W
let l:i = line('.')
elseif !a:cont || bL || ind < indent(a:i)
break
endif
let ind = min([ind, indent(l:i)])
let l:i = s:PrevCodeLine(l:i - 1)
endwhile
return bL
endfunction
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
function s:IsBlock(...)
if a:0 || s:looking_at() == '{'
let l:n = line('.')
let char = s:previous_token()
if match(s:stack,'\cxml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx'
return char != '{'
elseif char =~ '\k'
if char ==# 'type'
return s:__previous_token() !~# '^\%(im\|ex\)port$'
endif
return index(split('return const let import export extends yield default delete var await void typeof throw case new of in instanceof')
\ ,char) < (line('.') != l:n) || s:__previous_token() == '.'
elseif char == '>'
return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? 'jsflow\|^html'
elseif char == '*'
return s:__previous_token() == ':'
elseif char == ':'
return !s:expr_col()
elseif char == '/'
return s:syn_at(line('.'),col('.')) =~? 'regex'
endif
return char !~ '[=~!<,.?^%|&([]' &&
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
endif
endfunction
function GetJavascriptIndent() function GetJavascriptIndent()
let b:js_cache = get(b:,'js_cache',[0,0,0]) if !exists('b:js_cache')
let s:synId_cache = {} let b:js_cache = [0,0,0]
end
" Get the current line. " Get the current line.
call cursor(v:lnum,1) let line = getline(v:lnum)
let l:line = getline('.') " previous nonblank line number
" use synstack as it validates syn state and works in an empty line let prevline = prevnonblank(v:lnum - 1)
let s:stack = map(synstack(v:lnum,1),"synIDattr(v:val,'name')") " previous line of code
let syns = get(s:stack,-1,'') let lnum = s:PrevCodeLine(v:lnum - 1)
if lnum == 0
return 0
endif
" start with strings,comments,etc. " start with strings,comments,etc.{{{2
if syns =~? s:syng_com if (line !~ '^[''"`]' && s:IsSyn(v:lnum,1,'string\|template')) ||
if l:line =~ '^\s*\*' \ (line !~ '^\s*[/*]' && s:IsSyn(v:lnum,1,s:syng_comment))
return -1
endif
if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsSyn(v:lnum,1,s:syng_comment)
return cindent(v:lnum) return cindent(v:lnum)
elseif l:line !~ '^\s*\/[/*]'
return -1
endif
elseif syns =~? b:syng_str
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
let b:js_cache[0] = v:lnum
endif
return -1
endif
let l:lnum = s:PrevCodeLine(v:lnum - 1)
if !l:lnum
return
endif endif
let l:line = substitute(l:line,'^\s*','','') if (line =~ s:expr_case)
if l:line[:1] == '/*' let cpo_switch = &cpo
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','') set cpo+=%
endif let ind = cindent(v:lnum)
if l:line =~ '^\/[/*]' let &cpo = cpo_switch
let l:line = '' return ind
endif endif
"}}}
" the containing paren, bracket, or curly. Many hacks for performance " the containing paren, bracket, curly
let [ s:scriptTag, idx ] = [ get(get(b:,'hi_indent',{}),'blocklnr'), let pcounts = [0]
\ index([']',')','}'],l:line[0]) ] if b:js_cache[0] >= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] &&
if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0][0] !~ '2')
\ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) let num = pcounts[0][0] =~ '1' ? lnum : b:js_cache[1]
call call('cursor',b:js_cache[2] ? b:js_cache[1:] : [0,0]) if pcounts[0][0] =~'1'
call cursor(lnum,pcounts[0][1])
end
else else
let [s:looksyn, s:checkIn, s:topCol] = [v:lnum - 1, 0, 0] call cursor(v:lnum,1)
if idx + 1 let syns = synIDattr(synID(v:lnum, 1, 1), 'name')
call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000) if line[0] =~ '\s' && syns != ''
elseif getline(v:lnum) !~ '^\S' && syns =~? 'block' let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] :
call s:GetPair('{','}','bW','s:skip_func()',2000) \ ['(\|{\|\[',')\|}\|\]']
let num = s:lookForParens(pattern[0],pattern[1],'bW',2000)
else else
call s:alternatePair() let num = s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000)
endif end
endif end
let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')]
let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [s:scriptTag,0] : getpos('.')[1:2]) " most significant part
let num = b:js_cache[1] if line =~ s:line_pre . '[])}]'
return indent(num)
end
let inb = num == 0 ? 1 : s:Onescope(num, strpart(getline(num),0,b:js_cache[2] - 1),1)
let switch_offset = (!inb || num == 0) || expand("<cword>") != 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() :
\ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1))
if ((line =~ g:javascript_opfirst ||
\ (getline(lnum) =~ g:javascript_continuation && getline(lnum) !~ s:expr_case)) &&
\ inb) || (s:Onescope(lnum,getline(lnum),0) && line !~ s:line_pre . '{')
return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset
elseif num > 0
return indent(num) + s:sw() + switch_offset
end
let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0]
if !b:js_cache[2] || s:IsBlock()
let ilnum = line('.')
let pline = s:Trim(l:lnum)
if b:js_cache[2] && s:looking_at() == ')' && s:GetPair('(',')','bW',s:skip_expr,100) > 0
let num = ilnum == num ? line('.') : num
if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.'
let switch_offset = &cino !~ ':' ? s:W : max([-indent(num),s:parse_cino(':')])
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
return indent(num) + switch_offset
endif
endif
endif
if idx < 0 && pline[-1:] !~ '[{;]'
let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W
let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp)
let bL -= (bL && l:line[0] == '{') * s:W
endif
elseif idx < 0 && getline(b:js_cache[1])[b:js_cache[2]-1] == '(' && &cino =~ '('
let pval = s:parse_cino('(')
return !pval || !search('\m\S','nbW',num) && !s:parse_cino('U') ?
\ (s:parse_cino('w') ? 0 : -!!search('\m\S','W'.s:z,num)) + virtcol('.') :
\ max([indent('.') + pval + s:GetPair('(',')','nbrmW',s:skip_expr,100,num) * s:W,0])
endif
" main return
if l:line =~ '^[])}]\|^|}'
return max([indent(num),0])
elseif num
return indent(num) + s:W + switch_offset + bL + isOp
endif
return bL + isOp
endfunction endfunction
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save

View File

@@ -1,26 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
if exists('b:did_indent')
finish
endif
runtime! indent/coffee.vim
let b:did_indent = 1
setlocal indentexpr=GetLitCoffeeIndent()
if exists('*GetLitCoffeeIndent')
finish
endif
function GetLitCoffeeIndent()
if searchpair('^ \|\t', '', '$', 'bWnm') > 0
return GetCoffeeIndent(v:lnum)
else
return -1
endif
endfunc
endif

131
indent/perl6.vim Normal file
View File

@@ -0,0 +1,131 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'perl') == -1
" Vim indent file
" Language: Perl 6
" Maintainer: vim-perl <vim-perl@googlegroups.com>
" Homepage: http://github.com/vim-perl/vim-perl
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
" Last Change: {{LAST_CHANGE}}
" Contributors: Andy Lester <andy@petdance.com>
" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
"
" Adapted from indent/perl.vim by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
" Suggestions and improvements by :
" Aaron J. Sherman (use syntax for hints)
" Artem Chuprina (play nice with folding)
" TODO:
" This file still relies on stuff from the Perl 5 syntax file, which Perl 6
" does not use.
"
" Things that are not or not properly indented (yet) :
" - Continued statements
" print "foo",
" "bar";
" print "foo"
" if bar();
" - Multiline regular expressions (m//x)
" (The following probably needs modifying the perl syntax file)
" - qw() lists
" - Heredocs with terminators that don't match \I\i*
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
" Is syntax highlighting active ?
let b:indent_use_syntax = has("syntax")
setlocal indentexpr=GetPerl6Indent()
" we reset it first because the Perl 5 indent file might have been loaded due
" to a .pl/pm file extension, and indent files don't clean up afterwards
setlocal indentkeys&
setlocal indentkeys+=0=,0),0],0>,0»,0=or,0=and
if !b:indent_use_syntax
setlocal indentkeys+=0=EO
endif
let s:cpo_save = &cpo
set cpo-=C
function! GetPerl6Indent()
" Get the line to be indented
let cline = getline(v:lnum)
" Indent POD markers to column 0
if cline =~ '^\s*=\L\@!'
return 0
endif
" Get current syntax item at the line's first char
let csynid = ''
if b:indent_use_syntax
let csynid = synIDattr(synID(v:lnum,1,0),"name")
endif
" Don't reindent POD and heredocs
if csynid =~ "^p6Pod"
return indent(v:lnum)
endif
" Now get the indent of the previous perl line.
" Find a non-blank line above the current line.
let lnum = prevnonblank(v:lnum - 1)
" Hit the start of the file, use zero indent.
if lnum == 0
return 0
endif
let line = getline(lnum)
let ind = indent(lnum)
" Skip heredocs, POD, and comments on 1st column
if b:indent_use_syntax
let skippin = 2
while skippin
let synid = synIDattr(synID(lnum,1,0),"name")
if (synid =~ "^p6Pod" || synid =~ "p6Comment")
let lnum = prevnonblank(lnum - 1)
if lnum == 0
return 0
endif
let line = getline(lnum)
let ind = indent(lnum)
let skippin = 1
else
let skippin = 0
endif
endwhile
endif
if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$'
let ind = ind + &sw
endif
if cline =~ '^\s*[)}\]»>]'
let ind = ind - &sw
endif
" Indent lines that begin with 'or' or 'and'
if cline =~ '^\s*\(or\|and\)\>'
if line !~ '^\s*\(or\|and\)\>'
let ind = ind + &sw
endif
elseif line =~ '^\s*\(or\|and\)\>'
let ind = ind - &sw
endif
return ind
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
endif

View File

@@ -1,59 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'plantuml') == -1
if exists('b:did_indent')
finish
endif
let b:did_indent = 1
setlocal indentexpr=GetPlantUMLIndent()
setlocal indentkeys=o,O,<CR>,<:>,!^F,0end,0else,}
" only define the indent code once
if exists('*GetPlantUMLIndent')
finish
endif
let s:incIndent =
\ '^\s*\%(loop\|alt\|opt\|group\|critical\|else\|legend\|box\|if\|while\)\>\|' .
\ '^\s*ref\>[^:]*$\|' .
\ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' .
\ '^\s*title\s*$\|' .
\ '^\s*skinparam\>.*{\s*$\|' .
\ '^\s*\%(state\|class\|partition\|rectangle\|enum\|interface\|namespace\)\>.*{'
let s:decIndent = '^\s*\%(end\|else\|}\)'
function! GetPlantUMLIndent(...) abort
"for current line, use arg if given or v:lnum otherwise
let clnum = a:0 ? a:1 : v:lnum
if !s:insidePlantUMLTags(clnum)
return indent(clnum)
endif
let pnum = prevnonblank(clnum-1)
let pindent = indent(pnum)
let pline = getline(pnum)
let cline = getline(clnum)
if cline =~ s:decIndent
if pline =~ s:incIndent
return pindent
else
return pindent - shiftwidth()
endif
elseif pline =~ s:incIndent
return pindent + shiftwidth()
endif
return pindent
endfunction
function! s:insidePlantUMLTags(lnum) abort
call cursor(a:lnum, 1)
return search('@startuml', 'Wbn') && search('@enduml', 'Wn')
endfunction
endif

View File

@@ -1,16 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'racket') == -1
" Language: Racket
" Maintainer: Will Langstroth <will@langstroth.com>
" URL: http://github.com/wlangstroth/vim-racket
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal ai nosi
let b:undo_indent = "setl ai< si<"
endif

File diff suppressed because it is too large Load Diff

42
indent/sass.vim Normal file
View File

@@ -0,0 +1,42 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haml') == -1
" Vim indent file
" Language: Sass
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2010 May 21
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal autoindent sw=2 et
setlocal indentexpr=GetSassIndent()
setlocal indentkeys=o,O,*<Return>,<:>,!^F
" Only define the function once.
if exists("*GetSassIndent")
finish
endif
let s:property = '^\s*:\|^\s*[[:alnum:]#{}-]\+\%(:\|\s*=\)'
let s:extend = '^\s*\%(@extend\|@include\|+\)'
function! GetSassIndent()
let lnum = prevnonblank(v:lnum-1)
let line = substitute(getline(lnum),'\s\+$','','')
let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','')
let lastcol = strlen(line)
let line = substitute(line,'^\s\+','','')
let indent = indent(lnum)
let cindent = indent(v:lnum)
if line !~ s:property && line !~ s:extend && cline =~ s:property
return indent + (exists('*shiftwidth') ? shiftwidth() : &sw)
else
return -1
endif
endfunction
" vim:set sw=2:
endif

View File

@@ -378,17 +378,12 @@ function! GetScalaIndent()
let prevline = scala#GetLine(prevlnum) let prevline = scala#GetLine(prevlnum)
let curlnum = v:lnum let curlnum = v:lnum
let curline = scala#GetLine(curlnum) let curline = scala#GetLine(curlnum)
if get(g:, 'scala_scaladoc_indent', 0)
let star_indent = 2
else
let star_indent = 1
end
if prevline =~ '^\s*/\*\*' if prevline =~ '^\s*/\*\*'
if prevline =~ '\*/\s*$' if prevline =~ '\*/\s*$'
return ind return ind
else else
return ind + star_indent return ind + 1
endif endif
endif endif
@@ -543,7 +538,7 @@ function! GetScalaIndent()
if prevline =~ '^\s*\*/' if prevline =~ '^\s*\*/'
\ || prevline =~ '*/\s*$' \ || prevline =~ '*/\s*$'
call scala#ConditionalConfirm("18") call scala#ConditionalConfirm("18")
let ind = ind - star_indent let ind = ind - 1
endif endif
if scala#LineEndsInIncomplete(prevline) if scala#LineEndsInIncomplete(prevline)

16
indent/scss.vim Normal file
View File

@@ -0,0 +1,16 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haml') == -1
" Vim indent file
" Language: SCSS
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2010 Jul 26
if exists("b:did_indent")
finish
endif
runtime! indent/css.vim
" vim:set sw=2:
endif

View File

@@ -1,48 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal nolisp
setlocal autoindent
setlocal indentexpr=TerraformIndent(v:lnum)
setlocal indentkeys+=<:>,0=},0=)
if exists("*TerraformIndent")
finish
endif
function! TerraformIndent(lnum)
" previous non-blank line
let prevlnum = prevnonblank(a:lnum-1)
" beginning of file?
if prevlnum == 0
return 0
endif
" previous line without comments
let prevline = substitute(getline(prevlnum), '//.*$', '', '')
let previndent = indent(prevlnum)
let thisindent = previndent
" block open?
if prevline =~ '[\[{]\s*$'
let thisindent += &sw
endif
" current line without comments
let thisline = substitute(getline(a:lnum), '//.*$', '', '')
" block close?
if thisline =~ '^\s*[\]}]'
let thisindent -= &sw
endif
return thisindent
endfunction
endif

View File

@@ -1,80 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'twig') == -1
if exists("b:ran_once")
finish
endif
let b:ran_once = 1
let s:baseIndentExpr=&indentexpr
setlocal indentexpr=GetTwigIndent(v:lnum)
fun! GetTwigIndent(currentLineNumber)
let currentLine = getline(a:currentLineNumber)
let previousLineNumber = prevnonblank(a:currentLineNumber - 1)
let previousLine = getline(previousLineNumber)
if (previousLine =~ s:startStructures || previousLine =~ s:middleStructures) && (currentLine !~ s:endStructures && currentLine !~ s:middleStructures)
return indent(previousLineNumber) + &shiftwidth
elseif currentLine =~ s:endStructures || currentLine =~ s:middleStructures
let previousOpenStructureNumber = s:FindPreviousOpenStructure(a:currentLineNumber)
let previousOpenStructureLine = getline(previousOpenStructureNumber)
return indent(previousOpenStructureNumber)
endif
return s:CallBaseIndent()
endf
function! s:CallBaseIndent()
exe 'redir => s:outputOfBaseIndent'
exe 'silent echo ' . s:baseIndentExpr
exe 'redir END'
return split(s:outputOfBaseIndent)[0]
endf
function! s:FindPreviousOpenStructure(lineNumber)
let countOpen = 0
let countClosed = 0
let lineNumber = a:lineNumber
while lineNumber != 1 && countOpen <= countClosed
let lineNumber -= 1
let currentLine = getline(lineNumber)
if currentLine =~ s:startStructures
let countOpen += 1
elseif currentLine =~ s:endStructures
let countClosed += 1
endif
endwhile
return lineNumber
endfunction
function! s:StartStructure(name)
return '^\s*{%\s*' . a:name . '.*%}'
endfunction
function! s:EndStructure(name)
return '^\s*{%\s*end' . a:name . '.*%}'
endfunction
function! s:Map(Fun, list)
if len(a:list) == 0
return []
else
return [a:Fun(a:list[0])] + s:Map(a:Fun, a:list[1:])
endif
endfunction
fun! s:BuildStructures()
let structures = ['if','for','block']
let mStructures = ['elseif','else']
let s:startStructures = join(s:Map(function('s:StartStructure'), structures), '\|')
let s:endStructures = join(s:Map(function('s:EndStructure'), structures), '\|')
let s:middleStructures = join(s:Map(function('s:StartStructure'), mStructures), '\|')
endfun
call s:BuildStructures()
endif

View File

@@ -2,362 +2,504 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'typescript') ==
" Vim indent file " Vim indent file
" Language: Typescript " Language: Typescript
" Acknowledgement: Almost direct copy from https://github.com/pangloss/vim-javascript " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org
" 0. Initialization {{{1
" =================
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists('b:did_indent') || get(g:, 'typescript_indent_disable', 0) if exists("b:did_indent")
finish finish
endif endif
let b:did_indent = 1 let b:did_indent = 1
setlocal nosmartindent
" Now, set up our indentation expression and keys that trigger it. " Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetTypescriptIndent() setlocal indentexpr=GetTypescriptIndent()
setlocal autoindent nolisp nosmartindent setlocal formatexpr=Fixedgq(v:lnum,v:count)
setlocal indentkeys+=0],0) setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
" Only define the function once. " Only define the function once.
if exists('*GetTypescriptIndent') if exists("*GetTypescriptIndent")
finish finish
endif endif
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim set cpo&vim
" Get shiftwidth value " 1. Variables {{{1
if exists('*shiftwidth') " ============
function s:sw()
return shiftwidth()
endfunction
else
function s:sw()
return &sw
endfunction
endif
" searchpair() wrapper let s:ts_keywords = '^\s*\(break\|case\|catch\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)'
if has('reltime')
function s:GetPair(start,end,flags,skip,time,...)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time)
endfunction
else
function s:GetPair(start,end,flags,skip,...)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)]))
endfunction
endif
" Regex of syntax group names that are or delimit string or are comments. " Regex of syntax group names that are or delimit string or are comments.
let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!' let s:syng_strcom = 'string\|regex\|comment\c'
let s:syng_str = 'string\|template\|special'
let s:syng_com = 'comment\|doc' " Regex of syntax group names that are strings.
let s:syng_string = 'regex\c'
" Regex of syntax group names that are strings or documentation.
let s:syng_multiline = 'comment\c'
" Regex of syntax group names that are line comment.
let s:syng_linecom = 'linecomment\c'
" Expression used to check whether we should skip a match with searchpair(). " Expression used to check whether we should skip a match with searchpair().
let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'"
function s:skip_func() let s:line_term = '\s*\%(\%(\/\/\).*\)\=$'
if !s:free || search('\m`\|\${\|\*\/','nW',s:looksyn)
let s:free = !eval(s:skip_expr) " Regex that defines continuation lines, not including (, {, or [.
let s:looksyn = line('.') let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\|[^=]=[^=].*,\)' . s:line_term
return !s:free
endif " Regex that defines continuation lines.
let s:looksyn = line('.') " TODO: this needs to deal with if ...: and so on
return getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$' && let s:msl_regex = s:continuation_regex
\ eval(s:skip_expr)
let s:one_line_scope_regex = '\<\%(if\|else\|for\|while\)\>[^{;]*' . s:line_term
" Regex that defines blocks.
let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
let s:var_stmt = '^\s*var'
let s:comma_first = '^\s*,'
let s:comma_last = ',\s*$'
let s:ternary = '^\s\+[?|:]'
let s:ternary_q = '^\s\+?'
" 2. Auxiliary Functions {{{1
" ======================
" Check if the character at lnum:col is inside a string, comment, or is ascii.
function s:IsInStringOrComment(lnum, col)
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
endfunction endfunction
function s:alternatePair(stop) " Check if the character at lnum:col is inside a string.
let pos = getpos('.')[1:2] function s:IsInString(lnum, col)
while search('\m[][(){}]','bW',a:stop) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
if !s:skip_func() endfunction
let idx = stridx('])}',s:looking_at())
if idx + 1 " Check if the character at lnum:col is inside a multi-line comment.
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) <= 0 function s:IsInMultilineComment(lnum, col)
return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline
endfunction
" Check if the character at lnum:col is a line comment.
function s:IsLineComment(lnum, col)
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_linecom
endfunction
" Find line above 'lnum' that isn't empty, in a comment, or in a string.
function s:PrevNonBlankNonString(lnum)
let in_block = 0
let lnum = prevnonblank(a:lnum)
while lnum > 0
" Go in and out of blocks comments as necessary.
" If the line isn't empty (with opt. comment) or in a string, end search.
let line = getline(lnum)
if line =~ '/\*'
if in_block
let in_block = 0
else
break break
endif endif
else elseif !in_block && line =~ '\*/'
return let in_block = 1
endif elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line)))
endif
endwhile
call call('cursor',pos)
endfunction
function s:save_pos(f,...)
let l:pos = getpos('.')[1:2]
let ret = call(a:f,a:000)
call call('cursor',l:pos)
return ret
endfunction
function s:syn_at(l,c)
return synIDattr(synID(a:l,a:c,0),'name')
endfunction
function s:looking_at()
return getline('.')[col('.')-1]
endfunction
function s:token()
return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at()
endfunction
function s:previous_token()
let l:n = line('.')
if (s:looking_at() !~ '\k' || search('\m\<','cbW')) && search('\m\S','bW')
if (getline('.')[col('.')-2:col('.')-1] == '*/' || line('.') != l:n &&
\ getline('.') =~ '\%<'.col('.').'c\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com
while search('\m\/\ze[/*]','cbW')
if !search('\m\S','bW')
break break
elseif s:syn_at(line('.'),col('.')) !~? s:syng_com
return s:token()
endif endif
let lnum = prevnonblank(lnum - 1)
endwhile endwhile
return lnum
endfunction
" Find line above 'lnum' that started the continuation 'lnum' may be part of.
function s:GetMSL(lnum, in_one_line_scope)
" Start on the line we're at and use its indent.
let msl = a:lnum
let lnum = s:PrevNonBlankNonString(a:lnum - 1)
while lnum > 0
" If we have a continuation line, or we're in a string, use line as MSL.
" Otherwise, terminate search as we have found our MSL already.
let line = getline(lnum)
let col = match(line, s:msl_regex) + 1
if (col > 0 && !s:IsInStringOrComment(lnum, col)) || s:IsInString(lnum, strlen(line))
let msl = lnum
else else
return s:token() " Don't use lines that are part of a one line scope as msl unless the
" flag in_one_line_scope is set to 1
"
if a:in_one_line_scope
break
end
let msl_one_line = s:Match(lnum, s:one_line_scope_regex)
if msl_one_line == 0
break
endif endif
endif endif
return '' let lnum = s:PrevNonBlankNonString(lnum - 1)
endfunction
function s:others(p)
return "((line2byte(line('.')) + col('.')) <= ".(line2byte(a:p[0]) + a:p[1]).") || ".s:skip_expr
endfunction
function s:tern_skip(p)
return s:GetPair('{','}','nbW',s:others(a:p),200,a:p[0]) > 0
endfunction
function s:tern_col(p)
return s:GetPair('?',':\@<!::\@!','nbW',s:others(a:p)
\ .' || s:tern_skip('.string(a:p).')',200,a:p[0]) > 0
endfunction
function s:label_col()
let pos = getpos('.')[1:2]
let [s:looksyn,s:free] = pos
call s:alternatePair(0)
if s:save_pos('s:IsBlock')
let poss = getpos('.')[1:2]
return call('cursor',pos) || !s:tern_col(poss)
elseif s:looking_at() == ':'
return !s:tern_col([0,0])
endif
endfunction
" configurable regexes that define continuation lines, not including (, {, or [.
let s:opfirst = '^' . get(g:,'typescript_opfirst',
\ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')
let s:continuation = get(g:,'typescript_continuation',
\ '\%([-+<>=,.~!?/*^%|&:]\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$'
function s:continues(ln,con)
return !cursor(a:ln, match(' '.a:con,s:continuation)) &&
\ eval( (['s:syn_at(line("."),col(".")) !~? "regex"'] +
\ repeat(['getline(".")[col(".")-2] != tr(s:looking_at(),">","=")'],3) +
\ repeat(['s:previous_token() != "."'],5) + [1])[
\ index(split('/ > - + typeof in instanceof void delete'),s:token())])
endfunction
" get the line of code stripped of comments and move cursor to the last
" non-comment char.
function s:Trim(ln)
call cursor(a:ln+1,1)
call s:previous_token()
return strpart(getline('.'),0,col('.'))
endfunction
" Find line above 'lnum' that isn't empty or in a comment
function s:PrevCodeLine(lnum)
let l:n = prevnonblank(a:lnum)
while l:n
if getline(l:n) =~ '^\s*\/[/*]'
if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&
\ s:syn_at(l:n,1) =~? s:syng_str
return l:n
endif
let l:n = prevnonblank(l:n-1)
elseif getline(l:n) =~ '\([/*]\)\1\@![/*]' && s:syn_at(l:n,1) =~? s:syng_com
let l:n = s:save_pos('eval',
\ 'cursor('.l:n.',1) + search(''\m\/\*'',"bW")')
else
return l:n
endif
endwhile endwhile
return msl
endfunction endfunction
" Check if line 'lnum' has a balanced amount of parentheses. function s:RemoveTrailingComments(content)
function s:Balanced(lnum) let single = '\/\/\(.*\)\s*$'
let l:open = 0 let multi = '\/\*\(.*\)\*\/\s*$'
let l:line = getline(a:lnum) return substitute(substitute(a:content, single, '', ''), multi, '', '')
let pos = match(l:line, '[][(){}]', 0) endfunction
" Find if the string is inside var statement (but not the first string)
function s:InMultiVarStatement(lnum)
let lnum = s:PrevNonBlankNonString(a:lnum - 1)
" let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name')
" loop through previous expressions to find a var statement
while lnum > 0
let line = getline(lnum)
" if the line is a ts keyword
if (line =~ s:ts_keywords)
" check if the line is a var stmt
" if the line has a comma first or comma last then we can assume that we
" are in a multiple var statement
if (line =~ s:var_stmt)
return lnum
endif
" other ts keywords, not a var
return 0
endif
let lnum = s:PrevNonBlankNonString(lnum - 1)
endwhile
" beginning of program, not a var
return 0
endfunction
" Find line above with beginning of the var statement or returns 0 if it's not
" this statement
function s:GetVarIndent(lnum)
let lvar = s:InMultiVarStatement(a:lnum)
let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1)
if lvar
let line = s:RemoveTrailingComments(getline(prev_lnum))
" if the previous line doesn't end in a comma, return to regular indent
if (line !~ s:comma_last)
return indent(prev_lnum) - &sw
else
return indent(lvar) + &sw
endif
endif
return -1
endfunction
" Check if line 'lnum' has more opening brackets than closing ones.
function s:LineHasOpeningBrackets(lnum)
let open_0 = 0
let open_2 = 0
let open_4 = 0
let line = getline(a:lnum)
let pos = match(line, '[][(){}]', 0)
while pos != -1 while pos != -1
if s:syn_at(a:lnum,pos + 1) !~? s:syng_strcom if !s:IsInStringOrComment(a:lnum, pos + 1)
let l:open += match(' ' . l:line[pos],'[[({]') let idx = stridx('(){}[]', line[pos])
if l:open < 0 if idx % 2 == 0
return let open_{idx} = open_{idx} + 1
else
let open_{idx - 1} = open_{idx - 1} - 1
endif endif
endif endif
let pos = match(l:line, '[][(){}]', pos + 1) let pos = match(line, '[][(){}]', pos + 1)
endwhile endwhile
return !l:open return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
endfunction endfunction
function s:OneScope(lnum) function s:Match(lnum, regex)
let pline = s:Trim(a:lnum) let col = match(getline(a:lnum), a:regex) + 1
let kw = 'else do' return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
call s:previous_token()
let kw = 'for if let while with'
if index(split('await each'),s:token()) + 1
call s:previous_token()
let kw = 'for'
endif
endif
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&
\ s:save_pos('s:previous_token') != '.'
endfunction endfunction
" returns braceless levels started by 'i' and above lines * &sw. 'num' is the function s:IndentWithContinuation(lnum, ind, width)
" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is " Set up variables to use and search for MSL to the previous line.
" a continued expression, which could have started in a braceless context let p_lnum = a:lnum
function s:iscontOne(i,num,cont) let lnum = s:GetMSL(a:lnum, 1)
let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0] let line = getline(lnum)
let pind = a:num ? indent(l:num) + s:W : 0
let ind = indent(l:i) + (a:cont ? 0 : s:W) " If the previous line wasn't a MSL and is continuation return its indent.
while l:i >= l:num && (ind > pind || l:i == l:num) " TODO: the || s:IsInString() thing worries me a bit.
if indent(l:i) < ind && s:OneScope(l:i) if p_lnum != lnum
let bL += s:W if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
let l:i = line('.') return a:ind
elseif !a:cont || bL || ind < indent(a:i)
break
endif endif
let ind = min([ind, indent(l:i)]) endif
let l:i = s:PrevCodeLine(l:i - 1)
endwhile " Set up more variables now that we know we aren't continuation bound.
return bL let msl_ind = indent(lnum)
" If the previous line ended with [*+/.-=], start a continuation that
" indents an extra level.
if s:Match(lnum, s:continuation_regex)
if lnum == p_lnum
return msl_ind + a:width
else
return msl_ind
endif
endif
return a:ind
endfunction endfunction
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:InOneLineScope(lnum)
function s:IsBlock() let msl = s:GetMSL(a:lnum, 1)
if s:looking_at() == '{' if msl > 0 && s:Match(msl, s:one_line_scope_regex)
let l:n = line('.') return msl
let char = s:previous_token()
if match(s:stack,'xml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx'
return char != '{'
elseif char =~ '\k'
return index(split('return const let import export yield default delete var await void typeof throw case new in instanceof')
\ ,char) < (line('.') != l:n) || s:previous_token() == '.'
elseif char == '>'
return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? '^jsflow'
elseif char == ':'
return getline('.')[col('.')-2] != ':' && s:label_col()
elseif char == '/'
return s:syn_at(line('.'),col('.')) =~? 'regex'
endif
return char !~ '[=~!<*,?^%|&([]' &&
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
endif endif
return 0
endfunction endfunction
function s:ExitingOneLineScope(lnum)
let msl = s:GetMSL(a:lnum, 1)
if msl > 0
" if the current line is in a one line scope ..
if s:Match(msl, s:one_line_scope_regex)
return 0
else
let prev_msl = s:GetMSL(msl - 1, 1)
if s:Match(prev_msl, s:one_line_scope_regex)
return prev_msl
endif
endif
endif
return 0
endfunction
" 3. GetTypescriptIndent Function {{{1
" =========================
function GetTypescriptIndent() function GetTypescriptIndent()
let b:js_cache = get(b:,'js_cache',[0,0,0]) " 3.1. Setup {{{2
" ----------
" Set up variables for restoring position in file. Could use v:lnum here.
let vcol = col('.')
" 3.2. Work on the current line {{{2
" -----------------------------
let ind = -1
" Get the current line. " Get the current line.
call cursor(v:lnum,1) let line = getline(v:lnum)
let l:line = getline('.') " previous nonblank line number
" use synstack as it validates syn state and works in an empty line let prevline = prevnonblank(v:lnum - 1)
let s:stack = synstack(v:lnum,1)
let syns = synIDattr(get(s:stack,-1),'name')
" start with strings,comments,etc. " If we got a closing bracket on an empty line, find its match and indent
if syns =~? s:syng_com " according to it. For parentheses we indent to its column - 1, for the
if l:line =~ '^\s*\*' " others we indent to the containing line's MSL's level. Return -1 if fail.
let col = matchend(line, '^\s*[],})]')
if col > 0 && !s:IsInStringOrComment(v:lnum, col)
call cursor(v:lnum, col)
let lvar = s:InMultiVarStatement(v:lnum)
if lvar
let prevline_contents = s:RemoveTrailingComments(getline(prevline))
" check for comma first
if (line[col - 1] =~ ',')
" if the previous line ends in comma or semicolon don't indent
if (prevline_contents =~ '[;,]\s*$')
return indent(s:GetMSL(line('.'), 0))
" get previous line indent, if it's comma first return prevline indent
elseif (prevline_contents =~ s:comma_first)
return indent(prevline)
" otherwise we indent 1 level
else
return indent(lvar) + &sw
endif
endif
endif
let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
if line[col-1]==')' && col('.') != col('$') - 1
let ind = virtcol('.')-1
else
let ind = indent(s:GetMSL(line('.'), 0))
endif
endif
return ind
endif
" If the line is comma first, dedent 1 level
if (getline(prevline) =~ s:comma_first)
return indent(prevline) - &sw
endif
if (line =~ s:ternary)
if (getline(prevline) =~ s:ternary_q)
return indent(prevline)
else
return indent(prevline) + &sw
endif
endif
" If we are in a multi-line comment, cindent does the right thing.
if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1)
return cindent(v:lnum) return cindent(v:lnum)
elseif l:line !~ '^\s*\/[/*]'
return -1
endif
elseif syns =~? s:syng_str && l:line !~ '^[''"]'
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
let b:js_cache[0] = v:lnum
endif
return -1
endif
let l:lnum = s:PrevCodeLine(v:lnum - 1)
if !l:lnum
return
endif endif
let l:line = substitute(l:line,'^\s*','','') " Check for multiple var assignments
if l:line[:1] == '/*' " let var_indent = s:GetVarIndent(v:lnum)
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','') " if var_indent >= 0
endif " return var_indent
if l:line =~ '^\/[/*]' " endif
let l:line = ''
" 3.3. Work on the previous line. {{{2
" -------------------------------
" If the line is empty and the previous nonblank line was a multi-line
" comment, use that comment's indent. Deduct one char to account for the
" space in ' */'.
if line =~ '^\s*$' && s:IsInMultilineComment(prevline, 1)
return indent(prevline) - 1
endif endif
" the containing paren, bracket, or curly. Many hacks for performance " Find a non-blank, non-multi-line string line above the current line.
let idx = index([']',')','}'],l:line[0]) let lnum = s:PrevNonBlankNonString(v:lnum - 1)
if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum &&
\ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) " If the line is empty and inside a string, use the previous line.
call call('cursor',b:js_cache[1:]) if line =~ '^\s*$' && lnum != prevline
return indent(prevnonblank(v:lnum))
endif
" At the start of the file use zero indent.
if lnum == 0
return 0
endif
" Set up variables for current line.
let line = getline(lnum)
let ind = indent(lnum)
" If the previous line ended with a block opening, add a level of indent.
if s:Match(lnum, s:block_regex)
return indent(s:GetMSL(lnum, 0)) + &sw
endif
" If the previous line contained an opening bracket, and we are still in it,
" add indent depending on the bracket type.
if line =~ '[[({]'
let counts = s:LineHasOpeningBrackets(lnum)
if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
if col('.') + 1 == col('$')
return ind + &sw
else else
let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) && return virtcol('.')
\ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum]
if idx + 1
call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000,top)
elseif getline(v:lnum) !~ '^\S' && syns =~? 'block'
call s:GetPair('{','}','bW','s:skip_func()',2000,top)
else
call s:alternatePair(top)
endif endif
elseif counts[1] == '1' || counts[2] == '1'
return ind + &sw
else
call cursor(v:lnum, vcol)
end
endif endif
let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2]) " 3.4. Work on the MSL line. {{{2
let num = b:js_cache[1] " --------------------------
let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0] let ind_con = ind
if !num || s:IsBlock() let ind = s:IndentWithContinuation(lnum, ind_con, &sw)
let ilnum = line('.')
let pline = s:save_pos('s:Trim',l:lnum) " }}}2
if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 "
let num = ilnum == num ? line('.') : num "
if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.' let ols = s:InOneLineScope(lnum)
if &cino !~ ':' if ols > 0
let switch_offset = s:W let ind = ind + &sw
else else
let cinc = matchlist(&cino,'.*:\zs\(-\)\=\(\d*\)\(\.\d\+\)\=\(s\)\=\C') let ols = s:ExitingOneLineScope(lnum)
let switch_offset = max([cinc[0] is '' ? 0 : (cinc[1].1) * while ols > 0 && ind > 0
\ ((strlen(cinc[2].cinc[3]) ? str2nr(cinc[2].str2nr(cinc[3][1])) : 10) * let ind = ind - &sw
\ (cinc[4] is '' ? 1 : s:W)) / 10, -indent(num)]) let ols = s:InOneLineScope(ols - 1)
endif endwhile
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
return indent(num) + switch_offset
endif
endif
endif
if idx < 0 && pline !~ '[{;]$'
if pline =~# ':\@<!:$'
call cursor(l:lnum,strlen(pline))
let isOp = s:tern_col(b:js_cache[1:2]) * s:W
else
let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W
endif
let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp)
let bL -= (bL && l:line[0] == '{') * s:W
endif
endif endif
" main return return ind
if idx + 1 || l:line[:1] == '|}'
return indent(num)
elseif num
return indent(num) + s:W + switch_offset + bL + isOp
endif
return bL + isOp
endfunction endfunction
" }}}1
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save
function! Fixedgq(lnum, count)
let l:tw = &tw ? &tw : 80
let l:count = a:count
let l:first_char = indent(a:lnum) + 1
if mode() == 'i' " gq was not pressed, but tw was set
return 1
endif
" This gq is only meant to do code with strings, not comments
if s:IsLineComment(a:lnum, l:first_char) || s:IsInMultilineComment(a:lnum, l:first_char)
return 1
endif
if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq
return 1
endif
" Put all the lines on one line and do normal spliting after that
if l:count > 1
while l:count > 1
let l:count -= 1
normal J
endwhile
endif
let l:winview = winsaveview()
call cursor(a:lnum, l:tw + 1)
let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum)
call cursor(a:lnum, l:tw + 1)
let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum)
" No need for special treatment, normal gq handles edgecases better
if breakpoint[1] == orig_breakpoint[1]
call winrestview(l:winview)
return 1
endif
" Try breaking after string
if breakpoint[1] <= indent(a:lnum)
call cursor(a:lnum, l:tw + 1)
let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum)
endif
if breakpoint[1] != 0
call feedkeys("r\<CR>")
else
let l:count = l:count - 1
endif
" run gq on new lines
if l:count == 1
call feedkeys("gqq")
endif
return 0
endfunction
endif endif

View File

@@ -1,87 +1,36 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vala') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vala') == -1
" Vim indent file " Copyright (c) 2012 Takezoe Tomoaki <tkztmk@outlook.com>
" Language: Vala "
" Author: Adrià Arrufat <adria.arrufat@protonmail.ch> " Permission is hereby granted, free of charge, to any person obtaining a copy
" Last Change: 2016 Dec 04 " of
" this software and associated documentation files (the "Software"), to deal in
" the Software without restriction, including without limitation the rights to
" use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
" of
" the Software, and to permit persons to whom the Software is furnished to do
" so,
" subject to the following conditions:
"
" The above copyright notice and this permission notice shall be included in all
" copies or substantial portions of the Software.
"
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
" FITNESS
" FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
" COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
" IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
" CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
" Only load this indent file when no other was loaded. " Vim indent file for Vala.
" It just sets cindent for Vala files...
if exists("b:did_indent") if exists("b:did_indent")
finish finish
endif endif
let b:did_indent = 1 let b:did_indent = 1
setl cin
let b:undo_indent = "setl cin<"
setlocal cindent
setlocal cinoptions=L0,(0,Ws,J1,j1
setlocal cinkeys=0{,0},!^F,o,O,0[,0]
" Some preliminary settings
setlocal nolisp " Make sure lisp indenting doesn't supersede us
setlocal autoindent " indentexpr isn't much help otherwise
setlocal indentexpr=GetValaIndent(v:lnum)
" Only define the function once.
if exists("*GetValaIndent")
finish
endif
" Come here when loading the script the first time.
function GetValaIndent(lnum)
" Hit the start of the file, use zero indent.
if a:lnum == 0
return 0
endif
" Starting assumption: cindent (called at the end) will do it right
" normally. We just want to fix up a few cases.
let line = getline(a:lnum)
" Search backwards for the previous non-empty line.
let prevlinenum = prevnonblank(a:lnum - 1)
let prevline = getline(prevlinenum)
while prevlinenum > 1 && prevline !~ '[^[:blank:]]'
let prevlinenum = prevnonblank(prevlinenum - 1)
let prevline = s:getline(prevlinenum)
endwhile
" If previous line contains a code attribute (e.g. [CCode (...)])
" don't increase the indentation
if prevline =~? '^\s*\[[A-Za-z]' && prevline =~? '\]$'
return indent(prevlinenum)
endif
" cindent gets lambda body wrong, as it treats the comma as indicating an
" unfinished statement (fix borrowed from rust.vim indent file):
"
" list.foreach ((entry) => {
" stdout.puts (entry);
" stdout.putc ('\n');
" if (entry == null) {
" print ("empty entry\n");
" }
" });
"
" and we want it to be:
" list.foreach ((entry) => {
" stdout.puts (entry);
" stdout.putc ('\n');
" if (entry == null) {
" print ("empty entry\n");
" }
" });
if prevline[len(prevline) - 1] == ","
\ && line !~ '^\s*[\[\]{}]'
\ && prevline !~ '([^()]\+,$'
\ && line !~ '^\s*\S\+\s*=>'
return indent(prevlinenum)
endif
" Fall back on cindent, which does it mostly right
return cindent(a:lnum)
endfunction
endif endif

View File

@@ -1,68 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
" Vim indent file
" Language: Vue.js
" Maintainer: Eduardo San Martin Morote
" Author: Adriaan Zonnenberg
if exists('b:did_indent')
finish
endif
function! s:get_indentexpr(language)
unlet! b:did_indent
execute 'runtime! indent/' . a:language . '.vim'
return &indentexpr
endfunction
" The order is important here, tags without attributes go last.
" HTML is left out, it will be used when there is no match.
let s:languages = [
\ { 'name': 'pug', 'pairs': ['<template lang="pug"', '</template>'] },
\ { 'name': 'stylus', 'pairs': ['<style lang="stylus"', '</style>'] },
\ { 'name': 'css', 'pairs': ['<style', '</style>'] },
\ { 'name': 'coffee', 'pairs': ['<script lang="coffee"', '</script>'] },
\ { 'name': 'javascript', 'pairs': ['<script', '</script>'] },
\ ]
for language in s:languages
" Set 'indentexpr' if the user has an indent file installed for the language
if strlen(globpath(&rtp, 'indent/'. language.name .'.vim'))
let language.indentexpr = s:get_indentexpr(language.name)
endif
endfor
let s:html_indent = s:get_indentexpr('html')
let b:did_indent = 1
setlocal indentexpr=GetVueIndent()
if exists('*GetVueIndent')
finish
endif
function! GetVueIndent()
for language in s:languages
let opening_tag_line = searchpair(language.pairs[0], '', language.pairs[1], 'bWr')
if opening_tag_line
execute 'let indent = ' . get(language, 'indentexpr', -1)
break
endif
endfor
if exists('l:indent')
if (opening_tag_line == prevnonblank(v:lnum - 1) || opening_tag_line == v:lnum)
\ || getline(v:lnum) =~ '\v^\s*\</(script|style|template)'
return 0
endif
else
" Couldn't find language, fall back to html
execute 'let indent = ' . s:html_indent
endif
return indent
endfunction
endif

View File

@@ -1,38 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'apiblueprint') == -1
runtime! syntax/markdown.vim
unlet! b:current_syntax
" Metadata
syntax region apibMarkdownMetadata start=/\%^.*:.*$/ end=/^$/ contains=apibMarkdownMetadataKey,apibMarkdownMetadataValue fold
syntax match apibMarkdownMetadataKey /^[^:]*\ze:/ contained
syntax match apibMarkdownMetadataValue /:.*/ contained
syntax region apibHTTPStatusCode start=/\d\d\d/ end=// contained containedin=apibResponseSection
syntax region apibHTTPContentType start=/(.*)/ end=// contained containedin=apibResponseSection
syntax region apibModelSection start=/^+ Model/ end=/$/ oneline
syntax region apibRequestSection start=/^[-+*] Request.*/ end=/^$/ contains=apibHTTPContentType
syntax region apibResponseSection start=/^[-+*] Response \d\d\d/ end=/^$/ contains=apibHTTPStatusCode,apibHTTPContentType
syntax region apibHeadersSection start=/^+ Headers$/ end=/^\S.*$/ contains=apibHeadersSectionKey,apibHeadersSectionValue
syntax region apibActionRelationKey start=/: .*/ end=/$/ contained
syntax region apibActionRelation start=/^[-+*] Relation: .*$/ end=/$/ oneline contains=apibActionRelationKey
syntax match apibHeadersSectionKey /^[^:]*\ze:/ contained
syntax match apibHeadersSectionValue /:.*/ contained
highlight default link apibMarkdownMetadataKey Function
highlight default link apibRequestSection Function
highlight default link apibResponseSection Function
highlight default link apibModelSection Function
highlight default link apibHeadersSectionKey Function
highlight default link apibHTTPStatusCode Delimiter
highlight default link apibHTTPContentType Comment
highlight default link apibActionRelation Function
highlight default link apibActionRelationKey Identifier
let b:current_syntax = 'apiblueprint'
endif

View File

@@ -1,187 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'asciidoc') == -1
" Vim syntax file
" Language: AsciiDoc
" Author: Stuart Rackham <srackham@gmail.com> (inspired by Felix
" Obenhuber's original asciidoc.vim script).
" URL: http://asciidoc.org/
" Licence: GPL (http://www.gnu.org)
" Remarks: Vim 6 or greater
" Limitations:
"
" - Nested quoted text formatting is highlighted according to the outer
" format.
" - If a closing Example Block delimiter may be mistaken for a title
" underline. A workaround is to insert a blank line before the closing
" delimiter.
" - Lines within a paragraph starting with equals characters are
" highlighted as single-line titles.
" - Lines within a paragraph beginning with a period are highlighted as
" block titles.
if exists("b:current_syntax")
finish
endif
syn clear
syn sync fromstart
syn sync linebreaks=100
" Run :help syn-priority to review syntax matching priority.
syn keyword asciidocToDo TODO FIXME CHECK TEST XXX ZZZ DEPRECATED
syn match asciidocBackslash /\\/
syn region asciidocIdMarker start=/^\$Id:\s/ end=/\s\$$/
syn match asciidocCallout /\\\@<!<\d\{1,2}>/
syn match asciidocOpenBlockDelimiter /^--$/
syn match asciidocLineBreak /[ \t]+$/ containedin=asciidocList
syn match asciidocRuler /^'\{3,}$/
syn match asciidocPagebreak /^<\{3,}$/
syn match asciidocEntityRef /\\\@<!&[#a-zA-Z]\S\{-};/
syn region asciidocLiteralParagraph start=/\(\%^\|\_^\s*\n\)\@<=\s\+\S\+/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocToDo
syn match asciidocURL /\\\@<!\<\(http\|https\|ftp\|file\|irc\):\/\/[^| \t]*\(\w\|\/\)/
syn match asciidocEmail /[\\.:]\@<!\(\<\|<\)\w\(\w\|[.-]\)*@\(\w\|[.-]\)*\w>\?[0-9A-Za-z_]\@!/
syn match asciidocAttributeRef /\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}/
" As a damage control measure quoted patterns always terminate at a blank
" line (see 'Limitations' above).
syn match asciidocQuotedAttributeList /\\\@<!\[[a-zA-Z0-9_-][a-zA-Z0-9 _-]*\][+_'`#*]\@=/
syn match asciidocQuotedSubscript /\\\@<!\~\S\_.\{-}\(\~\|\n\s*\n\)/ contains=asciidocEntityRef
syn match asciidocQuotedSuperscript /\\\@<!\^\S\_.\{-}\(\^\|\n\s*\n\)/ contains=asciidocEntityRef
syn match asciidocQuotedMonospaced /\(^\|[| \t([.,=\]]\)\@<=+\([+ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(+\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
syn match asciidocQuotedMonospaced2 /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(`\([| \t)[\],.?!;:=]\|$\)\@=\)/
syn match asciidocQuotedUnconstrainedMonospaced /[\\+]\@<!++\S\_.\{-}\(++\|\n\s*\n\)/ contains=asciidocEntityRef
syn match asciidocQuotedEmphasized /\(^\|[| \t([.,=\]]\)\@<=_\([_ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(_\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
syn match asciidocQuotedEmphasized2 /\(^\|[| \t([.,=\]]\)\@<='\([' \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
syn match asciidocQuotedUnconstrainedEmphasized /\\\@<!__\S\_.\{-}\(__\|\n\s*\n\)/ contains=asciidocEntityRef
syn match asciidocQuotedBold /\(^\|[| \t([.,=\]]\)\@<=\*\([* \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(\*\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
syn match asciidocQuotedUnconstrainedBold /\\\@<!\*\*\S\_.\{-}\(\*\*\|\n\s*\n\)/ contains=asciidocEntityRef
" Don't allow ` in single quoted (a kludge to stop confusion with `monospaced`).
syn match asciidocQuotedSingleQuoted /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\([^`]\|\n\(\s*\n\)\@!\)\{-}[^` \t]\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
syn match asciidocQuotedDoubleQuoted /\(^\|[| \t([.,=\]]\)\@<=``\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(''\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
syn match asciidocDoubleDollarPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=\$\$..\{-}\(\$\$\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
syn match asciidocTriplePlusPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=+++..\{-}\(+++\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
syn match asciidocAdmonition /^\u\{3,15}:\(\s\+.*\)\@=/
syn region asciidocTable_OLD start=/^\([`.']\d*[-~_]*\)\+[-~_]\+\d*$/ end=/^$/
syn match asciidocBlockTitle /^\.[^. \t].*[^-~_]$/ contains=asciidocQuoted.*,asciidocAttributeRef
syn match asciidocTitleUnderline /[-=~^+]\{2,}$/ transparent contained contains=NONE
syn match asciidocOneLineTitle /^=\{1,5}\s\+\S.*$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash
syn match asciidocTwoLineTitle /^[^. +/].*[^.]\n[-=~^+]\{3,}$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocTitleUnderline
syn match asciidocAttributeList /^\[[^[ \t].*\]$/
syn match asciidocQuoteBlockDelimiter /^_\{4,}$/
syn match asciidocExampleBlockDelimiter /^=\{4,}$/
syn match asciidocSidebarDelimiter /^*\{4,}$/
" See http://vimdoc.sourceforge.net/htmldoc/usr_44.html for excluding region
" contents from highlighting.
syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?|/ containedin=asciidocTableBlock contained
syn region asciidocTableBlock matchgroup=asciidocTableDelimiter start=/^|=\{3,}$/ end=/^|=\{3,}$/ keepend contains=ALL
syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?!/ containedin=asciidocTableBlock contained
syn region asciidocTableBlock2 matchgroup=asciidocTableDelimiter2 start=/^!=\{3,}$/ end=/^!=\{3,}$/ keepend contains=ALL
syn match asciidocListContinuation /^+$/
syn region asciidocLiteralBlock start=/^\.\{4,}$/ end=/^\.\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
syn region asciidocListingBlock start=/^-\{4,}$/ end=/^-\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
syn region asciidocCommentBlock start="^/\{4,}$" end="^/\{4,}$" contains=asciidocToDo
syn region asciidocPassthroughBlock start="^+\{4,}$" end="^+\{4,}$"
" Allowing leading \w characters in the filter delimiter is to accomodate
" the pre version 8.2.7 syntax and may be removed in future releases.
syn region asciidocFilterBlock start=/^\w*\~\{4,}$/ end=/^\w*\~\{4,}$/
syn region asciidocMacroAttributes matchgroup=asciidocRefMacro start=/\\\@<!<<"\{-}\(\w\|-\|_\|:\|\.\)\+"\?,\?/ end=/\(>>\)\|^$/ contains=asciidocQuoted.* keepend
syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{2}\(\w\|-\|_\|:\|\.\)\+,\?/ end=/\]\{2}/ keepend
syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{3}\(\w\|-\|_\|:\|\.\)\+/ end=/\]\{3}/ keepend
syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/[\\0-9a-zA-Z]\@<!\w\(\w\|-\)*:\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef,asciidocEntityRef keepend
" Highlight macro that starts with an attribute reference (a common idiom).
syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/\(\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}\)\@<=\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
syn region asciidocMacroAttributes matchgroup=asciidocIndexTerm start=/\\\@<!(\{2,3}/ end=/)\{2,3}/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
syn match asciidocCommentLine "^//\([^/].*\|\)$" contains=asciidocToDo
syn region asciidocAttributeEntry start=/^:\w/ end=/:\(\s\|$\)/ oneline
" Lists.
syn match asciidocListBullet /^\s*\zs\(-\|\*\{1,5}\)\ze\s/
syn match asciidocListNumber /^\s*\zs\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\ze\s\+/
syn region asciidocListLabel start=/^\s*/ end=/\(:\{2,4}\|;;\)$/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocToDo keepend
" DEPRECATED: Horizontal label.
syn region asciidocHLabel start=/^\s*/ end=/\(::\|;;\)\(\s\+\|\\$\)/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes keepend
" Starts with any of the above.
syn region asciidocList start=/^\s*\(-\|\*\{1,5}\)\s/ start=/^\s*\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\s\+/ start=/.\+\(:\{2,4}\|;;\)$/ end=/\(^[=*]\{4,}$\)\@=/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocList.\+,asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocCommentLine,asciidocAttributeList,asciidocToDo
hi def link asciidocAdmonition Special
hi def link asciidocAnchorMacro Macro
hi def link asciidocAttributeEntry Special
hi def link asciidocAttributeList Special
hi def link asciidocAttributeMacro Macro
hi def link asciidocAttributeRef Special
hi def link asciidocBackslash Special
hi def link asciidocBlockTitle Title
hi def link asciidocCallout Label
hi def link asciidocCommentBlock Comment
hi def link asciidocCommentLine Comment
hi def link asciidocDoubleDollarPassthrough Special
hi def link asciidocEmail Macro
hi def link asciidocEntityRef Special
hi def link asciidocExampleBlockDelimiter Type
hi def link asciidocFilterBlock Type
hi def link asciidocHLabel Label
hi def link asciidocIdMarker Special
hi def link asciidocIndexTerm Macro
hi def link asciidocLineBreak Special
hi def link asciidocOpenBlockDelimiter Label
hi def link asciidocListBullet Label
hi def link asciidocListContinuation Label
hi def link asciidocListingBlock Identifier
hi def link asciidocListLabel Label
hi def link asciidocListNumber Label
hi def link asciidocLiteralBlock Identifier
hi def link asciidocLiteralParagraph Identifier
hi def link asciidocMacroAttributes Label
hi def link asciidocMacro Macro
hi def link asciidocOneLineTitle Title
hi def link asciidocPagebreak Type
hi def link asciidocPassthroughBlock Identifier
hi def link asciidocQuoteBlockDelimiter Type
hi def link asciidocQuotedAttributeList Special
hi def link asciidocQuotedBold Special
hi def link asciidocQuotedDoubleQuoted Label
hi def link asciidocQuotedEmphasized2 Type
hi def link asciidocQuotedEmphasized Type
hi def link asciidocQuotedMonospaced2 Identifier
hi def link asciidocQuotedMonospaced Identifier
hi def link asciidocQuotedSingleQuoted Label
hi def link asciidocQuotedSubscript Type
hi def link asciidocQuotedSuperscript Type
hi def link asciidocQuotedUnconstrainedBold Special
hi def link asciidocQuotedUnconstrainedEmphasized Type
hi def link asciidocQuotedUnconstrainedMonospaced Identifier
hi def link asciidocRefMacro Macro
hi def link asciidocRuler Type
hi def link asciidocSidebarDelimiter Type
hi def link asciidocTableBlock2 NONE
hi def link asciidocTableBlock NONE
hi def link asciidocTableDelimiter2 Label
hi def link asciidocTableDelimiter Label
hi def link asciidocTable_OLD Type
hi def link asciidocTablePrefix2 Label
hi def link asciidocTablePrefix Label
hi def link asciidocToDo Todo
hi def link asciidocTriplePlusPassthrough Special
hi def link asciidocTwoLineTitle Title
hi def link asciidocURL Macro
let b:current_syntax = "asciidoc"
" vim: wrap et sw=2 sts=2:
endif

View File

@@ -31,15 +31,8 @@ syn region bladeEcho matchgroup=bladeDelimiter start="@\@<!{{" end="}}"
syn region bladeEcho matchgroup=bladeDelimiter start="{!!" end="!!}" contains=@bladePhp,bladePhpParenBlock containedin=ALLBUT,@bladeExempt keepend syn region bladeEcho matchgroup=bladeDelimiter start="{!!" end="!!}" contains=@bladePhp,bladePhpParenBlock containedin=ALLBUT,@bladeExempt keepend
syn region bladeComment matchgroup=bladeDelimiter start="{{--" end="--}}" contains=bladeTodo containedin=ALLBUT,@bladeExempt keepend syn region bladeComment matchgroup=bladeDelimiter start="{{--" end="--}}" contains=bladeTodo containedin=ALLBUT,@bladeExempt keepend
syn keyword bladeKeyword @if @elseif @foreach @forelse @for @while @can @cannot @elsecan @elsecannot @include syn keyword bladeKeyword @if @elseif @foreach @forelse @for @while @can @cannot @elsecan @elsecannot @include @includeIf @each @inject @extends @section @stack @push @unless @yield @parent @hasSection @break @continue @unset @lang @choice nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
\ @includeIf @each @inject @extends @section @stack @push @unless @yield @parent @hasSection @break @continue syn keyword bladeKeyword @else @endif @endunless @endfor @endforeach @empty @endforelse @endwhile @endcan @endcannot @stop @append @endsection @endpush @show @overwrite @verbatim @endverbatim containedin=ALLBUT,@bladeExempt
\ @unset @lang @choice @component @slot @prepend
\ nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
syn keyword bladeKeyword @else @endif @endunless @endfor @endforeach @empty @endforelse @endwhile @endcan
\ @endcannot @stop @append @endsection @endpush @show @overwrite @verbatim @endverbatim @endcomponent
\ @endslot @endprepend
\ containedin=ALLBUT,@bladeExempt
if exists('g:blade_custom_directives') if exists('g:blade_custom_directives')
exe "syn keyword bladeKeyword @" . join(g:blade_custom_directives, ' @') . " nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt" exe "syn keyword bladeKeyword @" . join(g:blade_custom_directives, ' @') . " nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt"
@@ -49,7 +42,7 @@ if exists('g:blade_custom_directives_pairs')
exe "syn keyword bladeKeyword @" . join(values(g:blade_custom_directives_pairs), ' @') . " containedin=ALLBUT,@bladeExempt" exe "syn keyword bladeKeyword @" . join(values(g:blade_custom_directives_pairs), ' @') . " containedin=ALLBUT,@bladeExempt"
endif endif
syn region bladePhpRegion matchgroup=bladeKeyword start="\<@php\>\s*(\@!" end="\<@endphp\>" contains=@bladePhp containedin=ALLBUT,@bladeExempt keepend syn region bladePhpRegion matchgroup=bladeKeyword start="\<@php\>\%(\s*(\)\@!" end="\<@endphp\>" contains=@bladePhp containedin=ALLBUT,@bladeExempt keepend
syn match bladeKeyword "@php\ze\s*(" nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt syn match bladeKeyword "@php\ze\s*(" nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
syn region bladePhpParenBlock matchgroup=bladeDelimiter start="\s*(" end=")" contains=@bladePhp,bladePhpParenBlock skipwhite contained syn region bladePhpParenBlock matchgroup=bladeDelimiter start="\s*(" end=")" contains=@bladePhp,bladePhpParenBlock skipwhite contained

View File

@@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c/c++') == -1
" Vim syntax file " Vim syntax file
" Language: C " Language: C
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2016 Nov 18 " Last Change: 2016 Apr 10
" Quit when a (custom) syntax file was already loaded " Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax") if exists("b:current_syntax")
@@ -184,6 +184,11 @@ syn match cNumbersCom display contained transparent "\<\d\|\.\d" contains=cNumbe
syn match cNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" syn match cNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
"hex number "hex number
syn match cNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" syn match cNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
if s:ft ==# 'cpp' && !exists("cpp_no_cpp14")
syn match cNumber display contained "\d\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match cNumber display contained "0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match cNumber display contained "0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
endif
" Flag the first zero of an octal number as something special " Flag the first zero of an octal number as something special
syn match cOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero syn match cOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
syn match cOctalZero display contained "\<0" syn match cOctalZero display contained "\<0"
@@ -360,36 +365,36 @@ if !exists("c_no_c99") " ISO C99
endif endif
" Accept %: for # (C99) " Accept %: for # (C99)
syn region cPreCondit start="^\s*\zs\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError syn region cPreCondit start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
syn match cPreConditMatch display "^\s*\zs\(%:\|#\)\s*\(else\|endif\)\>" syn match cPreConditMatch display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
if !exists("c_no_if0") if !exists("c_no_if0")
syn cluster cCppOutInGroup contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip syn cluster cCppOutInGroup contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
syn region cCppOutWrapper start="^\s*\zs\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold syn region cCppOutWrapper start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold
syn region cCppOutIf contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse syn region cCppOutIf contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
if !exists("c_no_if0_fold") if !exists("c_no_if0_fold")
syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold
else else
syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
endif endif
syn region cCppOutElse contained matchgroup=cCppOutWrapper start="^\s*\zs\(%:\|#\)\s*\(else\|elif\)" end="^\s*\zs\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit syn region cCppOutElse contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit
syn region cCppInWrapper start="^\s*\zs\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold syn region cCppInWrapper start="^\s*\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold
syn region cCppInIf contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\zs\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit syn region cCppInIf contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit
if !exists("c_no_if0_fold") if !exists("c_no_if0_fold")
syn region cCppInElse contained start="^\s*\zs\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold syn region cCppInElse contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold
else else
syn region cCppInElse contained start="^\s*\zs\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 syn region cCppInElse contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2
endif endif
syn region cCppInElse2 contained matchgroup=cCppInWrapper start="^\s*\zs\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\zs\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell syn region cCppInElse2 contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
syn region cCppOutSkip contained start="^\s*\zs\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\zs\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip syn region cCppOutSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip
syn region cCppInSkip contained matchgroup=cCppInWrapper start="^\s*\zs\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\zs\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc syn region cCppInSkip contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc
endif endif
syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
syn match cIncluded display contained "<[^>]*>" syn match cIncluded display contained "<[^>]*>"
syn match cInclude display "^\s*\zs\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded syn match cInclude display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
"syn match cLineSkip "\\$" "syn match cLineSkip "\\$"
syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock
syn region cDefine start="^\s*\zs\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell syn region cDefine start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
syn region cPreProc start="^\s*\zs\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell syn region cPreProc start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
" Highlight User Labels " Highlight User Labels
syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
@@ -398,21 +403,21 @@ if s:ft ==# 'c' || exists("cpp_no_cpp11")
endif endif
" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
syn cluster cLabelGroup contains=cUserLabel syn cluster cLabelGroup contains=cUserLabel
syn match cUserCont display "^\s*\zs\I\i*\s*:$" contains=@cLabelGroup syn match cUserCont display "^\s*\I\i*\s*:$" contains=@cLabelGroup
syn match cUserCont display ";\s*\zs\I\i*\s*:$" contains=@cLabelGroup syn match cUserCont display ";\s*\I\i*\s*:$" contains=@cLabelGroup
if s:ft ==# 'cpp' if s:ft ==# 'cpp'
syn match cUserCont display "^\s*\zs\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup syn match cUserCont display "^\s*\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
syn match cUserCont display ";\s*\zs\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup syn match cUserCont display ";\s*\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
else else
syn match cUserCont display "^\s*\zs\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup syn match cUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
syn match cUserCont display ";\s*\zs\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup syn match cUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
endif endif
syn match cUserLabel display "\I\i*" contained syn match cUserLabel display "\I\i*" contained
" Avoid recognizing most bitfields as labels " Avoid recognizing most bitfields as labels
syn match cBitField display "^\s*\zs\I\i*\s*:\s*[1-9]"me=e-1 contains=cType syn match cBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
syn match cBitField display ";\s*\zs\I\i*\s*:\s*[1-9]"me=e-1 contains=cType syn match cBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
if exists("c_minlines") if exists("c_minlines")
let b:c_minlines = c_minlines let b:c_minlines = c_minlines

View File

@@ -1,33 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'caddyfile') == -1
" Language: Caddyfile
" Author: Josh Glendenning <josh@isobit.io>
if exists("b:current_syntax")
finish
endif
syn match caddyDirective "^\s*\([a-z]\+\)" nextgroup=caddyDirectiveArgs skipwhite
syn region caddyDirectiveArgs start="" end="\({\|#\|$\)"me=s-1 oneline contained contains=caddyPlaceholder,caddyString nextgroup=caddyDirectiveBlock skipwhite
syn region caddyDirectiveBlock start="{" skip="\\}" end="}" contained contains=caddySubdirective,caddyComment
syn match caddySubdirective "^\s*\([a-zA-Z0-9_]\+\)" contained nextgroup=caddySubdirectiveArgs skipwhite
syn region caddySubdirectiveArgs start="" end="\(#\|$\)"me=s-1 oneline contained contains=caddyPlaceholder,caddyString
syn match caddyHost "\(https\?:\/\/\)\?\(\(\w\{1,}\.\)\(\w\{2,}\.\?\)\+\|localhost\)\(:[0-9]\{1,5}\)\?" nextgroup=caddyHostBlock skipwhite
syn region caddyHostBlock start="{" skip="\\}" end="}" contained contains=caddyDirective,caddyComment
syn region caddyPlaceholder start="{" skip="\\}" end="}" oneline contained
syn region caddyString start='"' skip='\\\\\|\\"' end='"' oneline
syn match caddyComment "#.*$"
hi link caddyDirective Keyword
hi link caddySubdirective Structure
hi link caddyHost Identifier
hi link caddyPlaceholder Special
hi link caddyString String
hi link caddyComment Comment
let b:current_syntax = "caddyfile"
endif

View File

@@ -34,7 +34,7 @@ hi def link coffeeConditional Conditional
syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
hi def link coffeeException Exception hi def link coffeeException Exception
syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\|debugger\|import\|export\|await\)\>/ syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\)\>/
\ display \ display
" The `own` keyword is only a keyword after `for`. " The `own` keyword is only a keyword after `for`.
syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat
@@ -109,7 +109,7 @@ hi def link coffeeFloat Float
" An error for reserved keywords, taken from the RESERVED array: " An error for reserved keywords, taken from the RESERVED array:
" http://coffeescript.org/documentation/docs/lexer.html#section-67 " http://coffeescript.org/documentation/docs/lexer.html#section-67
syn match coffeeReservedError /\<\%(case\|default\|function\|var\|void\|with\|const\|let\|enum\|native\|implements\|interface\|package\|private\|protected\|public\|static\)\>/ syn match coffeeReservedError /\<\%(case\|default\|function\|var\|void\|with\|const\|let\|enum\|export\|import\|native\|__hasProp\|__extends\|__slice\|__bind\|__indexOf\|implements\|interface\|package\|private\|protected\|public\|static\)\>/
\ display \ display
hi def link coffeeReservedError Error hi def link coffeeReservedError Error

View File

@@ -4,16 +4,23 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c/c++') == -1
" Language: C++ " Language: C++
" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) " Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp)
" Previous Maintainer: Ken Shan <ccshan@post.harvard.edu> " Previous Maintainer: Ken Shan <ccshan@post.harvard.edu>
" Last Change: 2016 Oct 28 " Last Change: 2015 Nov 10
" quit when a syntax file was already loaded " For version 5.x: Clear all syntax items
if exists("b:current_syntax") " For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish finish
endif endif
" Read the C syntax to start with " Read the C syntax to start with
runtime! syntax/c.vim if version < 600
unlet b:current_syntax so <sfile>:p:h/c.vim
else
runtime! syntax/c.vim
unlet b:current_syntax
endif
" C++ extensions " C++ extensions
syn keyword cppStatement new delete this friend using syn keyword cppStatement new delete this friend using
@@ -32,8 +39,8 @@ syn keyword cppConstant __cplusplus
" C++ 11 extensions " C++ 11 extensions
if !exists("cpp_no_cpp11") if !exists("cpp_no_cpp11")
syn keyword cppModifier override final syn keyword cppModifier override final auto
syn keyword cppType nullptr_t auto syn keyword cppType nullptr_t
syn keyword cppExceptions noexcept syn keyword cppExceptions noexcept
syn keyword cppStorageClass constexpr decltype thread_local syn keyword cppStorageClass constexpr decltype thread_local
syn keyword cppConstant nullptr syn keyword cppConstant nullptr
@@ -48,31 +55,36 @@ endif
" C++ 14 extensions " C++ 14 extensions
if !exists("cpp_no_cpp14") if !exists("cpp_no_cpp14")
syn case ignore syn match cppNumber display "\<0b[01]\+\(u\=l\{0,2}\|ll\=u\)\>"
syn match cppNumber display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match cppNumber display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn case match
endif endif
" The minimum and maximum operators in GNU C++ " The minimum and maximum operators in GNU C++
syn match cppMinMax "[<>]?" syn match cppMinMax "[<>]?"
" Default highlighting " Default highlighting
hi def link cppAccess cppStatement if version >= 508 || !exists("did_cpp_syntax_inits")
hi def link cppCast cppStatement if version < 508
hi def link cppExceptions Exception let did_cpp_syntax_inits = 1
hi def link cppOperator Operator command -nargs=+ HiLink hi link <args>
hi def link cppStatement Statement else
hi def link cppModifier Type command -nargs=+ HiLink hi def link <args>
hi def link cppType Type endif
hi def link cppStorageClass StorageClass HiLink cppAccess cppStatement
hi def link cppStructure Structure HiLink cppCast cppStatement
hi def link cppBoolean Boolean HiLink cppExceptions Exception
hi def link cppConstant Constant HiLink cppOperator Operator
hi def link cppRawStringDelimiter Delimiter HiLink cppStatement Statement
hi def link cppRawString String HiLink cppModifier Type
hi def link cppNumber Number HiLink cppType Type
HiLink cppStorageClass StorageClass
HiLink cppStructure Structure
HiLink cppBoolean Boolean
HiLink cppConstant Constant
HiLink cppRawStringDelimiter Delimiter
HiLink cppRawString String
HiLink cppNumber Number
delcommand HiLink
endif
let b:current_syntax = "cpp" let b:current_syntax = "cpp"

View File

@@ -177,7 +177,7 @@ end
syn match crystalAliasDeclaration "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable nextgroup=crystalAliasDeclaration2 skipwhite syn match crystalAliasDeclaration "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable nextgroup=crystalAliasDeclaration2 skipwhite
syn match crystalAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable syn match crystalAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable
syn match crystalMethodDeclaration "[^[:space:];#(]\+" contained contains=crystalConstant,crystalBoolean,crystalPseudoVariable,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable syn match crystalMethodDeclaration "[^[:space:];#(]\+" contained contains=crystalConstant,crystalBoolean,crystalPseudoVariable,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable
syn match crystalFunctionDeclaration "[^[:space:];#(=]\+" contained contains=crystalConstant syn match crystalFunctionDeclaration "[^[:space:];#=]\+" contained contains=crystalConstant
syn match crystalTypeDeclaration "[^[:space:];#=]\+" contained contains=crystalConstant syn match crystalTypeDeclaration "[^[:space:];#=]\+" contained contains=crystalConstant
syn match crystalClassDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator syn match crystalClassDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator
syn match crystalModuleDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator syn match crystalModuleDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator

View File

@@ -1,7 +1,7 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dockerfile') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dockerfile') == -1
" dockerfile.vim - Syntax highlighting for Dockerfiles " dockerfile.vim - Syntax highlighting for Dockerfiles
" Maintainer: Honza Pokorny <https://honza.ca> " Maintainer: Honza Pokorny <http://honza.ca>
" Version: 0.5 " Version: 0.5
@@ -9,11 +9,10 @@ if exists("b:current_syntax")
finish finish
endif endif
let b:current_syntax = "dockerfile"
syntax case ignore syntax case ignore
syntax match dockerfileKeyword /\v^\s*(ONBUILD\s+)?(ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)\s/ syntax match dockerfileKeyword /\v^\s*(FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD)\s/
syntax match dockerfileKeyword /\v^\s*(ENTRYPOINT|VOLUME|USER|WORKDIR|COPY)\s/
highlight link dockerfileKeyword Keyword highlight link dockerfileKeyword Keyword
syntax region dockerfileString start=/\v"/ skip=/\v\\./ end=/\v"/ syntax region dockerfileString start=/\v"/ skip=/\v\\./ end=/\v"/
@@ -22,14 +21,15 @@ highlight link dockerfileString String
syntax match dockerfileComment "\v^\s*#.*$" syntax match dockerfileComment "\v^\s*#.*$"
highlight link dockerfileComment Comment highlight link dockerfileComment Comment
set commentstring=#\ %s syntax include @DockerSh syntax/sh.vim
try
syntax include @DockerSh after/syntax/sh.vim
catch
endtry
" match "RUN", "CMD", and "ENTRYPOINT" lines, and parse them as shell syntax region dockerShSnip matchgroup=DockerShGroup start="^\s*\%(RUN\|CMD\)\s\+" end="$" contains=@DockerSh
let s:current_syntax = b:current_syntax highlight link DockerShGroup dockerfileKeyword
unlet b:current_syntax
syntax include @SH syntax/sh.vim let b:current_syntax = "dockerfile"
let b:current_syntax = s:current_syntax
syntax region shLine matchgroup=dockerfileKeyword start=/\v^\s*(RUN|CMD|ENTRYPOINT)\s/ end=/\v$/ contains=@SH
" since @SH will handle "\" as part of the same line automatically, this "just works" for line continuation too, but with the caveat that it will highlight "RUN echo '" followed by a newline as if it were a block because the "'" is shell line continuation... not sure how to fix that just yet (TODO)
endif endif

View File

@@ -4,9 +4,6 @@ if exists("b:current_syntax")
finish finish
endif endif
let s:cpo_save = &cpo
set cpo&vim
if !exists("main_syntax") if !exists("main_syntax")
let main_syntax = 'eelixir' let main_syntax = 'eelixir'
endif endif
@@ -65,7 +62,4 @@ if main_syntax == 'eelixir'
unlet main_syntax unlet main_syntax
endif endif
let &cpo = s:cpo_save
unlet s:cpo_save
endif endif

View File

@@ -4,29 +4,25 @@ if exists("b:current_syntax")
finish finish
endif endif
let s:cpo_save = &cpo
set cpo&vim
" syncing starts 2000 lines before top line so docstrings don't screw things up " syncing starts 2000 lines before top line so docstrings don't screw things up
syn sync minlines=2000 syn sync minlines=2000
syn cluster elixirNotTop contains=@elixirRegexSpecial,@elixirStringContained,@elixirDeclaration,elixirTodo,elixirArguments,elixirBlockDefinition,elixirUnusedVariable,elixirStructDelimiter syn cluster elixirNotTop contains=@elixirRegexSpecial,@elixirStringContained,@elixirDeclaration,elixirTodo,elixirArguments,elixirBlockDefinition
syn cluster elixirRegexSpecial contains=elixirRegexEscape,elixirRegexCharClass,elixirRegexQuantifier,elixirRegexEscapePunctuation
syn cluster elixirStringContained contains=elixirInterpolation,elixirRegexEscape,elixirRegexCharClass
syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDeclaration,elixirProtocolDeclaration,elixirImplDeclaration,elixirRecordDeclaration,elixirMacroDeclaration,elixirDelegateDeclaration,elixirOverridableDeclaration,elixirExceptionDeclaration,elixirCallbackDeclaration,elixirStructDeclaration
syn match elixirComment '#.*' contains=elixirTodo,@Spell syn match elixirComment '#.*' contains=elixirTodo,@Spell
syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
syn match elixirId '\<[_a-zA-Z]\w*[!?]\?\>' syn keyword elixirKeyword case when with cond for if unless try receive send
syn keyword elixirKeyword exit raise throw after rescue catch else
syn keyword elixirKeyword quote unquote super spawn spawn_link spawn_monitor
syn match elixirKeyword '\(\.\)\@<!\<\(for\|case\|when\|with\|cond\|if\|unless\|try\|receive\|send\)\>' " Functions used on guards
syn match elixirKeyword '\(\.\)\@<!\<\(exit\|raise\|throw\|after\|rescue\|catch\|else\)\>' syn keyword elixirKeyword contained is_atom is_binary is_bitstring is_boolean
syn match elixirKeyword '\(\.\)\@<!\<\(quote\|unquote\|super\|spawn\|spawn_link\|spawn_monitor\)\>' syn keyword elixirKeyword contained is_float is_function is_integer is_list
syn keyword elixirKeyword contained is_map is_nil is_number is_pid is_port
" Kernel functions syn keyword elixirKeyword contained is_record is_reference is_tuple is_exception
syn match elixirKernelFunction contained containedin=elixirGuard '\<\(is_atom\|is_binary\|is_bitstring\|is_boolean\|is_float\|is_function\|is_integer\|is_list\|is_map\|is_nil\|is_number\|is_pid\|is_port\)\>\([ (]\)\@=' syn keyword elixirKeyword contained abs bit_size byte_size div elem hd length
syn match elixirKernelFunction contained containedin=elixirGuard '\<\(is_record\|is_reference\|is_tuple\|is_exception\|abs\|bit_size\|byte_size\|div\|elem\|hd\|length\|map_size\|node\|rem\|round\|tl\|trunc\|tuple_size\)\>\([ (]\)\@=' syn keyword elixirKeyword contained map_size node rem round tl trunc tuple_size
syn match elixirGuard '.*when.*' contains=ALLBUT,@elixirNotTop syn match elixirGuard '.*when.*' contains=ALLBUT,@elixirNotTop
@@ -34,10 +30,12 @@ syn keyword elixirInclude import require alias use
syn keyword elixirSelf self syn keyword elixirSelf self
" This unfortunately also matches function names in function calls syn match elixirId '\<[_a-zA-Z]\w*[!?]\?\>'
syn match elixirUnusedVariable contained '\<_\w*\>'
syn keyword elixirOperator and not or in " This unfortunately also matches function names in function calls
syn match elixirUnusedVariable '\(([^)]*\)\@<=\<_\w*\>'
syn keyword elixirOperator and not or when xor in
syn match elixirOperator '!==\|!=\|!' syn match elixirOperator '!==\|!=\|!'
syn match elixirOperator '=\~\|===\|==\|=' syn match elixirOperator '=\~\|===\|==\|='
syn match elixirOperator '<<<\|<<\|<=\|<-\|<' syn match elixirOperator '<<<\|<<\|<=\|<-\|<'
@@ -54,9 +52,7 @@ syn match elixirAtom '\(:\)\@<!:\%([a-zA-Z_]\w*\%([?!]\|=[>=]\@!\)\?\|<>\|===\
syn match elixirAtom '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)' syn match elixirAtom '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)'
syn match elixirAtom "\%([a-zA-Z_]\w*[?!]\?\):\(:\)\@!" syn match elixirAtom "\%([a-zA-Z_]\w*[?!]\?\):\(:\)\@!"
syn match elixirBlockInline "\<\(do\|else\)\>:\@=" syn match elixirAlias '\<[!]\?[A-Z]\w*\(\.[A-Z]\w*\)*\>'
syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*'
syn keyword elixirBoolean true false nil syn keyword elixirBoolean true false nil
@@ -77,27 +73,25 @@ syn match elixirRegexCharClass "\[:\(alnum\|alpha\|ascii\|blank\|cntrl\|
syn region elixirRegex matchgroup=elixirRegexDelimiter start="%r/" end="/[uiomxfr]*" skip="\\\\" contains=@elixirRegexSpecial syn region elixirRegex matchgroup=elixirRegexDelimiter start="%r/" end="/[uiomxfr]*" skip="\\\\" contains=@elixirRegexSpecial
syn region elixirTuple matchgroup=elixirTupleDelimiter start="\(\w\|#\)\@<!{" end="}" contains=ALLBUT,@elixirNotTop syn cluster elixirRegexSpecial contains=elixirRegexEscape,elixirRegexCharClass,elixirRegexQuantifier,elixirRegexEscapePunctuation
syn cluster elixirStringContained contains=elixirInterpolation,elixirRegexEscape,elixirRegexCharClass
syn match elixirStructDelimiter '{' contained containedin=elixirStruct syn region elixirString matchgroup=elixirStringDelimiter start="'" end="'" skip="\\'\|\\\\" contains=@elixirStringContained
syn region elixirStruct matchgroup=elixirStructDelimiter start="%\(\w\+{\)\@=" end="}" contains=ALLBUT,@elixirNotTop syn region elixirString matchgroup=elixirStringDelimiter start='"' end='"' skip='\\"' contains=@elixirStringContained
syn region elixirInterpolation matchgroup=elixirInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,elixirComment,@elixirNotTop
syn region elixirMap matchgroup=elixirMapDelimiter start="%{" end="}" contains=ALLBUT,@elixirNotTop syn region elixirDocStringStart matchgroup=elixirDocString start=+"""+ end=+$+ oneline contains=ALLBUT,@elixirNotTop
syn region elixirDocStringStart matchgroup=elixirDocString start=+'''+ end=+$+ oneline contains=ALLBUT,@elixirNotTop
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirStringContained syn region elixirDocString start=+\z("""\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation,@Spell keepend fold
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirStringContained syn region elixirDocString start=+\z('''\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation,@Spell keepend fold
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('''\)+ end=+^\s*\z1+ contains=@elixirStringContained
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("""\)+ end=+^\s*\z1+ contains=@elixirStringContained
syn region elixirInterpolation matchgroup=elixirInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,elixirKernelFunction,elixirComment,@elixirNotTop
syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString
syn match elixirString "\(\w\)\@<!?\%(\\\(x\d{1,2}\|\h{1,2}\h\@!\>\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)" syn match elixirString "\(\w\)\@<!?\%(\\\(x\d{1,2}\|\h{1,2}\h\@!\>\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)"
syn region elixirBlock matchgroup=elixirBlockDefinition start="\<do\>:\@!" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold syn region elixirBlock matchgroup=elixirBlockDefinition start="\<do\>:\@!" end="\<end\>" contains=ALLBUT,@elixirNotTop fold
syn region elixirElseBlock matchgroup=elixirBlockDefinition start="\<else\>:\@!" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold syn region elixirAnonymousFunction matchgroup=elixirBlockDefinition start="\<fn\>" end="\<end\>" contains=ALLBUT,@elixirNotTop fold
syn region elixirAnonymousFunction matchgroup=elixirBlockDefinition start="\<fn\>" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold
syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirAtom,elixirPseudoVariable,elixirAlias,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirAtomInterpolated,elixirRegex,elixirString,elixirStringDelimiter,elixirRegexDelimiter,elixirInterpolationDelimiter,elixirSigilDelimiter,elixirAnonymousFunction syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirAtom,elixirPseudoVariable,elixirAlias,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirAtomInterpolated,elixirRegex,elixirString,elixirStringDelimiter,elixirRegexDelimiter,elixirInterpolationDelimiter,elixirSigilDelimiter
syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE
@@ -112,49 +106,26 @@ syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l{"
syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l<" end=">" skip="\\\\\|\\>" contains=@elixirStringContained,elixirRegexEscapePunctuation fold syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l<" end=">" skip="\\\\\|\\>" contains=@elixirStringContained,elixirRegexEscapePunctuation fold
syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l\[" end="\]" skip="\\\\\|\\\]" contains=@elixirStringContained,elixirRegexEscapePunctuation fold syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l\[" end="\]" skip="\\\\\|\\\]" contains=@elixirStringContained,elixirRegexEscapePunctuation fold
syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l(" end=")" skip="\\\\\|\\)" contains=@elixirStringContained,elixirRegexEscapePunctuation fold syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l(" end=")" skip="\\\\\|\\)" contains=@elixirStringContained,elixirRegexEscapePunctuation fold
syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l\/" end="\/" skip="\\\\\|\\\/" contains=@elixirStringContained,elixirRegexEscapePunctuation fold
" Sigils surrounded with heredoc " Sigils surrounded with docString
syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z("""\)+ end=+^\s*\zs\z1\s*$+ skip=+\\"+ fold syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z("""\)+ end=+^\s*\zs\z1+ skip=+\\"+ fold
syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z('''\)+ end=+^\s*\zs\z1\s*$+ skip=+\\'+ fold syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z('''\)+ end=+^\s*\zs\z1+ skip=+\\'+ fold
" Documentation
if exists('g:elixir_use_markdown_for_docs') && g:elixir_use_markdown_for_docs
syn include @markdown syntax/markdown.vim
syn cluster elixirDocStringContained contains=@markdown,@Spell
else
let g:elixir_use_markdown_for_docs = 0
syn cluster elixirDocStringContained contains=elixirDocTest,elixirTodo,@Spell
" doctests
syn region elixirDocTest start="^\s*\%(iex\|\.\.\.\)\%((\d*)\)\?>\s" end="^\s*$" contained
endif
syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\z(/\|\"\|'\||\)" end="\z1" skip="\\\\\|\\\z1" contains=@elixirDocStringContained fold keepend
syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]{" end="}" skip="\\\\\|\\}" contains=@elixirDocStringContained fold keepend
syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]<" end=">" skip="\\\\\|\\>" contains=@elixirDocStringContained fold keepend
syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss]\[" end="\]" skip="\\\\\|\\\]" contains=@elixirDocStringContained fold keepend
syn region elixirDocString matchgroup=elixirSigilDelimiter start="\%(@\w*doc\s\+\)\@<=\~[Ss](" end=")" skip="\\\\\|\\)" contains=@elixirDocStringContained fold keepend
syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirDocStringContained keepend
syn region elixirDocString matchgroup=elixirStringDelimiter start=+\%(@\w*doc\s\+\)\@<=\z("""\)+ end=+\z1+ contains=@elixirDocStringContained fold keepend
syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z('''\)+ end=+\z1+ skip=+\\'+ contains=@elixirDocStringContained fold keepend
syn region elixirDocString matchgroup=elixirSigilDelimiter start=+\%(@\w*doc\s\+\)\@<=\~[Ss]\z("""\)+ end=+\z1+ skip=+\\"+ contains=@elixirDocStringContained fold keepend
" Defines " Defines
syn match elixirDefine '\<def\>\(:\)\@!' nextgroup=elixirFunctionDeclaration skipwhite skipnl syn keyword elixirDefine def nextgroup=elixirFunctionDeclaration skipwhite skipnl
syn match elixirPrivateDefine '\<defp\>\(:\)\@!' nextgroup=elixirFunctionDeclaration skipwhite skipnl syn keyword elixirPrivateDefine defp nextgroup=elixirFunctionDeclaration skipwhite skipnl
syn match elixirModuleDefine '\<defmodule\>\(:\)\@!' nextgroup=elixirModuleDeclaration skipwhite skipnl syn keyword elixirModuleDefine defmodule nextgroup=elixirModuleDeclaration skipwhite skipnl
syn match elixirProtocolDefine '\<defprotocol\>\(:\)\@!' nextgroup=elixirProtocolDeclaration skipwhite skipnl syn keyword elixirProtocolDefine defprotocol nextgroup=elixirProtocolDeclaration skipwhite skipnl
syn match elixirImplDefine '\<defimpl\>\(:\)\@!' nextgroup=elixirImplDeclaration skipwhite skipnl syn keyword elixirImplDefine defimpl nextgroup=elixirImplDeclaration skipwhite skipnl
syn match elixirRecordDefine '\<defrecord\>\(:\)\@!' nextgroup=elixirRecordDeclaration skipwhite skipnl syn keyword elixirRecordDefine defrecord nextgroup=elixirRecordDeclaration skipwhite skipnl
syn match elixirPrivateRecordDefine '\<defrecordp\>\(:\)\@!' nextgroup=elixirRecordDeclaration skipwhite skipnl syn keyword elixirPrivateRecordDefine defrecordp nextgroup=elixirRecordDeclaration skipwhite skipnl
syn match elixirMacroDefine '\<defmacro\>\(:\)\@!' nextgroup=elixirMacroDeclaration skipwhite skipnl syn keyword elixirMacroDefine defmacro nextgroup=elixirMacroDeclaration skipwhite skipnl
syn match elixirPrivateMacroDefine '\<defmacrop\>\(:\)\@!' nextgroup=elixirMacroDeclaration skipwhite skipnl syn keyword elixirPrivateMacroDefine defmacrop nextgroup=elixirMacroDeclaration skipwhite skipnl
syn match elixirDelegateDefine '\<defdelegate\>\(:\)\@!' nextgroup=elixirDelegateDeclaration skipwhite skipnl syn keyword elixirDelegateDefine defdelegate nextgroup=elixirDelegateDeclaration skipwhite skipnl
syn match elixirOverridableDefine '\<defoverridable\>\(:\)\@!' nextgroup=elixirOverridableDeclaration skipwhite skipnl syn keyword elixirOverridableDefine defoverridable nextgroup=elixirOverridableDeclaration skipwhite skipnl
syn match elixirExceptionDefine '\<defexception\>\(:\)\@!' nextgroup=elixirExceptionDeclaration skipwhite skipnl syn keyword elixirExceptionDefine defexception nextgroup=elixirExceptionDeclaration skipwhite skipnl
syn match elixirCallbackDefine '\<defcallback\>\(:\)\@!' nextgroup=elixirCallbackDeclaration skipwhite skipnl syn keyword elixirCallbackDefine defcallback nextgroup=elixirCallbackDeclaration skipwhite skipnl
syn match elixirStructDefine '\<defstruct\>\(:\)\@!' skipwhite skipnl syn keyword elixirStructDefine defstruct skipwhite skipnl
" Declarations " Declarations
syn match elixirModuleDeclaration "[^[:space:];#<]\+" contained nextgroup=elixirBlock skipwhite skipnl syn match elixirModuleDeclaration "[^[:space:];#<]\+" contained nextgroup=elixirBlock skipwhite skipnl
@@ -169,12 +140,8 @@ syn match elixirOverridableDeclaration "[^[:space:];#<]\+" contained con
syn match elixirExceptionDeclaration "[^[:space:];#<]\+" contained contains=elixirAlias skipwhite skipnl syn match elixirExceptionDeclaration "[^[:space:];#<]\+" contained contains=elixirAlias skipwhite skipnl
syn match elixirCallbackDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl syn match elixirCallbackDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl
" ExUnit syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDeclaration,elixirProtocolDeclaration,elixirImplDeclaration,elixirRecordDeclaration,elixirMacroDeclaration,elixirDelegateDeclaration,elixirOverridableDeclaration,elixirExceptionDeclaration,elixirCallbackDeclaration,elixirStructDeclaration
syn match elixirExUnitMacro "\(^\s*\)\@<=\<\(test\|describe\|setup\|setup_all\|on_exit\|doctest\)\>"
syn match elixirExUnitAssert "\(^\s*\)\@<=\<\(assert\|assert_in_delta\|assert_raise\|assert_receive\|assert_received\|catch_error\)\>"
syn match elixirExUnitAssert "\(^\s*\)\@<=\<\(catch_exit\|catch_throw\|flunk\|refute\|refute_in_delta\|refute_receive\|refute_received\)\>"
hi def link elixirBlockInline Keyword
hi def link elixirBlockDefinition Keyword hi def link elixirBlockDefinition Keyword
hi def link elixirDefine Define hi def link elixirDefine Define
hi def link elixirPrivateDefine Define hi def link elixirPrivateDefine Define
@@ -190,16 +157,12 @@ hi def link elixirOverridableDefine Define
hi def link elixirExceptionDefine Define hi def link elixirExceptionDefine Define
hi def link elixirCallbackDefine Define hi def link elixirCallbackDefine Define
hi def link elixirStructDefine Define hi def link elixirStructDefine Define
hi def link elixirExUnitMacro Define
hi def link elixirModuleDeclaration Type
hi def link elixirFunctionDeclaration Function hi def link elixirFunctionDeclaration Function
hi def link elixirMacroDeclaration Macro hi def link elixirMacroDeclaration Macro
hi def link elixirInclude Include hi def link elixirInclude Include
hi def link elixirComment Comment hi def link elixirComment Comment
hi def link elixirTodo Todo hi def link elixirTodo Todo
hi def link elixirKeyword Keyword hi def link elixirKeyword Keyword
hi def link elixirExUnitAssert Keyword
hi def link elixirKernelFunction Keyword
hi def link elixirOperator Operator hi def link elixirOperator Operator
hi def link elixirAtom Constant hi def link elixirAtom Constant
hi def link elixirPseudoVariable Constant hi def link elixirPseudoVariable Constant
@@ -209,8 +172,7 @@ hi def link elixirVariable Identifier
hi def link elixirSelf Identifier hi def link elixirSelf Identifier
hi def link elixirUnusedVariable Comment hi def link elixirUnusedVariable Comment
hi def link elixirNumber Number hi def link elixirNumber Number
hi def link elixirDocString Comment hi def link elixirDocString String
hi def link elixirDocTest elixirKeyword
hi def link elixirAtomInterpolated elixirAtom hi def link elixirAtomInterpolated elixirAtom
hi def link elixirRegex elixirString hi def link elixirRegex elixirString
hi def link elixirRegexEscape elixirSpecial hi def link elixirRegexEscape elixirSpecial
@@ -227,7 +189,4 @@ hi def link elixirSigilDelimiter Delimiter
let b:current_syntax = "elixir" let b:current_syntax = "elixir"
let &cpo = s:cpo_save
unlet s:cpo_save
endif endif

View File

@@ -4,9 +4,9 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'erlang') == -1
" Language: Erlang (http://www.erlang.org) " Language: Erlang (http://www.erlang.org)
" Maintainer: Csaba Hoch <csaba.hoch@gmail.com> " Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
" Contributor: Adam Rutkowski <hq@mtod.org> " Contributor: Adam Rutkowski <hq@mtod.org>
" Last Update: 2017-Mar-05 " Last Update: 2013-Nov-23
" License: Vim license " License: Vim license
" URL: https://github.com/vim-erlang/vim-erlang-runtime " URL: https://github.com/hcs42/vim-erlang
" Acknowledgements: This script was originally created by Kresimir Marzic [1]. " Acknowledgements: This script was originally created by Kresimir Marzic [1].
" The script was then revamped by Csaba Hoch [2]. During the revamp, the new " The script was then revamped by Csaba Hoch [2]. During the revamp, the new
@@ -31,8 +31,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'erlang') == -1
" "
" syn keyword erlangAttribute myattr1 myattr2 contained " syn keyword erlangAttribute myattr1 myattr2 contained
" quit when a syntax file was already loaded " For version 5.x: Clear all syntax items
if exists("b:current_syntax") " For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish finish
endif endif
@@ -42,7 +45,9 @@ set cpo&vim
" Case sensitive " Case sensitive
syn case match syn case match
setlocal iskeyword+=$,@-@ if version >= 600
setlocal iskeyword+=$,@-@
endif
" Comments " Comments
syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo
@@ -83,7 +88,6 @@ syn match erlangMacro '??\=[[:alnum:]_@]\+'
syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+' syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+'
syn match erlangMap '#' syn match erlangMap '#'
syn match erlangRecord '#\s*\l[[:alnum:]_@]*' syn match erlangRecord '#\s*\l[[:alnum:]_@]*'
syn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier
" Shebang (this line has to be after the ErlangMap) " Shebang (this line has to be after the ErlangMap)
syn match erlangShebang '^#!.*' syn match erlangShebang '^#!.*'
@@ -149,109 +153,118 @@ let b:erlang_syntax_synced = 1
let s:old_style = (exists("g:erlang_old_style_highlight") && let s:old_style = (exists("g:erlang_old_style_highlight") &&
\g:erlang_old_style_highlight == 1) \g:erlang_old_style_highlight == 1)
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_erlang_inits")
if version < 508
let did_erlang_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
" Comments " Comments
hi def link erlangComment Comment HiLink erlangComment Comment
hi def link erlangCommentAnnotation Special HiLink erlangCommentAnnotation Special
hi def link erlangTodo Todo HiLink erlangTodo Todo
hi def link erlangShebang Comment HiLink erlangShebang Comment
" Numbers " Numbers
hi def link erlangNumberInteger Number HiLink erlangNumberInteger Number
hi def link erlangNumberFloat Float HiLink erlangNumberFloat Float
" Strings, atoms, characters " Strings, atoms, characters
hi def link erlangString String HiLink erlangString String
if s:old_style if s:old_style
hi def link erlangQuotedAtom Type HiLink erlangQuotedAtom Type
else else
hi def link erlangQuotedAtom String HiLink erlangQuotedAtom String
endif
HiLink erlangStringModifier Special
HiLink erlangQuotedAtomModifier Special
HiLink erlangModifier Special
" Operators, separators
HiLink erlangOperator Operator
HiLink erlangRightArrow Operator
if s:old_style
HiLink erlangBracket Normal
HiLink erlangPipe Normal
else
HiLink erlangBracket Delimiter
HiLink erlangPipe Delimiter
endif
" Atoms, functions, variables, macros
if s:old_style
HiLink erlangAtom Normal
HiLink erlangLocalFuncCall Normal
HiLink erlangLocalFuncRef Normal
HiLink erlangGlobalFuncCall Function
HiLink erlangGlobalFuncRef Function
HiLink erlangVariable Normal
HiLink erlangMacro Normal
HiLink erlangRecord Normal
HiLink erlangMap Normal
else
HiLink erlangAtom String
HiLink erlangLocalFuncCall Normal
HiLink erlangLocalFuncRef Normal
HiLink erlangGlobalFuncCall Normal
HiLink erlangGlobalFuncRef Normal
HiLink erlangVariable Identifier
HiLink erlangMacro Macro
HiLink erlangRecord Structure
HiLink erlangMap Structure
endif
" Bitstrings
if !s:old_style
HiLink erlangBitType Type
endif
" Constants and Directives
if s:old_style
HiLink erlangAttribute Type
HiLink erlangMacroDef Type
HiLink erlangUnknownAttribute Normal
HiLink erlangInclude Type
HiLink erlangRecordDef Type
HiLink erlangDefine Type
HiLink erlangPreCondit Type
HiLink erlangType Type
else
HiLink erlangAttribute Keyword
HiLink erlangMacroDef Macro
HiLink erlangUnknownAttribute Normal
HiLink erlangInclude Include
HiLink erlangRecordDef Keyword
HiLink erlangDefine Define
HiLink erlangPreCondit PreCondit
HiLink erlangType Type
endif
" Keywords
HiLink erlangKeyword Keyword
" Build-in-functions (BIFs)
HiLink erlangBIF Function
if s:old_style
HiLink erlangBoolean Statement
HiLink erlangExtra Statement
HiLink erlangSignal Statement
else
HiLink erlangBoolean Boolean
HiLink erlangExtra Statement
HiLink erlangSignal Statement
endif
delcommand HiLink
endif endif
hi def link erlangStringModifier Special
hi def link erlangQuotedAtomModifier Special
hi def link erlangModifier Special
" Operators, separators
hi def link erlangOperator Operator
hi def link erlangRightArrow Operator
if s:old_style
hi def link erlangBracket Normal
hi def link erlangPipe Normal
else
hi def link erlangBracket Delimiter
hi def link erlangPipe Delimiter
endif
" Atoms, functions, variables, macros
if s:old_style
hi def link erlangAtom Normal
hi def link erlangLocalFuncCall Normal
hi def link erlangLocalFuncRef Normal
hi def link erlangGlobalFuncCall Function
hi def link erlangGlobalFuncRef Function
hi def link erlangVariable Normal
hi def link erlangMacro Normal
hi def link erlangRecord Normal
hi def link erlangQuotedRecord Normal
hi def link erlangMap Normal
else
hi def link erlangAtom String
hi def link erlangLocalFuncCall Normal
hi def link erlangLocalFuncRef Normal
hi def link erlangGlobalFuncCall Normal
hi def link erlangGlobalFuncRef Normal
hi def link erlangVariable Identifier
hi def link erlangMacro Macro
hi def link erlangRecord Structure
hi def link erlangQuotedRecord Structure
hi def link erlangMap Structure
endif
" Bitstrings
if !s:old_style
hi def link erlangBitType Type
endif
" Constants and Directives
if s:old_style
hi def link erlangAttribute Type
hi def link erlangMacroDef Type
hi def link erlangUnknownAttribute Normal
hi def link erlangInclude Type
hi def link erlangRecordDef Type
hi def link erlangDefine Type
hi def link erlangPreCondit Type
hi def link erlangType Type
else
hi def link erlangAttribute Keyword
hi def link erlangMacroDef Macro
hi def link erlangUnknownAttribute Normal
hi def link erlangInclude Include
hi def link erlangRecordDef Keyword
hi def link erlangDefine Define
hi def link erlangPreCondit PreCondit
hi def link erlangType Type
endif
" Keywords
hi def link erlangKeyword Keyword
" Build-in-functions (BIFs)
hi def link erlangBIF Function
if s:old_style
hi def link erlangBoolean Statement
hi def link erlangExtra Statement
hi def link erlangSignal Statement
else
hi def link erlangBoolean Boolean
hi def link erlangExtra Statement
hi def link erlangSignal Statement
endif
let b:current_syntax = "erlang" let b:current_syntax = "erlang"
let &cpo = s:cpo_save let &cpo = s:cpo_save

View File

@@ -23,7 +23,7 @@ syn match gitrebaseExec "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite
syn match gitrebaseDrop "\v^d%(rop)=>" nextgroup=gitrebaseCommit skipwhite syn match gitrebaseDrop "\v^d%(rop)=>" nextgroup=gitrebaseCommit skipwhite
syn match gitrebaseSummary ".*" contains=gitrebaseHash contained syn match gitrebaseSummary ".*" contains=gitrebaseHash contained
syn match gitrebaseCommand ".*" contained syn match gitrebaseCommand ".*" contained
syn match gitrebaseComment "^\s*#.*" contains=gitrebaseHash syn match gitrebaseComment "^#.*" contains=gitrebaseHash
syn match gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite syn match gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite
hi def link gitrebaseCommit gitrebaseHash hi def link gitrebaseCommit gitrebaseHash

View File

@@ -8,7 +8,7 @@ if exists("b:current_syntax") && b:current_syntax == "glsl"
endif endif
" Statements " Statements
syn keyword glslConditional if else switch case default syn keyword glslConditional if else
syn keyword glslRepeat for while do syn keyword glslRepeat for while do
syn keyword glslStatement discard return break continue syn keyword glslStatement discard return break continue
@@ -28,15 +28,15 @@ syn region glslPreProc start="^\s*#\s*\(error\|pragma\|extension\|versi
syn keyword glslBoolean true false syn keyword glslBoolean true false
" Integer Numbers " Integer Numbers
syn match glslDecimalInt display "\(0\|[1-9]\d*\)[uU]\?" syn match glslDecimalInt display "\(0\|[1-9]\d*\)"
syn match glslOctalInt display "0\o\+[uU]\?" syn match glslOctalInt display "0\o\+"
syn match glslHexInt display "0[xX]\x\+[uU]\?" syn match glslHexInt display "0[xX]\x\+"
" Float Numbers " Float Numbers
syn match glslFloat display "\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\d\+\.\([eE][+-]\=\d\+\)\="
syn match glslFloat display "\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\.\d\+\([eE][+-]\=\d\+\)\="
syn match glslFloat display "\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\d\+[eE][+-]\=\d\+"
syn match glslFloat display "\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\d\+\.\d\+\([eE][+-]\=\d\+\)\="
" Swizzles " Swizzles
syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/ syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/

View File

@@ -1,558 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gnuplot') == -1
" Vim syntax file
" Language: gnuplot 4.7.0
" Maintainer: Andrew Rasmussen andyras@users.sourceforge.net
" Original Maintainer: John Hoelzel johnh51@users.sourceforge.net
" Last Change: 2014-02-24
" Filenames: *.gnu *.plt *.gpi *.gih *.gp *.gnuplot scripts: #!*gnuplot
" URL: http://www.vim.org/scripts/script.php?script_id=4873
" Original URL: http://johnh51.get.to/vim/syntax/gnuplot.vim
" thanks to "David Necas (Yeti)" <yeti@physics.muni.cz>
" credit also to Jim Eberle <jim.eberle@fastnlight.com>
" for the script http://www.vim.org/scripts/script.php?script_id=1737
" some shortened names to make demo files look clean... jeh. 11/2000
" demos -> 3.8i ... jeh. 5/2003 - a work in progress...
" added current commands, keywords, variables, todos, macros... amr 2014-02-24
" For vim version 5.x: Clear all syntax items
" For vim version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" ---- Special characters ---- "
" no harm in just matching any \[char] within double quotes, right?
syn match gnuplotSpecial "\\." contained
" syn match gnuplotSpecial "\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[a-z\\]" contained
" measurements in the units in, cm and pt are special
syn match gnuplotUnit "[0-9]+in"
syn match gnuplotUnit "[0-9]+cm"
syn match gnuplotUnit "[0-9]+pt"
" external (shell) commands are special
syn region gnuplotExternal start="!" end="$"
" ---- Comments ---- "
syn region gnuplotComment start="#" end="$" contains=gnuplotTodo
" ---- Constants ---- "
" strings
syn region gnuplotString start=+"+ skip=+\\"+ end=+"+ contains=gnuplotSpecial
syn region gnuplotString start="'" end="'"
" built-in variables
syn keyword gnuplotNumber GNUTERM GPVAL_TERM GPVAL_TERMOPTIONS GPVAL_SPLOT
syn keyword gnuplotNumber GPVAL_OUTPUT GPVAL_ENCODING GPVAL_VERSION
syn keyword gnuplotNumber GPVAL_PATCHLEVEL GPVAL_COMPILE_OPTIONS
syn keyword gnuplotNumber GPVAL_MULTIPLOT GPVAL_PLOT GPVAL_VIEW_ZSCALE
syn keyword gnuplotNumber GPVAL_TERMINALS GPVAL_pi GPVAL_NaN
syn keyword gnuplotNumber GPVAL_ERRNO GPVAL_ERRMSG GPVAL_PWD
syn keyword gnuplotNumber pi NaN GPVAL_LAST_PLOT GPVAL_TERM_WINDOWID
syn keyword gnuplotNumber GPVAL_X_MIN GPVAL_X_MAX GPVAL_X_LOG
syn keyword gnuplotNumber GPVAL_DATA_X_MIN GPVAL_DATA_X_MAX GPVAL_Y_MIN
syn keyword gnuplotNumber GPVAL_Y_MAX GPVAL_Y_LOG GPVAL_DATA_Y_MIN
syn keyword gnuplotNumber GPVAL_DATA_Y_MAX GPVAL_X2_MIN GPVAL_X2_MAX
syn keyword gnuplotNumber GPVAL_X2_LOG GPVAL_DATA_X2_MIN GPVAL_DATA_X2_MAX
syn keyword gnuplotNumber GPVAL_Y2_MIN GPVAL_Y2_MAX GPVAL_Y2_LOG
syn keyword gnuplotNumber GPVAL_DATA_Y2_MIN GPVAL_DATA_Y2_MAX GPVAL_Z_MIN
syn keyword gnuplotNumber GPVAL_Z_MAX GPVAL_Z_LOG GPVAL_DATA_Z_MIN
syn keyword gnuplotNumber GPVAL_DATA_Z_MAX GPVAL_CB_MIN GPVAL_CB_MAX
syn keyword gnuplotNumber GPVAL_CB_LOG GPVAL_DATA_CB_MIN GPVAL_DATA_CB_MAX
syn keyword gnuplotNumber GPVAL_T_MIN GPVAL_T_MAX GPVAL_T_LOG GPVAL_U_MIN
syn keyword gnuplotNumber GPVAL_U_MAX GPVAL_U_LOG GPVAL_V_MIN GPVAL_V_MAX
syn keyword gnuplotNumber GPVAL_V_LOG GPVAL_R_MIN GPVAL_R_LOG
syn keyword gnuplotNumber GPVAL_TERM_XMIN GPVAL_TERM_XMAX GPVAL_TERM_YMIN
syn keyword gnuplotNumber GPVAL_TERM_YMAX GPVAL_TERM_XSIZE
syn keyword gnuplotNumber GPVAL_TERM_YSIZE GPVAL_VIEW_MAP GPVAL_VIEW_ROT_X
syn keyword gnuplotNumber GPVAL_VIEW_ROT_Z GPVAL_VIEW_SCALE
" function name variables
syn match gnuplotNumber "GPFUN_[a-zA-Z_]*"
" stats variables
syn keyword gnuplotNumber STATS_records STATS_outofrange STATS_invalid
syn keyword gnuplotNumber STATS_blank STATS_blocks STATS_columns STATS_min
syn keyword gnuplotNumber STATS_max STATS_index_min STATS_index_max
syn keyword gnuplotNumber STATS_lo_quartile STATS_median STATS_up_quartile
syn keyword gnuplotNumber STATS_mean STATS_stddev STATS_sum STATS_sumsq
syn keyword gnuplotNumber STATS_correlation STATS_slope STATS_intercept
syn keyword gnuplotNumber STATS_sumxy STATS_pos_min_y STATS_pos_max_y
syn keyword gnuplotNumber STATS_mean STATS_stddev STATS_mean_x STATS_sum_x
syn keyword gnuplotNumber STATS_stddev_x STATS_sumsq_x STATS_min_x
syn keyword gnuplotNumber STATS_max_x STATS_median_x STATS_lo_quartile_x
syn keyword gnuplotNumber STATS_up_quartile_x STATS_index_min_x
syn keyword gnuplotNumber STATS_index_max_x STATS_mean_y STATS_stddev_y
syn keyword gnuplotNumber STATS_sum_y STATS_sumsq_y STATS_min_y
syn keyword gnuplotNumber STATS_max_y STATS_median_y STATS_lo_quartile_y
syn keyword gnuplotNumber STATS_up_quartile_y STATS_index_min_y
syn keyword gnuplotNumber STATS_index_max_y STATS_correlation STATS_sumxy
" deprecated fit variables
syn keyword gnuplotError FIT_LIMIT FIT_MAXITER FIT_START_LAMBDA
syn keyword gnuplotError FIT_LAMBDA_FACTOR FIT_LOG FIT_SCRIPT
" numbers, from c.vim
" integer number, or floating point number without a dot and with "f".
syn case ignore
syn match gnuplotNumber "\<[0-9]\+\(u\=l\=\|lu\|f\)\>"
" floating point number, with dot, optional exponent
syn match gnuplotFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
" floating point number, starting with a dot, optional exponent
syn match gnuplotFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
" floating point number, without dot, with exponent
syn match gnuplotFloat "\<[0-9]\+e[-+]\=[0-9]\+[fl]\=\>"
" hex number
syn match gnuplotNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
syn case match
" flag an octal number with wrong digits by not highlighting
syn match gnuplotOctalError "\<0[0-7]*[89]"
" ---- Identifiers: Functions ---- "
" numerical functions
syn keyword gnuplotFunc abs acos acosh airy arg asin asinh atan atan2
syn keyword gnuplotFunc atanh EllipticK EllipticE EllipticPi besj0 besj1
syn keyword gnuplotFunc besy0 besy1 ceil cos cosh erf erfc exp expint
syn keyword gnuplotFunc floor gamma ibeta inverf igamma imag invnorm int
syn keyword gnuplotFunc lambertw lgamma log log10 norm rand real sgn sin
syn keyword gnuplotFunc sin sinh sqrt tan tanh voigt
" string functions
syn keyword gnuplotFunc gprintf sprintf strlen strstrt substr strftime
syn keyword gnuplotFunc strptime system word words
" other functions
syn keyword gnuplotFunc column columnhead columnheader defined exists
syn keyword gnuplotFunc hsv2rgb stringcolumn timecolumn tm_hour tm_mday
syn keyword gnuplotFunc tm_min tm_mon tm_sec tm_wday tm_yday tm_year
syn keyword gnuplotFunc time valid value
" ---- Statements ---- "
" common (builtin) variable names
syn keyword gnuplotKeyword x y t u v z s
" conditionals
syn keyword gnuplotConditional if else
" repeats
syn keyword gnuplotRepeat do for while
" operators
syn match gnuplotOperator "[-+*/^|&?:]"
syn match gnuplotOperator "\*\*"
syn match gnuplotOperator "&&"
syn match gnuplotOperator "||"
" Keywords
" keywords for 'fit' command
syn keyword gnuplotKeyword via z x:z x:z:s x:y:z:s
syn keyword gnuplotKeyword x:y:t:z:s x:y:t:u:z:s x:y:t:u:v:z:s
" keywords for 'plot' command
" 'axes' keyword
syn keyword gnuplotKeyword axes x1y1 x1y2 x2y1 x2y2
" 'binary' keyword
syn keyword gnuplotKeyword binary matrix general array record format endian
syn keyword gnuplotKeyword filetype avs edf png scan transpose dx dy dz
syn keyword gnuplotKeyword flipx flipy flipz origin center rotate using
syn keyword gnuplotKeyword perpendicular skip every
" datafile keywords
syn keyword gnuplotKeyword binary nonuniform matrix index every using
syn keyword gnuplotKeyword smooth volatile noautoscale every index
" 'smooth' keywords
syn keyword gnuplotKeyword unique frequency cumulative cnormal kdensity
syn keyword gnuplotKeyword csplines acsplines bezer sbezier
" deprecated 'thru' keyword
syn keyword gnuplotError thru
" 'using' keyword
syn keyword gnuplotKeyword using u xticlabels yticlabels zticlabels
syn keyword gnuplotKeyword x2ticlabels y2ticlabels xtic ytic ztic
" 'errorbars' keywords
syn keyword gnuplotKeyword errorbars xerrorbars yerrorbars xyerrorbars
" 'errorlines' keywords
syn keyword gnuplotKeyword errorlines xerrorlines yerrorlines xyerrorlines
" 'title' keywords
syn keyword gnuplotKeyword title t tit notitle columnheader at beginning
syn keyword gnuplotKeyword end
" 'with' keywords
syn keyword gnuplotKeyword with w linestyle ls linetype lt linewidth
syn keyword gnuplotKeyword lw linecolor lc pointtype pt pointsize ps
syn keyword gnuplotKeyword fill fs nohidden3d nocontours nosurface palette
" styles for 'with'
syn keyword gnuplotKeyword lines l points p linespoints lp surface dots
syn keyword gnuplotKeyword impulses labels vectors steps fsteps histeps
syn keyword gnuplotKeyword errorbars errorlines financebars xerrorbars
syn keyword gnuplotKeyword xerrorlines xyerrorbars yerrorbars yerrorlines
syn keyword gnuplotKeyword boxes boxerrorbars boxxyerrorbars boxplot
syn keyword gnuplotKeyword candlesticks circles ellipses filledcurves
syn keyword gnuplotKeyword histogram image rgbimage rgbalpha pm3d variable
" keywords for 'save' command
syn keyword gnuplotKeyword save functions func variables all var terminal
syn keyword gnuplotKeyword term set
" keywords for 'set/show' command
" set angles
syn keyword gnuplotKeyword angles degrees deg radians rad
" set arrow
syn keyword gnuplotKeyword arrow from to rto length angle arrowstyle as
syn keyword gnuplotKeyword nohead head backhead heads size filled empty
syn keyword gnuplotKeyword nofilled front back linestyle linetype linewidth
" set autoscale
" TODO regexp here
syn keyword gnuplotKeyword autoscale x y z cb x2 y2 zy min max fixmin
syn keyword gnuplotKeyword fixmax fix keepfix noextend
" set bars
syn keyword gnuplotKeyword bars small large fullwidth front back
" set bind
syn keyword gnuplotKeyword bind
" set margins
" TODO regexp
syn keyword gnuplotKeyword margin bmargin lmargin rmargin tmargin
" set border
syn keyword gnuplotKeyword border front back
" set boxwidth
syn keyword gnuplotKeyword boxwidth absolute relative
" deprecated set clabel
syn keyword gnuplotError clabel
" set clip
syn keyword gnuplotKeyword clip points one two
" set cntrlabel
syn keyword gnuplotKeyword cntrlabel format font start interval onecolor
" set cntrparam
syn keyword gnuplotKeyword cntrparam linear cubicspline bspline points
syn keyword gnuplotKeyword order levels auto discrete incremental
" set colorbox
syn keyword gnuplotKeyword colorbox vertical horizontal default user origin
syn keyword gnuplotKeyword size front back noborder bdefault border
" show colornames
syn keyword gnuplotKeyword colornames
" set contour
syn keyword gnuplotKeyword contour base surface both
" set datafile
syn keyword gnuplotKeyword datafile fortran nofpe_trap missing separator
syn keyword gnuplotKeyword whitespace tab comma commentschars binary
" set decimalsign
syn keyword gnuplotKeyword decimalsign locale
" set dgrid3d
syn keyword gnuplotKeyword dgrid3d splines qnorm gauss cauchy exp box hann
syn keyword gnuplotKeyword kdensity
" set dummy
syn keyword gnuplotKeyword dummy
" set encoding
syn keyword gnuplotKeyword encoding default iso_8859_1 iso_8859_15
syn keyword gnuplotKeyword iso_8859_2 iso_8859_9 koi8r koi8u cp437 cp850
syn keyword gnuplotKeyword cp852 cp950 cp1250 cp1251 cp1254 sjis utf8
" set fit
syn keyword gnuplotKeyword fit logfile default quiet noquiet results brief
syn keyword gnuplotKeyword verbose errorvariables noerrorvariables
syn keyword gnuplotKeyword errorscaling noerrorscaling prescale noprescale
syn keyword gnuplotKeyword maxiter none limit limit_abs start-lambda script
syn keyword gnuplotKeyword lambda-factor
" set fontpath
syn keyword gnuplotKeyword fontpath
" set format
syn keyword gnuplotKeyword format
" show functions
syn keyword gnuplotKeyword functions
" set grid
syn keyword gnuplotKeyword grid polar layerdefault xtics ytics ztics x2tics
syn keyword gnuplotKeyword y2tics cbtics mxtics mytics mztics mx2tics
syn keyword gnuplotKeyword my2tics mcbtics xmtics ymtics zmtics x2mtics
syn keyword gnuplotKeyword y2mtics cbmtics noxtics noytics noztics nox2tics
syn keyword gnuplotKeyword noy2tics nocbtics nomxtics nomytics nomztics
syn keyword gnuplotKeyword nomx2tics nomy2tics nomcbtics
" set hidden3d
syn keyword gnuplotKeyword hidden3d offset trianglepattern undefined
syn keyword gnuplotKeyword altdiagonal noaltdiagonal bentover nobentover
syn keyword gnuplotKeyword noundefined
" set historysize
syn keyword gnuplotKeyword historysize
" set isosamples
syn keyword gnuplotKeyword isosamples
" set key
syn keyword gnuplotKeyword key on off inside outside at left right center
syn keyword gnuplotKeyword top bottom vertical horizontal Left Right
syn keyword gnuplotKeyword opaque noopaque reverse noreverse invert maxrows
syn keyword gnuplotKeyword noinvert samplen spacing width height autotitle
syn keyword gnuplotKeyword noautotitle title enhanced noenhanced font
syn keyword gnuplotKeyword textcolor box nobox linetype linewidth maxcols
" set label
syn keyword gnuplotKeyword label left center right rotate norotate by font
syn keyword gnuplotKeyword front back textcolor point nopoint offset boxed
syn keyword gnuplotKeyword hypertext
" set linetype
syn keyword gnuplotKeyword linetype
" set link
syn keyword gnuplotKeyword link via inverse
" set loadpath
syn keyword gnuplotKeyword loadpath
" set locale
syn keyword gnuplotKeyword locale
" set logscale
syn keyword gnuplotKeyword logscale log
" set macros
syn keyword gnuplotKeyword macros
" set mapping
syn keyword gnuplotKeyword mapping cartesian spherical cylindrical
" set mouse
syn keyword gnuplotKeyword mouse doubleclick nodoubleclick zoomcoordinates
syn keyword gnuplotKeyword nozoomcoordinates ruler noruler at polardistance
syn keyword gnuplotKeyword nopolardistance deg tan format clipboardformat
syn keyword gnuplotKeyword mouseformat labels nolabels zoomjump nozoomjump
syn keyword gnuplotKeyword verbose noverbose
" set multiplot
syn keyword gnuplotKeyword multiplot title font layout rowsfirst downwards
syn keyword gnuplotKeyword downwards upwards scale offset
" set object
syn keyword gnuplotKeyword object behind fillcolor fc fs rectangle ellipse
syn keyword gnuplotKeyword circle polygon at center size units xy xx yy to
syn keyword gnuplotKeyword from
" set offsets
syn keyword gnuplotKeyword offsets
" set origin
syn keyword gnuplotKeyword origin
" set output
syn keyword gnuplotKeyword output
" set parametric
syn keyword gnuplotKeyword parametric
" show plot
syn keyword gnuplotKeyword plot add2history
" set pm3d
syn keyword gnuplotKeyword hidden3d interpolate scansautomatic scansforward
syn keyword gnuplotKeyword scansbackward depthorder flush begin center end
syn keyword gnuplotKeyword ftriangles noftriangles clip1in clip4in mean map
syn keyword gnuplotKeyword corners2color geomean harmean rms median min max
syn keyword gnuplotKeyword c1 c2 c3 c4 pm3d at nohidden3d implicit explicit
" set palette
syn keyword gnuplotKeyword palette gray color gamma rgbformulae defined
syn keyword gnuplotKeyword file functions cubehelix start cycles saturation
syn keyword gnuplotKeyword model RGB HSV CMY YIQ XYZ positive negative
syn keyword gnuplotKeyword nops_allcF ps_allcF maxcolors float int gradient
syn keyword gnuplotKeyword fit2rgbformulae rgbformulae
" set pointintervalbox
syn keyword gnuplotKeyword pointintervalbox
" set pointsize
syn keyword gnuplotKeyword pointsize
" set polar
syn keyword gnuplotKeyword polar
" set print
syn keyword gnuplotKeyword print append
" set psdir
syn keyword gnuplotKeyword psdir
" set raxis
syn keyword gnuplotKeyword raxis rrange rtics
" set samples
syn keyword gnuplotKeyword samples
" set size
syn keyword gnuplotKeyword size square nosquare ratio noratio
" set style
syn keyword gnuplotKeyword style function data noborder rectangle arrow
syn keyword gnuplotKeyword default nohead head heads size filled empty
syn keyword gnuplotKeyword nofilled front back boxplot range fraction
syn keyword gnuplotKeyword outliers nooutliers pointtype candlesticks
syn keyword gnuplotKeyword separation labels off auto x x2 sorted unsorted
syn keyword gnuplotKeyword fill empty transparent solid pattern border
syn keyword gnuplotKeyword increment userstyles financebars line default
syn keyword gnuplotKeyword linetype lt linecolor lc linewidth lw pointtype
syn keyword gnuplotKeyword pt pointsize ps pointinterval pi palette circle
syn keyword gnuplotKeyword radius graph screen wedge nowedge ellipse size
syn keyword gnuplotKeyword units xx xy yy histogram line textbox opaque
syn keyword gnuplotKeyword border noborder
" set surface
syn keyword gnuplotKeyword surface implicit explicit
" set table
syn keyword gnuplotKeyword table
" set terminal (list of terminals)
syn keyword gnuplotKeyword terminal term push pop aed512 aed767 aifm aqua
syn keyword gnuplotKeyword be cairo cairolatex canvas cgm context corel
syn keyword gnuplotKeyword debug dumb dxf dxy800a eepic emf emxvga epscairo
syn keyword gnuplotKeyword epslatex epson_180dpi excl fig ggi gif gpic hpgl
syn keyword gnuplotKeyword grass hp2623a hp2648 hp500c hpljii hppj imagen
syn keyword gnuplotKeyword jpeg kyo latex linux lua mf mif mp next openstep
syn keyword gnuplotKeyword pbm pdf pdfcairo pm png pngcairo postscript
syn keyword gnuplotKeyword pslatex pstex pstricks qms qt regis sun svg svga
syn keyword gnuplotKeyword tek40 tek410x texdraw tgif tikz tkcanvas tpic
syn keyword gnuplotKeyword vgagl vws vx384 windows wx wxt x11 xlib
" keywords for 'set terminal'
syn keyword gnuplotKeyword color monochrome dashlength dl eps pdf fontscale
syn keyword gnuplotKeyword standalone blacktext colortext colourtext header
syn keyword gnuplotKeyword noheader mono color solid dashed notransparent
syn keyword gnuplotKeyword crop crop background input rounded butt square
syn keyword gnuplotKeyword size fsize standalone name jsdir defaultsize
syn keyword gnuplotKeyword timestamp notimestamp colour mitered beveled
syn keyword gnuplotKeyword round squared palfuncparam blacktext nec_cp6
syn keyword gnuplotKeyword mppoints inlineimages externalimages defaultfont
syn keyword gnuplotKeyword aspect feed nofeed rotate small tiny standalone
syn keyword gnuplotKeyword oldstyle newstyle level1 leveldefault level3
syn keyword gnuplotKeyword background nobackground solid clip noclip
syn keyword gnuplotKeyword colortext colourtext epson_60dpi epson_lx800
syn keyword gnuplotKeyword okidata starc tandy_60dpi dpu414 nec_cp6 draft
syn keyword gnuplotKeyword medium large normal landscape portrait big
syn keyword gnuplotKeyword inches pointsmax textspecial texthidden
syn keyword gnuplotKeyword thickness depth version acceleration giant
syn keyword gnuplotKeyword delay loop optimize nooptimize pspoints
syn keyword gnuplotKeyword FNT9X17 FNT13X25 interlace nointerlace courier
syn keyword gnuplotKeyword originreset nooriginreset gparrows nogparrows
syn keyword gnuplotKeyword picenvironment nopicenvironment tightboundingbox
syn keyword gnuplotKeyword notightboundingbox charsize gppoints nogppoints
syn keyword gnuplotKeyword fontscale textscale fulldoc nofulldoc standalone
syn keyword gnuplotKeyword preamble header tikzplot tikzarrows notikzarrows
syn keyword gnuplotKeyword cmykimages externalimages noexternalimages
syn keyword gnuplotKeyword polyline vectors magnification psnfss nopsnfss
syn keyword gnuplotKeyword psnfss-version7 prologues a4paper amstex fname
syn keyword gnuplotKeyword fsize server persist widelines interlace
syn keyword gnuplotKeyword truecolor notruecolor defaultplex simplex duplex
syn keyword gnuplotKeyword nofontfiles adobeglyphnames noadobeglyphnames
syn keyword gnuplotKeyword nostandalone metric textrigid animate nopspoints
syn keyword gnuplotKeyword hpdj FNT5X9 roman emtex rgbimages bitmap
syn keyword gnuplotKeyword nobitmap providevars nointerlace add delete
syn keyword gnuplotKeyword auxfile hacktext unit raise palfuncparam
syn keyword gnuplotKeyword noauxfile nohacktext nounit noraise ctrl noctrl
syn keyword gnuplotKeyword close widget fixed dynamic tek40xx vttek
syn keyword gnuplotKeyword kc-tek40xx km-tek40xx bitgraph perltk
syn keyword gnuplotKeyword interactive red green blue interpolate mode
syn keyword gnuplotKeyword position ctrlq replotonresize position noctrlq
syn keyword gnuplotKeyword noreplotonresize
" set termoption
syn keyword gnuplotKeyword termoption font fontscale solid dashed
" set tics
syn keyword gnuplotKeyword tics add axis border mirror nomirror in out
syn keyword gnuplotKeyword scale rotate norotate by offset nooffset left
syn keyword gnuplotKeyword autojustify format font textcolor right center
" deprecated set ticslevel
syn keyword gnuplotError ticslevel ticscale
" set timestamp
syn keyword gnuplotKeyword timestamp top bottom offset font
" set timefmt
syn keyword gnuplotKeyword timefmt
" set title
syn keyword gnuplotKeyword title offset font textcolor tc
" set ranges
syn keyword gnuplotKeyword trange urange vrange
" show variables
syn keyword gnuplotKeyword variables
" show version
syn keyword gnuplotKeyword version
" set view
syn keyword gnuplotKeyword view map equal noequal xy xyz
" set x2data
syn keyword gnuplotKeyword xdata ydata zdata x2data y2data cbdata xdtics
syn keyword gnuplotKeyword ydtics zdtics x2dtics y2dtics cbdtics xzeroaxis
syn keyword gnuplotKeyword yzeroaxis zzeroaxis x2zeroaxis y2zeroaxis
syn keyword gnuplotKeyword cbzeroaxis time geographic
" set label
syn keyword gnuplotKeyword xlabel ylabel zlabel x2label y2label cblabel
syn keyword gnuplotKeyword offset font textcolor by parallel
" set range
syn keyword gnuplotKeyword xrange yrange zrange x2range y2range cbrange
" set xyplane
syn keyword gnuplotKeyword xyplane
" set zeroaxis
" set zero
syn keyword gnuplotKeyword zero
" set zeroaxis
syn keyword gnuplotKeyword zeroaxis
" keywords for 'stats' command
syn keyword gnuplotKeyword nooutput
" keywords for 'test' command
syn keyword gnuplotKeyword terminal palette rgb rbg grb gbr brg bgr
" ---- Macros ---- "
syn region gnuplotMacro start="@" end=" "
" ---- Todos ---- "
syn keyword gnuplotTodo contained TODO FIXME XXX
" ---- Types: gnuplot commands ---- "
" I set the commands as Types to distinguish them visually from keywords for the
" commands. This comes at the end of the syntax file because some commands
" are redundant with keywords. It's probably too much trouble to go and
" create special regions for each redundant keyword/command pair, which means
" that some keywords (e.g. 'p') will be highlighted as commands.
syn keyword gnuplotStatement cd call clear evaluate exit fit help history
syn keyword gnuplotStatement load lower pause plot p print pwd quit raise
syn keyword gnuplotStatement refresh replot rep reread reset save set show
syn keyword gnuplotStatement shell splot spstats system test undefine unset
syn keyword gnuplotStatement update
" ---- Define the default highlighting ---- "
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_gnuplot_syntax_inits")
if version < 508
let did_gnuplot_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
" ---- Comments ---- "
HiLink gnuplotComment Comment
" ---- Constants ---- "
HiLink gnuplotString String
HiLink gnuplotNumber Number
HiLink gnuplotFloat Float
" ---- Identifiers ---- "
HiLink gnuplotIdentifier Identifier
" ---- Statements ---- "
HiLink gnuplotConditional Conditional
HiLink gnuplotRepeat Repeat
HiLink gnuplotKeyword Keyword
HiLink gnuplotOperator Operator
" ---- PreProcs ---- "
HiLink gnuplotMacro Macro
" ---- Types ---- "
HiLink gnuplotStatement Type
HiLink gnuplotFunc Identifier
" ---- Specials ---- "
HiLink gnuplotSpecial Special
HiLink gnuplotUnit Special
HiLink gnuplotExternal Special
" ---- Errors ---- "
HiLink gnuplotError Error
HiLink gnuplotOctalError Error
" ---- Todos ---- "
HiLink gnuplotTodo Todo
delcommand HiLink
endif
let b:current_syntax = "gnuplot"
" vim: ts=8
endif

Some files were not shown because too many files have changed in this diff Show More