mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-08 11:33:52 -05:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
30c87b73de | ||
|
|
1713d35f06 | ||
|
|
5ddfa1ac28 | ||
|
|
dbe9bc927f | ||
|
|
d219055bc8 | ||
|
|
0e9041f29a | ||
|
|
a0b8a6e77f | ||
|
|
a61ab44810 | ||
|
|
dd4b5cbdd6 | ||
|
|
27903c5b86 | ||
|
|
d5e38fa97b | ||
|
|
7673a61990 | ||
|
|
6a12aa87f4 | ||
|
|
5b77877888 | ||
|
|
8148255ef1 | ||
|
|
40ddf334c9 | ||
|
|
7e10428cd6 | ||
|
|
6a4fe34e61 | ||
|
|
4cd5566b40 | ||
|
|
8b3418cab8 | ||
|
|
9bfde7574a | ||
|
|
8eab5f5403 | ||
|
|
d5b9c4ae84 |
25
README.md
25
README.md
@@ -8,13 +8,13 @@ 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 100+ times faster** than 100+ packages it consists of.
|
||||||
- Solid syntax and indentation support. Only the best language packs.
|
- Solid syntax and indentation support (other features skipped). 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`).
|
||||||
- Each build is tested by automated vimrunner script on CI. See `spec` directory.
|
- Each build is tested by automated vimrunner script on CI. See `spec` directory.
|
||||||
|
|
||||||
\*To be completely honest, concatenated `ftdetect` script takes around `3ms` to load.
|
\*To be completely honest, concatenated `ftdetect` script takes up to `17ms` to load.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -41,31 +41,33 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [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)
|
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent)
|
||||||
- [asciidoc](https://github.com/asciidoc/vim-asciidoc) (syntax)
|
- [asciidoc](https://github.com/asciidoc/vim-asciidoc) (syntax)
|
||||||
|
- [autohotkey](https://github.com/hnamikaw/vim-autohotkey) (indent)
|
||||||
- [blade](https://github.com/jwalton512/vim-blade) (syntax, indent, ftplugin)
|
- [blade](https://github.com/jwalton512/vim-blade) (syntax, indent, ftplugin)
|
||||||
- [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)
|
- [caddyfile](https://github.com/isobit/vim-caddyfile) (syntax, indent, ftplugin)
|
||||||
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin)
|
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin)
|
||||||
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin)
|
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin)
|
||||||
|
- [cmake](https://github.com/pboettch/vim-cmake-syntax) (syntax, indent)
|
||||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin)
|
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin)
|
||||||
- [cql](https://github.com/elubow/cql-vim) (syntax)
|
- [cql](https://github.com/elubow/cql-vim) (syntax)
|
||||||
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin)
|
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin)
|
||||||
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin)
|
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin)
|
||||||
- [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)
|
||||||
- [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)
|
||||||
- [dockerfile](https://github.com/docker/docker) (syntax)
|
- [dockerfile](https://github.com/docker/docker) (syntax)
|
||||||
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, autoload, ftplugin)
|
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, autoload, ftplugin)
|
||||||
- [elm](https://github.com/lambdatoast/elm.vim) (syntax, indent, autoload, ftplugin)
|
- [elm](https://github.com/ElmCast/elm-vim) (syntax, indent, autoload, ftplugin)
|
||||||
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin)
|
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin)
|
||||||
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin)
|
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin)
|
||||||
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent)
|
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent)
|
||||||
- [fish](https://github.com/dag/vim-fish) (syntax, indent, compiler, autoload, ftplugin)
|
- [fish](https://github.com/dag/vim-fish) (syntax, indent, compiler, autoload, ftplugin)
|
||||||
|
- [fsharp](https://github.com/fsharp/vim-fsharp) (syntax, indent)
|
||||||
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin)
|
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin)
|
||||||
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent)
|
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent)
|
||||||
|
- [gmpl](https://github.com/maelvalais/gmpl.vim) (syntax)
|
||||||
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
|
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
|
||||||
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
|
- [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/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
|
||||||
- [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin)
|
- [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin)
|
||||||
@@ -75,6 +77,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [i3](https://github.com/PotatoesMaster/i3-vim-syntax) (syntax, ftplugin)
|
- [i3](https://github.com/PotatoesMaster/i3-vim-syntax) (syntax, ftplugin)
|
||||||
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax)
|
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax)
|
||||||
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras)
|
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras)
|
||||||
|
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent)
|
||||||
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)
|
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)
|
||||||
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent)
|
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent)
|
||||||
- [jsx](https://github.com/mxw/vim-jsx) (after)
|
- [jsx](https://github.com/mxw/vim-jsx) (after)
|
||||||
@@ -90,7 +93,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [mathematica](https://github.com/rsmenon/vim-mathematica) (syntax, ftplugin)
|
- [mathematica](https://github.com/rsmenon/vim-mathematica) (syntax, ftplugin)
|
||||||
- [nginx](https://github.com/chr4/nginx.vim) (syntax, indent, ftplugin)
|
- [nginx](https://github.com/chr4/nginx.vim) (syntax, indent, ftplugin)
|
||||||
- [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent)
|
- [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent)
|
||||||
- [nix](https://github.com/spwhitt/vim-nix) (syntax, ftplugin)
|
- [nix](https://github.com/LnL7/vim-nix) (syntax, indent, 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)
|
||||||
@@ -103,11 +106,12 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent)
|
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent)
|
||||||
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin)
|
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin)
|
||||||
- [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin)
|
- [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin)
|
||||||
- [purescript](https://github.com/raichoo/purescript-vim) (syntax, indent, ftplugin)
|
- [purescript](https://github.com/purescript-contrib/purescript-vim) (syntax, indent, ftplugin)
|
||||||
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload)
|
- [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)
|
||||||
- [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)
|
- [raml](https://github.com/IN3D/vim-raml) (syntax, ftplugin)
|
||||||
- [rspec](https://github.com/sheerun/rspec.vim) (syntax)
|
- [rspec](https://github.com/sheerun/rspec.vim) (syntax)
|
||||||
@@ -117,7 +121,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin)
|
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin)
|
||||||
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, autoload, ftplugin)
|
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, autoload, ftplugin)
|
||||||
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin)
|
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin)
|
||||||
- [solidity](https://github.com/ethereum/vim-solidity) (syntax, indent)
|
- [solidity](https://github.com/tomlion/vim-solidity) (syntax, indent, ftplugin)
|
||||||
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin)
|
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin)
|
||||||
- [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin)
|
- [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin)
|
||||||
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax)
|
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax)
|
||||||
@@ -133,6 +137,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent)
|
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent)
|
||||||
- [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)
|
||||||
|
- [vifm](https://github.com/vifm/vifm.vim) (syntax, autoload, ftplugin)
|
||||||
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent)
|
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent)
|
||||||
- [vue](https://github.com/posva/vim-vue) (syntax, indent, ftplugin)
|
- [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)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsx') == -1
|
|||||||
if exists("loaded_matchit")
|
if exists("loaded_matchit")
|
||||||
let b:match_ignorecase = 0
|
let b:match_ignorecase = 0
|
||||||
let b:match_words = '(:),\[:\],{:},<:>,' .
|
let b:match_words = '(:),\[:\],{:},<:>,' .
|
||||||
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
|
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(/\@<!>\|$\):<\@<=/\1>'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
setlocal suffixesadd+=.jsx
|
setlocal suffixesadd+=.jsx
|
||||||
|
|||||||
@@ -4,6 +4,10 @@ if !exists('g:terraform_align')
|
|||||||
let g:terraform_align = 0
|
let g:terraform_align = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:terraform_remap_spacebar')
|
||||||
|
let g:terraform_remap_spacebar = 0
|
||||||
|
endif
|
||||||
|
|
||||||
if g:terraform_align && exists(':Tabularize')
|
if g:terraform_align && exists(':Tabularize')
|
||||||
inoremap <buffer> <silent> = =<Esc>:call <SID>terraformalign()<CR>a
|
inoremap <buffer> <silent> = =<Esc>:call <SID>terraformalign()<CR>a
|
||||||
function! s:terraformalign()
|
function! s:terraformalign()
|
||||||
@@ -31,6 +35,12 @@ function! TerraformFolds()
|
|||||||
return ">1"
|
return ">1"
|
||||||
elseif match(thisline, '^output') >= 0
|
elseif match(thisline, '^output') >= 0
|
||||||
return ">1"
|
return ">1"
|
||||||
|
elseif match(thisline, '^data') >= 0
|
||||||
|
return ">1"
|
||||||
|
elseif match(thisline, '^terraform') >= 0
|
||||||
|
return ">1"
|
||||||
|
elseif match(thisline, '^locals') >= 0
|
||||||
|
return ">1"
|
||||||
else
|
else
|
||||||
return "="
|
return "="
|
||||||
endif
|
endif
|
||||||
@@ -45,10 +55,13 @@ function! TerraformFoldText()
|
|||||||
endfunction
|
endfunction
|
||||||
setlocal foldtext=TerraformFoldText()
|
setlocal foldtext=TerraformFoldText()
|
||||||
|
|
||||||
"inoremap <space> <C-O>za
|
" Re-map the space bar to fold and unfold
|
||||||
nnoremap <space> za
|
if get(g:, "terraform_remap_spacebar", 1)
|
||||||
onoremap <space> <C-C>za
|
"inoremap <space> <C-O>za
|
||||||
vnoremap <space> zf
|
nnoremap <space> za
|
||||||
|
onoremap <space> <C-C>za
|
||||||
|
vnoremap <space> zf
|
||||||
|
endif
|
||||||
|
|
||||||
" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
|
" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
|
||||||
if get(g:, "terraform_align", 1)
|
if get(g:, "terraform_align", 1)
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c++11') == -1
|
|||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
" Highlight function names.
|
" Highlight function names.
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
syn match cCustomParen "(" contains=cParen contains=cCppParen
|
if !exists('g:cpp_no_function_highlight')
|
||||||
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
|
syn match cCustomParen "(" contains=cParen contains=cCppParen
|
||||||
hi def link cCustomFunc Function
|
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
|
||||||
|
hi def link cCustomFunc Function
|
||||||
|
endif
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
" Highlight member variable names.
|
" Highlight member variable names.
|
||||||
|
|||||||
@@ -36,9 +36,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c++11') == -1
|
|||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
|
|
||||||
" Functions
|
" Functions
|
||||||
syn match cCustomParen "(" contains=cParen contains=cCppParen
|
if !exists('g:cpp_no_function_highlight')
|
||||||
syn match cCustomFunc "\w\+\s*(\@="
|
syn match cCustomParen "(" contains=cParen contains=cCppParen
|
||||||
hi def link cCustomFunc Function
|
syn match cCustomFunc "\w\+\s*(\@="
|
||||||
|
hi def link cCustomFunc Function
|
||||||
|
endif
|
||||||
|
|
||||||
" Class and namespace scope
|
" Class and namespace scope
|
||||||
if exists('g:cpp_class_scope_highlight') && g:cpp_class_scope_highlight
|
if exists('g:cpp_class_scope_highlight') && g:cpp_class_scope_highlight
|
||||||
@@ -48,6 +50,52 @@ if exists('g:cpp_class_scope_highlight') && g:cpp_class_scope_highlight
|
|||||||
hi def link cCustomClass Function
|
hi def link cCustomClass Function
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Clear cppStructure and replace "class" and/or "template" with matches
|
||||||
|
" based on user configuration
|
||||||
|
let s:needs_cppstructure_match = 0
|
||||||
|
if exists('g:cpp_class_decl_highlight') && g:cpp_class_decl_highlight
|
||||||
|
let s:needs_cppstructure_match += 1
|
||||||
|
endif
|
||||||
|
if exists('g:cpp_experimental_template_highlight') && g:cpp_experimental_template_highlight
|
||||||
|
let s:needs_cppstructure_match += 2
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn clear cppStructure
|
||||||
|
if s:needs_cppstructure_match == 0
|
||||||
|
syn keyword cppStructure typename namespace template class
|
||||||
|
elseif s:needs_cppstructure_match == 1
|
||||||
|
syn keyword cppStructure typename namespace template
|
||||||
|
elseif s:needs_cppstructure_match == 2
|
||||||
|
syn keyword cppStructure typename namespace class
|
||||||
|
elseif s:needs_cppstructure_match == 3
|
||||||
|
syn keyword cppStructure typename namespace
|
||||||
|
endif
|
||||||
|
unlet s:needs_cppstructure_match
|
||||||
|
|
||||||
|
|
||||||
|
" Class name declaration
|
||||||
|
if exists('g:cpp_class_decl_highlight') && g:cpp_class_decl_highlight
|
||||||
|
syn match cCustomClassKey "\<class\>"
|
||||||
|
hi def link cCustomClassKey cppStructure
|
||||||
|
|
||||||
|
" Clear cppAccess entirely and redefine as matches
|
||||||
|
syn clear cppAccess
|
||||||
|
syn match cCustomAccessKey "\<private\>"
|
||||||
|
syn match cCustomAccessKey "\<public\>"
|
||||||
|
syn match cCustomAccessKey "\<protected\>"
|
||||||
|
hi def link cCustomAccessKey cppAccess
|
||||||
|
|
||||||
|
" Match the parts of a class declaration
|
||||||
|
syn match cCustomClassName "\<class\_s\+\w\+\>"
|
||||||
|
\ contains=cCustomClassKey
|
||||||
|
syn match cCustomClassName "\<private\_s\+\w\+\>"
|
||||||
|
\ contains=cCustomAccessKey
|
||||||
|
syn match cCustomClassName "\<public\_s\+\w\+\>"
|
||||||
|
\ contains=cCustomAccessKey
|
||||||
|
syn match cCustomClassName "\<protected\_s\+\w\+\>"
|
||||||
|
\ contains=cCustomAccessKey
|
||||||
|
hi def link cCustomClassName Function
|
||||||
|
endif
|
||||||
" Template functions.
|
" Template functions.
|
||||||
" Naive implementation that sorta works in most cases. Should correctly
|
" Naive implementation that sorta works in most cases. Should correctly
|
||||||
" highlight everything in test/color2.cpp
|
" highlight everything in test/color2.cpp
|
||||||
@@ -79,17 +127,12 @@ elseif exists('g:cpp_experimental_template_highlight') && g:cpp_experimental_tem
|
|||||||
\ contains=cCustomAngleBracketStart,cCustomTemplateFunc
|
\ contains=cCustomAngleBracketStart,cCustomTemplateFunc
|
||||||
hi def link cCustomTemplateClass cCustomClass
|
hi def link cCustomTemplateClass cCustomClass
|
||||||
|
|
||||||
|
|
||||||
" Remove 'template' from cppStructure and use a custom match
|
|
||||||
syn clear cppStructure
|
|
||||||
syn keyword cppStructure class typename namespace
|
|
||||||
|
|
||||||
syn match cCustomTemplate "\<template\>"
|
syn match cCustomTemplate "\<template\>"
|
||||||
hi def link cCustomTemplate cppStructure
|
hi def link cCustomTemplate cppStructure
|
||||||
syn match cTemplateDeclare "\<template\_s*<\_[^;()]\{-}>"
|
syn match cTemplateDeclare "\<template\_s*<\_[^;()]\{-}>"
|
||||||
\ contains=cppStructure,cCustomTemplate,cCustomAngleBracketStart
|
\ contains=cppStructure,cCustomTemplate,cCustomClassKey,cCustomAngleBracketStart
|
||||||
|
|
||||||
" Remove 'operator' from cppStructure and use a custom match
|
" Remove 'operator' from cppOperator and use a custom match
|
||||||
syn clear cppOperator
|
syn clear cppOperator
|
||||||
syn keyword cppOperator typeid
|
syn keyword cppOperator typeid
|
||||||
syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
|
syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
|
||||||
@@ -106,7 +149,7 @@ endif
|
|||||||
"hi def link cCustomFunc Function
|
"hi def link cCustomFunc Function
|
||||||
|
|
||||||
" Cluster for all the stdlib functions defined below
|
" Cluster for all the stdlib functions defined below
|
||||||
syn cluster cppSTLgroup contains=cppSTLfunction,cppSTLfunctional,cppSTLconstant,cppSTLnamespace,cppSTLtype,cppSTLexception,cppSTLiterator,cppSTLiterator_tagcppSTLenumcppSTLioscppSTLcast
|
syn cluster cppSTLgroup contains=cppSTLfunction,cppSTLfunctional,cppSTLconstant,cppSTLnamespace,cppSTLtype,cppSTLexception,cppSTLiterator,cppSTLiterator_tag,cppSTLenum,cppSTLios,cppSTLcast
|
||||||
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
@@ -184,6 +227,7 @@ syntax keyword cppSTLfunctional binary_negate
|
|||||||
syntax keyword cppSTLfunctional bit_and
|
syntax keyword cppSTLfunctional bit_and
|
||||||
syntax keyword cppSTLfunctional bit_not
|
syntax keyword cppSTLfunctional bit_not
|
||||||
syntax keyword cppSTLfunctional bit_or
|
syntax keyword cppSTLfunctional bit_or
|
||||||
|
syntax keyword cppSTLfunctional bit_xor
|
||||||
syntax keyword cppSTLfunctional divides
|
syntax keyword cppSTLfunctional divides
|
||||||
syntax keyword cppSTLfunctional equal_to
|
syntax keyword cppSTLfunctional equal_to
|
||||||
syntax keyword cppSTLfunctional greater
|
syntax keyword cppSTLfunctional greater
|
||||||
@@ -699,6 +743,7 @@ syntax keyword cppSTLtype slice_array
|
|||||||
syntax keyword cppSTLtype stack
|
syntax keyword cppSTLtype stack
|
||||||
syntax keyword cppSTLtype stream
|
syntax keyword cppSTLtype stream
|
||||||
syntax keyword cppSTLtype streambuf
|
syntax keyword cppSTLtype streambuf
|
||||||
|
syntax keyword cppSTLtype streamsize
|
||||||
syntax keyword cppSTLtype string
|
syntax keyword cppSTLtype string
|
||||||
syntax keyword cppSTLtype stringbuf
|
syntax keyword cppSTLtype stringbuf
|
||||||
syntax keyword cppSTLtype stringstream
|
syntax keyword cppSTLtype stringstream
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ syn region jsxChild contained start=+{+ end=++ contains=jsBlock,javascriptBlock
|
|||||||
" and generic Flow type annotations (http://flowtype.org/).
|
" and generic Flow type annotations (http://flowtype.org/).
|
||||||
syn region jsxRegion
|
syn region jsxRegion
|
||||||
\ contains=@Spell,@XMLSyntax,jsxRegion,jsxChild,jsBlock,javascriptBlock
|
\ contains=@Spell,@XMLSyntax,jsxRegion,jsxChild,jsBlock,javascriptBlock
|
||||||
\ start=+\%(<\|\w\)\@<!<\z([a-zA-Z][a-zA-Z0-9:\-.]*\)+
|
\ start=+\%(<\|\w\)\@<!<\z([a-zA-Z][a-zA-Z0-9:\-.]*\>[:,]\@!\)\([^>]*>(\)\@!+
|
||||||
\ skip=+<!--\_.\{-}-->+
|
\ skip=+<!--\_.\{-}-->+
|
||||||
\ end=+</\z1\_\s\{-}>+
|
\ end=+</\z1\_\s\{-}>+
|
||||||
\ end=+/>+
|
\ end=+/>+
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ 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 "^\s*\zs[^ \t\"]\+\ze\s*:"
|
||||||
syn match yamlKey "^\s*-\s*\zs[^ \t\"]\+\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\+"
|
||||||
|
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ function! crystal_lang#format(option_str) abort
|
|||||||
|
|
||||||
try
|
try
|
||||||
call setreg('g', formatted, 'v')
|
call setreg('g', formatted, 'v')
|
||||||
silent normal! ggvG$"gp
|
silent normal! gg0vG$"gp
|
||||||
finally
|
finally
|
||||||
call setreg('g', save_g_reg, save_g_regtype)
|
call setreg('g', save_g_reg, save_g_regtype)
|
||||||
let &l:selection = sel_save
|
let &l:selection = sel_save
|
||||||
|
|||||||
@@ -24,9 +24,11 @@ function! dart#fmt(q_args) abort
|
|||||||
let joined_lines = system(printf('dartfmt %s', a:q_args), buffer_content)
|
let joined_lines = system(printf('dartfmt %s', a:q_args), buffer_content)
|
||||||
if 0 == v:shell_error
|
if 0 == v:shell_error
|
||||||
let win_view = winsaveview()
|
let win_view = winsaveview()
|
||||||
silent % delete _
|
let lines = split(joined_lines, "\n")
|
||||||
silent put=joined_lines
|
silent keepjumps call setline(1, lines)
|
||||||
silent 1 delete _
|
if line('$') > len(lines)
|
||||||
|
silent keepjumps execute string(len(lines)+1).',$ delete'
|
||||||
|
endif
|
||||||
call winrestview(win_view)
|
call winrestview(win_view)
|
||||||
else
|
else
|
||||||
let errors = split(joined_lines, "\n")[2:]
|
let errors = split(joined_lines, "\n")[2:]
|
||||||
|
|||||||
@@ -1,6 +1,51 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
|
||||||
|
|
||||||
function! elixir#indent#debug(str)
|
if !exists("g:elixir_indent_max_lookbehind")
|
||||||
|
let g:elixir_indent_max_lookbehind = 30
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Return the effective value of 'shiftwidth'
|
||||||
|
function! s:sw()
|
||||||
|
return &shiftwidth == 0 ? &tabstop : &shiftwidth
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! elixir#indent#indent(lnum)
|
||||||
|
let lnum = a:lnum
|
||||||
|
let text = getline(lnum)
|
||||||
|
let prev_nb_lnum = prevnonblank(lnum-1)
|
||||||
|
let prev_nb_text = getline(prev_nb_lnum)
|
||||||
|
|
||||||
|
call s:debug("==> Indenting line " . lnum)
|
||||||
|
call s:debug("text = '" . text . "'")
|
||||||
|
|
||||||
|
let handlers = [
|
||||||
|
\'top_of_file',
|
||||||
|
\'starts_with_end',
|
||||||
|
\'starts_with_mid_or_end_block_keyword',
|
||||||
|
\'following_trailing_do',
|
||||||
|
\'following_trailing_binary_operator',
|
||||||
|
\'starts_with_pipe',
|
||||||
|
\'starts_with_close_bracket',
|
||||||
|
\'starts_with_binary_operator',
|
||||||
|
\'inside_nested_construct',
|
||||||
|
\'starts_with_comment',
|
||||||
|
\'inside_generic_block',
|
||||||
|
\'follow_prev_nb'
|
||||||
|
\]
|
||||||
|
for handler in handlers
|
||||||
|
call s: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 s:debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
|
||||||
|
return indent
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
call s:debug("defaulting")
|
||||||
|
return 0
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:debug(str)
|
||||||
if exists("g:elixir_indent_debug") && g:elixir_indent_debug
|
if exists("g:elixir_indent_debug") && g:elixir_indent_debug
|
||||||
echom a:str
|
echom a:str
|
||||||
endif
|
endif
|
||||||
@@ -8,14 +53,14 @@ endfunction
|
|||||||
|
|
||||||
" Returns 0 or 1 based on whether or not the text starts with the given
|
" Returns 0 or 1 based on whether or not the text starts with the given
|
||||||
" expression and is not a string or comment
|
" expression and is not a string or comment
|
||||||
function! elixir#indent#starts_with(text, expr, lnum)
|
function! s:starts_with(text, expr, lnum)
|
||||||
let pos = match(a:text, '^\s*'.a:expr)
|
let pos = match(a:text, '^\s*'.a:expr)
|
||||||
if pos == -1
|
if pos == -1
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
" NOTE: @jbodah 2017-02-24: pos is the index of the match which is
|
" NOTE: @jbodah 2017-02-24: pos is the index of the match which is
|
||||||
" zero-indexed. Add one to make it the column number
|
" zero-indexed. Add one to make it the column number
|
||||||
if elixir#indent#is_string_or_comment(a:lnum, pos + 1)
|
if s:is_string_or_comment(a:lnum, pos + 1)
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
@@ -25,12 +70,12 @@ endfunction
|
|||||||
|
|
||||||
" Returns 0 or 1 based on whether or not the text ends with the given
|
" Returns 0 or 1 based on whether or not the text ends with the given
|
||||||
" expression and is not a string or comment
|
" expression and is not a string or comment
|
||||||
function! elixir#indent#ends_with(text, expr, lnum)
|
function! s:ends_with(text, expr, lnum)
|
||||||
let pos = match(a:text, a:expr.'\s*$')
|
let pos = match(a:text, a:expr.'\s*$')
|
||||||
if pos == -1
|
if pos == -1
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
if elixir#indent#is_string_or_comment(a:lnum, pos)
|
if s:is_string_or_comment(a:lnum, pos)
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
@@ -38,14 +83,9 @@ function! elixir#indent#ends_with(text, expr, lnum)
|
|||||||
end
|
end
|
||||||
endfunction
|
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
|
" Returns 0 or 1 based on whether or not the given line number and column
|
||||||
" number pair is a string or comment
|
" number pair is a string or comment
|
||||||
function! elixir#indent#is_string_or_comment(line, col)
|
function! s:is_string_or_comment(line, col)
|
||||||
return synIDattr(synID(a:line, a:col, 1), "name") =~ '\%(String\|Comment\)'
|
return synIDattr(synID(a:line, a:col, 1), "name") =~ '\%(String\|Comment\)'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -59,35 +99,19 @@ function! elixir#indent#searchpair_back_skip()
|
|||||||
if getline('.')[curr_col-1] == ''
|
if getline('.')[curr_col-1] == ''
|
||||||
let curr_col = curr_col-1
|
let curr_col = curr_col-1
|
||||||
endif
|
endif
|
||||||
return elixir#indent#is_string_or_comment(line('.'), curr_col)
|
return s: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
|
endfunction
|
||||||
|
|
||||||
" DRY up regex for keywords that 1) makes sure we only look at complete words
|
" DRY up regex for keywords that 1) makes sure we only look at complete words
|
||||||
" and 2) ignores atoms
|
" and 2) ignores atoms
|
||||||
function! elixir#indent#keyword(expr)
|
function! s:keyword(expr)
|
||||||
return ':\@<!\<\C\%('.a:expr.'\)\>:\@!'
|
return ':\@<!\<\C\%('.a:expr.'\)\>:\@!'
|
||||||
endfunction
|
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
|
" 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
|
" 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
|
" that the result should be the position of the start of the right-most match
|
||||||
function! elixir#indent#find_last_pos(lnum, text, match)
|
function! s:find_last_pos(lnum, text, match)
|
||||||
let last = len(a:text) - 1
|
let last = len(a:text) - 1
|
||||||
let c = last
|
let c = last
|
||||||
|
|
||||||
@@ -118,13 +142,46 @@ function! elixir#indent#handle_top_of_file(_lnum, _text, prev_nb_lnum, _prev_nb_
|
|||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! elixir#indent#handle_follow_prev_nb(_lnum, _text, prev_nb_lnum, prev_nb_text)
|
||||||
|
return s:get_base_indent(a:prev_nb_lnum, a:prev_nb_text)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Given the line at `lnum`, returns the indent of the line that acts as the 'base indent'
|
||||||
|
" for this line. In particular it traverses backwards up things like pipelines
|
||||||
|
" to find the beginning of the expression
|
||||||
|
function! s:get_base_indent(lnum, text)
|
||||||
|
let prev_nb_lnum = prevnonblank(a:lnum - 1)
|
||||||
|
let prev_nb_text = getline(prev_nb_lnum)
|
||||||
|
|
||||||
|
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
||||||
|
let data_structure_close = '\%(\]\|}\|)\)'
|
||||||
|
let pipe = '|>'
|
||||||
|
|
||||||
|
if s:starts_with(a:text, binary_operator, a:lnum)
|
||||||
|
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
||||||
|
elseif s:starts_with(a:text, pipe, a:lnum)
|
||||||
|
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
||||||
|
elseif s:ends_with(prev_nb_text, binary_operator, prev_nb_lnum)
|
||||||
|
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
||||||
|
elseif s:ends_with(a:text, data_structure_close, a:lnum)
|
||||||
|
let data_structure_open = '\%(\[\|{\|(\)'
|
||||||
|
let close_match_idx = match(a:text, data_structure_close . '\s*$')
|
||||||
|
let _move = cursor(a:lnum, close_match_idx + 1)
|
||||||
|
let [open_match_lnum, open_match_col] = searchpairpos(data_structure_open, '', data_structure_close, 'bnW')
|
||||||
|
let open_match_text = getline(open_match_lnum)
|
||||||
|
return s:get_base_indent(open_match_lnum, open_match_text)
|
||||||
|
else
|
||||||
|
return indent(a:lnum)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
" TODO: @jbodah 2017-03-31: remove
|
" TODO: @jbodah 2017-03-31: remove
|
||||||
function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text)
|
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 s:ends_with(a:prev_nb_text, s:keyword('do'), a:prev_nb_lnum)
|
||||||
if elixir#indent#starts_with(a:text, elixir#indent#keyword('end'), a:lnum)
|
if s:starts_with(a:text, s:keyword('end'), a:lnum)
|
||||||
return indent(a:prev_nb_lnum)
|
return indent(a:prev_nb_lnum)
|
||||||
else
|
else
|
||||||
return indent(a:prev_nb_lnum) + &sw
|
return indent(a:prev_nb_lnum) + s:sw()
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
@@ -134,23 +191,31 @@ endfunction
|
|||||||
function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
|
function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
|
||||||
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
||||||
|
|
||||||
if elixir#indent#ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum)
|
if s:ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum)
|
||||||
return indent(a:prev_nb_lnum) + &sw
|
return indent(a:prev_nb_lnum) + s:sw()
|
||||||
|
else
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! elixir#indent#handle_following_prev_end(_lnum, _text, prev_nb_lnum, prev_nb_text)
|
||||||
|
if s:ends_with(a:prev_nb_text, s:keyword('end'), a:prev_nb_lnum)
|
||||||
|
return indent(a:prev_nb_lnum)
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text)
|
function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text)
|
||||||
if elixir#indent#starts_with(a:text, '|>', a:lnum)
|
if s:starts_with(a:text, '|>', a:lnum)
|
||||||
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
||||||
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
|
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
|
||||||
if pos == -1
|
if pos == -1
|
||||||
return indent(a:prev_nb_lnum)
|
return indent(a:prev_nb_lnum)
|
||||||
else
|
else
|
||||||
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
|
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
|
||||||
if next_word_pos == -1
|
if next_word_pos == -1
|
||||||
return indent(a:prev_nb_lnum) + &sw
|
return indent(a:prev_nb_lnum) + s:sw()
|
||||||
else
|
else
|
||||||
return pos + 1 + next_word_pos
|
return pos + 1 + next_word_pos
|
||||||
end
|
end
|
||||||
@@ -161,7 +226,7 @@ function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_n
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text)
|
function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text)
|
||||||
if elixir#indent#starts_with_comment(a:text)
|
if match(a:text, '^\s*#') != -1
|
||||||
return indent(a:prev_nb_lnum)
|
return indent(a:prev_nb_lnum)
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
@@ -169,8 +234,8 @@ function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _p
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_nb_text)
|
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)
|
if s:starts_with(a:text, s:keyword('end'), a:lnum)
|
||||||
let pair_lnum = elixir#indent#searchpair_back(elixir#indent#keyword('do\|fn'), '', elixir#indent#keyword('end').'\zs')
|
let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end').'\zs', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
||||||
return indent(pair_lnum)
|
return indent(pair_lnum)
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
@@ -178,8 +243,8 @@ function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text, _prev_nb_lnum, _prev_nb_text)
|
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)
|
if s:starts_with(a:text, s: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'))
|
let pair_lnum = searchpair(s:keyword('with\|receive\|try\|if\|fn'), s:keyword('catch\|rescue\|after\|else').'\zs', s:keyword('end'), 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
||||||
return indent(pair_lnum)
|
return indent(pair_lnum)
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
@@ -187,8 +252,8 @@ function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text,
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_close_bracket(lnum, text, _prev_nb_lnum, _prev_nb_text)
|
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)
|
if s:starts_with(a:text, '\%(\]\|}\|)\)', a:lnum)
|
||||||
let pair_lnum = elixir#indent#searchpair_back('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)')
|
let pair_lnum = searchpair('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
||||||
return indent(pair_lnum)
|
return indent(pair_lnum)
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
@@ -198,15 +263,15 @@ endfunction
|
|||||||
function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
|
function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
|
||||||
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
||||||
|
|
||||||
if elixir#indent#starts_with(a:text, binary_operator, a:lnum)
|
if s:starts_with(a:text, binary_operator, a:lnum)
|
||||||
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
||||||
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
|
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
|
||||||
if pos == -1
|
if pos == -1
|
||||||
return indent(a:prev_nb_lnum)
|
return indent(a:prev_nb_lnum)
|
||||||
else
|
else
|
||||||
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
|
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
|
||||||
if next_word_pos == -1
|
if next_word_pos == -1
|
||||||
return indent(a:prev_nb_lnum) + &sw
|
return indent(a:prev_nb_lnum) + s:sw()
|
||||||
else
|
else
|
||||||
return pos + 1 + next_word_pos
|
return pos + 1 + next_word_pos
|
||||||
end
|
end
|
||||||
@@ -221,75 +286,116 @@ endfunction
|
|||||||
" function, etc... so we need to first figure out what the innermost structure
|
" function, etc... so we need to first figure out what the innermost structure
|
||||||
" is then forward execution to the proper handler
|
" is then forward execution to the proper handler
|
||||||
function! elixir#indent#handle_inside_nested_construct(lnum, text, prev_nb_lnum, prev_nb_text)
|
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 start_pattern = '\C\%(\<with\>\|\<if\>\|\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<fn\>\|{\|\[\|(\)'
|
||||||
let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)'
|
let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)'
|
||||||
let pair_info = elixir#indent#searchpairpos_back(start_pattern, '', end_pattern)
|
let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", max([0, a:lnum - g:elixir_indent_max_lookbehind]))
|
||||||
let pair_lnum = pair_info[0]
|
let pair_lnum = pair_info[0]
|
||||||
let pair_col = pair_info[1]
|
let pair_col = pair_info[1]
|
||||||
if pair_lnum != 0 || pair_col != 0
|
if pair_lnum != 0 || pair_col != 0
|
||||||
let pair_text = getline(pair_lnum)
|
let pair_text = getline(pair_lnum)
|
||||||
let pair_char = pair_text[pair_col - 1]
|
let pair_char = pair_text[pair_col - 1]
|
||||||
if pair_char == 'f'
|
if pair_char == 'f'
|
||||||
call elixir#indent#debug("testing elixir#indent#do_handle_inside_fn")
|
call s:debug("testing s: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)
|
return s:do_handle_inside_fn(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
elseif pair_char == '['
|
elseif pair_char == '['
|
||||||
call elixir#indent#debug("testing elixir#indent#do_handle_inside_square_brace")
|
call s:debug("testing s: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)
|
return s:do_handle_inside_square_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
elseif pair_char == '{'
|
elseif pair_char == '{'
|
||||||
call elixir#indent#debug("testing elixir#indent#do_handle_inside_curly_brace")
|
call s:debug("testing s: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)
|
return s:do_handle_inside_curly_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
elseif pair_char == '('
|
elseif pair_char == '('
|
||||||
call elixir#indent#debug("testing elixir#indent#do_handle_inside_parens")
|
call s:debug("testing s: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)
|
return s:do_handle_inside_parens(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
|
elseif pair_char == 'w'
|
||||||
|
call s:debug("testing s:do_handle_inside_with")
|
||||||
|
return s:do_handle_inside_with(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
else
|
else
|
||||||
call elixir#indent#debug("testing elixir#indent#do_handle_inside_keyword_block")
|
call s:debug("testing s: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)
|
return s:do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#do_handle_inside_keyword_block(pair_lnum, _pair_col, _lnum, text, prev_nb_lnum, prev_nb_text)
|
function! s:do_handle_inside_with(pair_lnum, pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
|
||||||
|
if a:pair_lnum == a:lnum
|
||||||
|
" This is the `with` line or an inline `with`/`do`
|
||||||
|
call s:debug("current line is `with`")
|
||||||
|
return -1
|
||||||
|
else
|
||||||
|
" Determine if in with/do, do/else|end, or else/end
|
||||||
|
let start_pattern = '\C\%(\<with\>\|\<else\>\|\<do\>\)'
|
||||||
|
let end_pattern = '\C\%(\<end\>\)'
|
||||||
|
let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
||||||
|
let pair_lnum = pair_info[0]
|
||||||
|
let pair_col = pair_info[1]
|
||||||
|
|
||||||
|
let pair_text = getline(pair_lnum)
|
||||||
|
let pair_char = pair_text[pair_col - 1]
|
||||||
|
|
||||||
|
if s:starts_with(a:text, '\Cdo:', a:lnum)
|
||||||
|
call s:debug("current line is do:")
|
||||||
|
return pair_col - 1 + s:sw()
|
||||||
|
elseif s:starts_with(a:text, '\Celse:', a:lnum)
|
||||||
|
call s:debug("current line is else:")
|
||||||
|
return pair_col - 1
|
||||||
|
elseif s:starts_with(a:text, '\C\(\<do\>\|\<else\>\)', a:lnum)
|
||||||
|
call s:debug("current line is do/else")
|
||||||
|
return pair_col - 1
|
||||||
|
elseif s:starts_with(pair_text, '\C\(do\|else\):', pair_lnum)
|
||||||
|
call s:debug("inside do:/else:")
|
||||||
|
return pair_col - 1 + s:sw()
|
||||||
|
elseif pair_char == 'w'
|
||||||
|
call s:debug("inside with/do")
|
||||||
|
return pair_col + 4
|
||||||
|
elseif pair_char == 'd'
|
||||||
|
call s:debug("inside do/else|end")
|
||||||
|
return pair_col - 1 + s:sw()
|
||||||
|
else
|
||||||
|
call s:debug("inside else/end")
|
||||||
|
return s:do_handle_inside_pattern_match_block(pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s: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\>\)'
|
let keyword_pattern = '\C\%(\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<after\>\|\<catch\>\|\<rescue\>\|\<else\>\)'
|
||||||
if a:pair_lnum
|
if a:pair_lnum
|
||||||
" last line is a "receive" or something
|
" last line is a "receive" or something
|
||||||
if elixir#indent#starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum)
|
if s:starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum)
|
||||||
call elixir#indent#debug("prev nb line is keyword")
|
call s:debug("prev nb line is keyword")
|
||||||
return indent(a:prev_nb_lnum) + &sw
|
return indent(a:prev_nb_lnum) + s: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
|
else
|
||||||
call elixir#indent#debug("doesnt start with comment or contain ->")
|
return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
||||||
return indent(a:prev_nb_lnum)
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#do_handle_inside_fn(pair_lnum, _pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
|
" Implements indent for pattern-matching blocks (e.g. case, fn, with/else)
|
||||||
|
function! s:do_handle_inside_pattern_match_block(block_start_lnum, text, prev_nb_lnum, prev_nb_text)
|
||||||
|
if a:text =~ '->'
|
||||||
|
call s:debug("current line contains ->")
|
||||||
|
return indent(a:block_start_lnum) + s:sw()
|
||||||
|
elseif a:prev_nb_text =~ '->'
|
||||||
|
call s:debug("prev nb line contains ->")
|
||||||
|
return indent(a:prev_nb_lnum) + s:sw()
|
||||||
|
else
|
||||||
|
return indent(a:prev_nb_lnum)
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s: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 a:pair_lnum && a:pair_lnum != a:lnum
|
||||||
if elixir#indent#contains(a:text, '->')
|
return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_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
|
else
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
|
function! s:do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
|
||||||
" If in list...
|
" If in list...
|
||||||
if a:pair_lnum != 0 || a:pair_col != 0
|
if a:pair_lnum != 0 || a:pair_col != 0
|
||||||
let pair_text = getline(a:pair_lnum)
|
let pair_text = getline(a:pair_lnum)
|
||||||
@@ -298,24 +404,24 @@ function! elixir#indent#do_handle_inside_square_brace(pair_lnum, pair_col, _lnum
|
|||||||
if indent_pos != -1
|
if indent_pos != -1
|
||||||
return indent_pos + a:pair_col
|
return indent_pos + a:pair_col
|
||||||
else
|
else
|
||||||
return indent(a:pair_lnum) + &sw
|
return indent(a:pair_lnum) + s:sw()
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
|
function! s:do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
|
||||||
return indent(a:pair_lnum) + &sw
|
return indent(a:pair_lnum) + s:sw()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text)
|
function! s:do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text)
|
||||||
if a:pair_lnum
|
if a:pair_lnum
|
||||||
if elixir#indent#ends_with(a:prev_nb_text, '(', a:prev_nb_lnum)
|
if s:ends_with(a:prev_nb_text, '(', a:prev_nb_lnum)
|
||||||
return indent(a:prev_nb_lnum) + &sw
|
return indent(a:prev_nb_lnum) + s:sw()
|
||||||
elseif a:pair_lnum == a:prev_nb_lnum
|
elseif a:pair_lnum == a:prev_nb_lnum
|
||||||
" Align indent (e.g. "def add(a,")
|
" Align indent (e.g. "def add(a,")
|
||||||
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,')
|
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,')
|
||||||
if pos == -1
|
if pos == -1
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@@ -330,14 +436,14 @@ function! elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, _lnum, _tex
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_inside_generic_block(lnum, _text, prev_nb_lnum, prev_nb_text)
|
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('.'))")
|
let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end'), 'bW', "line('.') == ".a:lnum." || s:is_string_or_comment(line('.'), col('.'))", max([0, a:lnum - g:elixir_indent_max_lookbehind]))
|
||||||
if pair_lnum
|
if pair_lnum
|
||||||
" TODO: @jbodah 2017-03-29: this should probably be the case in *all*
|
" TODO: @jbodah 2017-03-29: this should probably be the case in *all*
|
||||||
" blocks
|
" blocks
|
||||||
if elixir#indent#ends_with(a:prev_nb_text, ',', a:prev_nb_lnum)
|
if s:ends_with(a:prev_nb_text, ',', a:prev_nb_lnum)
|
||||||
return indent(pair_lnum) + 2 * &sw
|
return indent(pair_lnum) + 2 * s:sw()
|
||||||
else
|
else
|
||||||
return indent(pair_lnum) + &sw
|
return indent(pair_lnum) + s:sw()
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
382
autoload/elm.vim
Normal file
382
autoload/elm.vim
Normal file
@@ -0,0 +1,382 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
||||||
|
|
||||||
|
let s:errors = []
|
||||||
|
|
||||||
|
function! s:elmOracle(...) abort
|
||||||
|
let l:project = finddir('elm-stuff/..', '.;')
|
||||||
|
if len(l:project) == 0
|
||||||
|
echoerr '`elm-stuff` not found! run `elm-package install` for autocomplete.'
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:filename = expand('%:p')
|
||||||
|
|
||||||
|
if a:0 == 0
|
||||||
|
let l:oldiskeyword = &iskeyword
|
||||||
|
" Some non obvious values used in 'iskeyword':
|
||||||
|
" @ = all alpha
|
||||||
|
" 48-57 = numbers 0 to 9
|
||||||
|
" @-@ = character @
|
||||||
|
" 124 = |
|
||||||
|
setlocal iskeyword=@,48-57,@-@,_,-,~,!,#,$,%,&,*,+,=,<,>,/,?,.,\\,124,^
|
||||||
|
let l:word = expand('<cword>')
|
||||||
|
let &iskeyword = l:oldiskeyword
|
||||||
|
else
|
||||||
|
let l:word = a:1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:infos = elm#Oracle(l:filename, l:word)
|
||||||
|
if v:shell_error != 0
|
||||||
|
call elm#util#EchoError("elm-oracle failed:\n\n", l:infos)
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:d = split(l:infos, '\n')
|
||||||
|
if len(l:d) > 0
|
||||||
|
return elm#util#DecodeJSON(l:d[0])
|
||||||
|
endif
|
||||||
|
|
||||||
|
return []
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Vim command to format Elm files with elm-format
|
||||||
|
function! elm#Format() abort
|
||||||
|
" check for elm-format
|
||||||
|
if elm#util#CheckBin('elm-format', 'https://github.com/avh4/elm-format') ==# ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" save cursor position, folds and many other things
|
||||||
|
let l:curw = {}
|
||||||
|
try
|
||||||
|
mkview!
|
||||||
|
catch
|
||||||
|
let l:curw = winsaveview()
|
||||||
|
endtry
|
||||||
|
|
||||||
|
" save our undo file to be restored after we are done.
|
||||||
|
let l:tmpundofile = tempname()
|
||||||
|
exe 'wundo! ' . l:tmpundofile
|
||||||
|
|
||||||
|
" write current unsaved buffer to a temporary file
|
||||||
|
let l:tmpname = tempname() . '.elm'
|
||||||
|
call writefile(getline(1, '$'), l:tmpname)
|
||||||
|
|
||||||
|
" call elm-format on the temporary file
|
||||||
|
let l:out = system('elm-format ' . l:tmpname . ' --output ' . l:tmpname)
|
||||||
|
|
||||||
|
" if there is no error
|
||||||
|
if v:shell_error == 0
|
||||||
|
try | silent undojoin | catch | endtry
|
||||||
|
|
||||||
|
" replace current file with temp file, then reload buffer
|
||||||
|
let l:old_fileformat = &fileformat
|
||||||
|
call rename(l:tmpname, expand('%'))
|
||||||
|
silent edit!
|
||||||
|
let &fileformat = l:old_fileformat
|
||||||
|
let &syntax = &syntax
|
||||||
|
elseif g:elm_format_fail_silently == 0
|
||||||
|
call elm#util#EchoLater('EchoError', 'elm-format:', l:out)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" save our undo history
|
||||||
|
silent! exe 'rundo ' . l:tmpundofile
|
||||||
|
call delete(l:tmpundofile)
|
||||||
|
|
||||||
|
" restore our cursor/windows positions, folds, etc..
|
||||||
|
if empty(l:curw)
|
||||||
|
silent! loadview
|
||||||
|
else
|
||||||
|
call winrestview(l:curw)
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Query elm-oracle and echo the type and docs for the word under the cursor.
|
||||||
|
function! elm#ShowDocs() abort
|
||||||
|
" check for the elm-oracle binary
|
||||||
|
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:response = s:elmOracle()
|
||||||
|
|
||||||
|
if len(l:response) > 0
|
||||||
|
let l:info = l:response[0]
|
||||||
|
redraws! | echohl Identifier | echon l:info.fullName | echohl None | echon ' : ' | echohl Function | echon l:info.signature | echohl None | echon "\n\n" . l:info.comment
|
||||||
|
else
|
||||||
|
call elm#util#Echo('elm-oracle:', '...no match found')
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Query elm-oracle and open the docs for the word under the cursor.
|
||||||
|
function! elm#BrowseDocs() abort
|
||||||
|
" check for the elm-oracle binary
|
||||||
|
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:response = s:elmOracle()
|
||||||
|
|
||||||
|
if len(l:response) > 0
|
||||||
|
let l:info = l:response[0]
|
||||||
|
call elm#util#OpenBrowser(l:info.href)
|
||||||
|
else
|
||||||
|
call elm#util#Echo('elm-oracle:', '...no match found')
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! elm#Syntastic(input) abort
|
||||||
|
let l:fixes = []
|
||||||
|
|
||||||
|
let l:bin = 'elm-make'
|
||||||
|
let l:format = '--report=json'
|
||||||
|
let l:input = shellescape(a:input)
|
||||||
|
let l:output = '--output=' . shellescape(syntastic#util#DevNull())
|
||||||
|
let l:command = l:bin . ' ' . l:format . ' ' . l:input . ' ' . l:output
|
||||||
|
let l:reports = s:ExecuteInRoot(l:command)
|
||||||
|
|
||||||
|
for l:report in split(l:reports, '\n')
|
||||||
|
if l:report[0] ==# '['
|
||||||
|
for l:error in elm#util#DecodeJSON(l:report)
|
||||||
|
if g:elm_syntastic_show_warnings == 0 && l:error.type ==? 'warning'
|
||||||
|
else
|
||||||
|
if a:input == l:error.file
|
||||||
|
call add(s:errors, l:error)
|
||||||
|
call add(l:fixes, {'filename': l:error.file,
|
||||||
|
\'valid': 1,
|
||||||
|
\'bufnr': bufnr('%'),
|
||||||
|
\'type': (l:error.type ==? 'error') ? 'E' : 'W',
|
||||||
|
\'lnum': l:error.region.start.line,
|
||||||
|
\'col': l:error.region.start.column,
|
||||||
|
\'text': l:error.overview})
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:fixes
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! elm#Build(input, output, show_warnings) abort
|
||||||
|
let s:errors = []
|
||||||
|
let l:fixes = []
|
||||||
|
let l:rawlines = []
|
||||||
|
|
||||||
|
let l:bin = 'elm-make'
|
||||||
|
let l:format = '--report=json'
|
||||||
|
let l:input = shellescape(a:input)
|
||||||
|
let l:output = '--output=' . shellescape(a:output)
|
||||||
|
let l:command = l:bin . ' ' . l:format . ' ' . l:input . ' ' . l:output
|
||||||
|
let l:reports = s:ExecuteInRoot(l:command)
|
||||||
|
|
||||||
|
for l:report in split(l:reports, '\n')
|
||||||
|
if l:report[0] ==# '['
|
||||||
|
for l:error in elm#util#DecodeJSON(l:report)
|
||||||
|
if a:show_warnings == 0 && l:error.type ==? 'warning'
|
||||||
|
else
|
||||||
|
call add(s:errors, l:error)
|
||||||
|
call add(l:fixes, {'filename': l:error.file,
|
||||||
|
\'valid': 1,
|
||||||
|
\'type': (l:error.type ==? 'error') ? 'E' : 'W',
|
||||||
|
\'lnum': l:error.region.start.line,
|
||||||
|
\'col': l:error.region.start.column,
|
||||||
|
\'text': l:error.overview})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
call add(l:rawlines, l:report)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let l:details = join(l:rawlines, "\n")
|
||||||
|
let l:lines = split(l:details, "\n")
|
||||||
|
if !empty(l:lines)
|
||||||
|
let l:overview = l:lines[0]
|
||||||
|
else
|
||||||
|
let l:overview = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:details ==# '' || l:details =~? '^Successfully.*'
|
||||||
|
else
|
||||||
|
call add(s:errors, {'overview': l:details, 'details': l:details})
|
||||||
|
call add(l:fixes, {'filename': expand('%', 1),
|
||||||
|
\'valid': 1,
|
||||||
|
\'type': 'E',
|
||||||
|
\'lnum': 0,
|
||||||
|
\'col': 0,
|
||||||
|
\'text': l:overview})
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:fixes
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Make the given file, or the current file if none is given.
|
||||||
|
function! elm#Make(...) abort
|
||||||
|
if elm#util#CheckBin('elm-make', 'http://elm-lang.org/install') ==# ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call elm#util#Echo('elm-make:', 'building...')
|
||||||
|
|
||||||
|
let l:input = (a:0 == 0) ? expand('%:p') : a:1
|
||||||
|
let l:fixes = elm#Build(l:input, g:elm_make_output_file, g:elm_make_show_warnings)
|
||||||
|
|
||||||
|
if len(l:fixes) > 0
|
||||||
|
call elm#util#EchoWarning('', 'found ' . len(l:fixes) . ' errors')
|
||||||
|
|
||||||
|
call setqflist(l:fixes, 'r')
|
||||||
|
cwindow
|
||||||
|
|
||||||
|
if get(g:, 'elm_jump_to_error', 1)
|
||||||
|
ll 1
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
call elm#util#EchoSuccess('', 'Sucessfully compiled')
|
||||||
|
|
||||||
|
call setqflist([])
|
||||||
|
cwindow
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Show the detail of the current error in the quickfix window.
|
||||||
|
function! elm#ErrorDetail() abort
|
||||||
|
if !empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") ==? "quickfix"'))
|
||||||
|
exec ':copen'
|
||||||
|
let l:linenr = line('.')
|
||||||
|
exec ':wincmd p'
|
||||||
|
if len(s:errors) > 0
|
||||||
|
let l:detail = s:errors[l:linenr-1].details
|
||||||
|
if l:detail ==# ''
|
||||||
|
let l:detail = s:errors[l:linenr-1].overview
|
||||||
|
endif
|
||||||
|
echo l:detail
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Open the elm repl in a subprocess.
|
||||||
|
function! elm#Repl() abort
|
||||||
|
" check for the elm-repl binary
|
||||||
|
if elm#util#CheckBin('elm-repl', 'http://elm-lang.org/install') ==# ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has('nvim')
|
||||||
|
term('elm-repl')
|
||||||
|
else
|
||||||
|
!elm-repl
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! elm#Oracle(filepath, word) abort
|
||||||
|
let l:bin = 'elm-oracle'
|
||||||
|
let l:filepath = shellescape(a:filepath)
|
||||||
|
let l:word = shellescape(a:word)
|
||||||
|
let l:command = l:bin . ' ' . l:filepath . ' ' . l:word
|
||||||
|
return s:ExecuteInRoot(l:command)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:fullComplete = ''
|
||||||
|
|
||||||
|
" Complete the current token using elm-oracle
|
||||||
|
function! elm#Complete(findstart, base) abort
|
||||||
|
" a:base is unused, but the callback function for completion expects 2 arguments
|
||||||
|
if a:findstart
|
||||||
|
let l:line = getline('.')
|
||||||
|
|
||||||
|
let l:idx = col('.') - 1
|
||||||
|
let l:start = 0
|
||||||
|
while l:idx > 0 && l:line[l:idx - 1] =~# '[a-zA-Z0-9_\.]'
|
||||||
|
if l:line[l:idx - 1] ==# '.' && l:start == 0
|
||||||
|
let l:start = l:idx
|
||||||
|
endif
|
||||||
|
let l:idx -= 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
if l:start == 0
|
||||||
|
let l:start = l:idx
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:fullComplete = l:line[l:idx : col('.')-2]
|
||||||
|
|
||||||
|
return l:start
|
||||||
|
else
|
||||||
|
" check for the elm-oracle binary
|
||||||
|
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:res = []
|
||||||
|
let l:response = s:elmOracle(s:fullComplete)
|
||||||
|
|
||||||
|
let l:detailed = get(g:, 'elm_detailed_complete', 0)
|
||||||
|
|
||||||
|
for l:r in l:response
|
||||||
|
let l:menu = ''
|
||||||
|
if l:detailed
|
||||||
|
let l:menu = ': ' . l:r.signature
|
||||||
|
endif
|
||||||
|
call add(l:res, {'word': l:r.name, 'menu': l:menu})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:res
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" If the current buffer contains a consoleRunner, run elm-test with it.
|
||||||
|
" Otherwise run elm-test in the root of your project which deafults to
|
||||||
|
" running 'elm-test tests/TestRunner'.
|
||||||
|
function! elm#Test() abort
|
||||||
|
if elm#util#CheckBin('elm-test', 'https://github.com/rtfeldman/node-elm-test') ==# ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if match(getline(1, '$'), 'consoleRunner') < 0
|
||||||
|
let l:out = s:ExecuteInRoot('elm-test')
|
||||||
|
call elm#util#EchoSuccess('elm-test', l:out)
|
||||||
|
else
|
||||||
|
let l:filepath = shellescape(expand('%:p'))
|
||||||
|
let l:out = s:ExecuteInRoot('elm-test ' . l:filepath)
|
||||||
|
call elm#util#EchoSuccess('elm-test', l:out)
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Returns the closest parent with an elm-package.json file.
|
||||||
|
function! elm#FindRootDirectory() abort
|
||||||
|
let l:elm_root = getbufvar('%', 'elmRoot')
|
||||||
|
if empty(l:elm_root)
|
||||||
|
let l:current_file = expand('%:p')
|
||||||
|
let l:dir_current_file = fnameescape(fnamemodify(l:current_file, ':h'))
|
||||||
|
let l:match = findfile('elm-package.json', l:dir_current_file . ';')
|
||||||
|
if empty(l:match)
|
||||||
|
let l:elm_root = ''
|
||||||
|
else
|
||||||
|
let l:elm_root = fnamemodify(l:match, ':p:h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:elm_root)
|
||||||
|
call setbufvar('%', 'elmRoot', l:elm_root)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return l:elm_root
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Executes a command in the project directory.
|
||||||
|
function! s:ExecuteInRoot(cmd) abort
|
||||||
|
let l:cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
|
||||||
|
let l:current_dir = getcwd()
|
||||||
|
let l:root_dir = elm#FindRootDirectory()
|
||||||
|
|
||||||
|
try
|
||||||
|
execute l:cd . fnameescape(l:root_dir)
|
||||||
|
let l:out = system(a:cmd)
|
||||||
|
finally
|
||||||
|
execute l:cd . fnameescape(l:current_dir)
|
||||||
|
endtry
|
||||||
|
|
||||||
|
return l:out
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
|
||||||
|
|
||||||
" System IO
|
|
||||||
|
|
||||||
" Craft a system command and run it, returning the output.
|
|
||||||
function! elm#io#system(program, args)
|
|
||||||
let cmd ="which " . a:program . " && " . a:program . " " . a:args
|
|
||||||
return system(cmd)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
endif
|
|
||||||
178
autoload/elm/util.vim
Normal file
178
autoload/elm/util.vim
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
||||||
|
|
||||||
|
" IsWin returns 1 if current OS is Windows or 0 otherwise
|
||||||
|
fun! elm#util#IsWin() abort
|
||||||
|
let l:win = ['win16', 'win32', 'win32unix', 'win64', 'win95']
|
||||||
|
for l:w in l:win
|
||||||
|
if (has(l:w))
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return 0
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! elm#util#CheckBin(bin, url) abort
|
||||||
|
let l:binpath = substitute(a:bin, '^\s*\(.\{-}\)\s*$', '\1', '')
|
||||||
|
|
||||||
|
if executable(l:binpath)
|
||||||
|
return l:binpath
|
||||||
|
endif
|
||||||
|
|
||||||
|
call elm#util#EchoWarning('elm-vim:', 'could not find ' . l:binpath . ' [' . a:url . ']')
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Determines the browser command to use
|
||||||
|
fun! s:get_browser_command() abort
|
||||||
|
let l:elm_browser_command = get(g:, 'elm_browser_command', '')
|
||||||
|
if l:elm_browser_command ==? ''
|
||||||
|
if elm#util#IsWin()
|
||||||
|
let l:elm_browser_command = '!start rundll32 url.dll,FileProtocolHandler %URL%'
|
||||||
|
elseif has('mac') || has('macunix') || has('gui_macvim') || system('uname') =~? '^darwin'
|
||||||
|
let l:elm_browser_command = 'open %URL%'
|
||||||
|
elseif executable('xdg-open')
|
||||||
|
let l:elm_browser_command = 'xdg-open %URL%'
|
||||||
|
elseif executable('firefox')
|
||||||
|
let l:elm_browser_command = 'firefox %URL% &'
|
||||||
|
else
|
||||||
|
let l:elm_browser_command = ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return l:elm_browser_command
|
||||||
|
endf
|
||||||
|
|
||||||
|
" OpenBrowser opens a url in the default browser
|
||||||
|
fun! elm#util#OpenBrowser(url) abort
|
||||||
|
let l:cmd = s:get_browser_command()
|
||||||
|
if len(l:cmd) == 0
|
||||||
|
redraw
|
||||||
|
echohl WarningMsg
|
||||||
|
echo "It seems that you don't have general web browser. Open URL below."
|
||||||
|
echohl None
|
||||||
|
echo a:url
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if l:cmd =~? '^!'
|
||||||
|
let l:cmd = substitute(l:cmd, '%URL%', '\=shellescape(a:url)', 'g')
|
||||||
|
silent! exec l:cmd
|
||||||
|
elseif l:cmd =~# '^:[A-Z]'
|
||||||
|
let l:cmd = substitute(l:cmd, '%URL%', '\=a:url', 'g')
|
||||||
|
exec l:cmd
|
||||||
|
else
|
||||||
|
let l:cmd = substitute(l:cmd, '%URL%', '\=shellescape(a:url)', 'g')
|
||||||
|
call system(l:cmd)
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" DecodeJSON decodes a string of json into a viml object
|
||||||
|
fun! elm#util#DecodeJSON(s) abort
|
||||||
|
let l:true = 1
|
||||||
|
let l:false = 0
|
||||||
|
let l:null = 0
|
||||||
|
return eval(a:s)
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Remove ANSI escape characters used for highlighting purposes
|
||||||
|
fun! s:strip_color(msg) abort
|
||||||
|
return substitute(a:msg, '\e\[[0-9;]\+[mK]', '', 'g')
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Print functions
|
||||||
|
fun! elm#util#Echo(title, msg) abort
|
||||||
|
redraws! | echon a:title . ' ' | echohl Identifier | echon s:strip_color(a:msg) | echohl None
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! elm#util#EchoSuccess(title, msg) abort
|
||||||
|
redraws! | echon a:title . ' ' | echohl Function | echon s:strip_color(a:msg) | echohl None
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! elm#util#EchoWarning(title, msg) abort
|
||||||
|
redraws! | echon a:title . ' ' | echohl WarningMsg | echon s:strip_color(a:msg) | echohl None
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! elm#util#EchoError(title, msg) abort
|
||||||
|
redraws! | echon a:title . ' ' | echohl ErrorMsg | echon s:strip_color(a:msg) | echohl None
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! elm#util#EchoLater(func_name, title, msg) abort
|
||||||
|
let s:echo_func_name = a:func_name
|
||||||
|
let s:echo_title = a:title
|
||||||
|
let s:echo_msg = a:msg
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! elm#util#EchoStored() abort
|
||||||
|
if exists('s:echo_func_name') && exists('s:echo_title') && exists('s:echo_msg')
|
||||||
|
call elm#util#{s:echo_func_name}(s:echo_title, s:echo_msg)
|
||||||
|
unlet s:echo_func_name
|
||||||
|
unlet s:echo_title
|
||||||
|
unlet s:echo_msg
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! elm#util#GoToModule(name)
|
||||||
|
if empty(a:name) | return | endif
|
||||||
|
if empty(matchstr(a:name, '^Native\.'))
|
||||||
|
let l:extension = '.elm'
|
||||||
|
else
|
||||||
|
let l:extension = '.js'
|
||||||
|
endif
|
||||||
|
let l:rel_path = substitute(a:name, '\.', '/', 'g') . l:extension
|
||||||
|
let l:root = elm#FindRootDirectory()
|
||||||
|
|
||||||
|
let l:module_file = s:findLocalModule(l:rel_path, l:root)
|
||||||
|
if !filereadable(l:module_file)
|
||||||
|
let l:module_file = s:findDependencyModule(l:rel_path, l:root)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if filereadable(l:module_file)
|
||||||
|
exec 'edit ' . fnameescape(l:module_file)
|
||||||
|
else
|
||||||
|
return s:error("Can't find module \"" . a:name . "\"")
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:findLocalModule(rel_path, root)
|
||||||
|
let l:package_json = a:root . '/elm-package.json'
|
||||||
|
if exists('*json_decode')
|
||||||
|
let l:package = json_decode(readfile(l:package_json))
|
||||||
|
let l:source_roots = l:package['source-directories']
|
||||||
|
else
|
||||||
|
" This is a fallback for vim's which do not support json_decode.
|
||||||
|
" It simply only looks in the 'src' subdirectory and fails otherwise.
|
||||||
|
let l:source_roots = ['src']
|
||||||
|
end
|
||||||
|
for l:source_root in l:source_roots
|
||||||
|
let l:file_path = a:root . '/' . l:source_root . '/' . a:rel_path
|
||||||
|
if !filereadable(l:file_path)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
return l:file_path
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:findDependencyModule(rel_path, root)
|
||||||
|
" If we are a dependency ourselves, we need to check our siblings.
|
||||||
|
" This is because elm package doesn't install dependencies recursively.
|
||||||
|
let l:root = substitute(a:root, '\/elm-stuff/packages.\+$', '', '')
|
||||||
|
|
||||||
|
" We naively craws the dependencies dir for any fitting module name.
|
||||||
|
" If it exists, we'll find it. If multiple filenames match,
|
||||||
|
" there's a chance we return the wrong one.
|
||||||
|
let l:module_paths = glob(l:root . '/elm-stuff/packages/**/' . a:rel_path, 0, 1)
|
||||||
|
if len(l:module_paths) > 0
|
||||||
|
return l:module_paths[0]
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Using the built-in :echoerr prints a stacktrace, which isn't that nice.
|
||||||
|
" From: https://github.com/moll/vim-node/blob/master/autoload/node.vim
|
||||||
|
function! s:error(msg)
|
||||||
|
echohl ErrorMsg
|
||||||
|
echomsg a:msg
|
||||||
|
echohl NONE
|
||||||
|
let v:errmsg = a:msg
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
7
autoload/racket.vim
Normal file
7
autoload/racket.vim
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
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
|
||||||
@@ -3,6 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
|||||||
" Author: Kevin Ballard
|
" Author: Kevin Ballard
|
||||||
" Description: Helper functions for Rust commands/mappings
|
" Description: Helper functions for Rust commands/mappings
|
||||||
" Last Modified: May 27, 2014
|
" Last Modified: May 27, 2014
|
||||||
|
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||||
|
|
||||||
" Jump {{{1
|
" Jump {{{1
|
||||||
|
|
||||||
@@ -366,53 +367,57 @@ endfunction
|
|||||||
" gist.vim available under the BSD license, available at
|
" gist.vim available under the BSD license, available at
|
||||||
" http://github.com/mattn/gist-vim
|
" http://github.com/mattn/gist-vim
|
||||||
function! s:has_webapi()
|
function! s:has_webapi()
|
||||||
if !exists("*webapi#http#post")
|
if !exists("*webapi#http#post")
|
||||||
try
|
try
|
||||||
call webapi#http#post()
|
call webapi#http#post()
|
||||||
catch
|
catch
|
||||||
endtry
|
endtry
|
||||||
endif
|
endif
|
||||||
return exists("*webapi#http#post")
|
return exists("*webapi#http#post")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! rust#Play(count, line1, line2, ...) abort
|
function! rust#Play(count, line1, line2, ...) abort
|
||||||
redraw
|
redraw
|
||||||
|
|
||||||
let l:rust_playpen_url = get(g:, 'rust_playpen_url', 'https://play.rust-lang.org/')
|
let l:rust_playpen_url = get(g:, 'rust_playpen_url', 'https://play.rust-lang.org/')
|
||||||
let l:rust_shortener_url = get(g:, 'rust_shortener_url', 'https://is.gd/')
|
let l:rust_shortener_url = get(g:, 'rust_shortener_url', 'https://is.gd/')
|
||||||
|
|
||||||
if !s:has_webapi()
|
if !s:has_webapi()
|
||||||
echohl ErrorMsg | echomsg ':RustPlay depends on webapi.vim (https://github.com/mattn/webapi-vim)' | echohl None
|
echohl ErrorMsg | echomsg ':RustPlay depends on webapi.vim (https://github.com/mattn/webapi-vim)' | echohl None
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let bufname = bufname('%')
|
let bufname = bufname('%')
|
||||||
if a:count < 1
|
if a:count < 1
|
||||||
let content = join(getline(a:line1, a:line2), "\n")
|
let content = join(getline(a:line1, a:line2), "\n")
|
||||||
else
|
else
|
||||||
let save_regcont = @"
|
let save_regcont = @"
|
||||||
let save_regtype = getregtype('"')
|
let save_regtype = getregtype('"')
|
||||||
silent! normal! gvy
|
silent! normal! gvy
|
||||||
let content = @"
|
let content = @"
|
||||||
call setreg('"', save_regcont, save_regtype)
|
call setreg('"', save_regcont, save_regtype)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let body = l:rust_playpen_url."?code=".webapi#http#encodeURI(content)
|
let body = l:rust_playpen_url."?code=".webapi#http#encodeURI(content)
|
||||||
|
|
||||||
if strlen(body) > 5000
|
if strlen(body) > 5000
|
||||||
echohl ErrorMsg | echomsg 'Buffer too large, max 5000 encoded characters ('.strlen(body).')' | echohl None
|
echohl ErrorMsg | echomsg 'Buffer too large, max 5000 encoded characters ('.strlen(body).')' | echohl None
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let payload = "format=simple&url=".webapi#http#encodeURI(body)
|
let payload = "format=simple&url=".webapi#http#encodeURI(body)
|
||||||
let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {})
|
let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {})
|
||||||
let url = res.content
|
let url = res.content
|
||||||
|
|
||||||
redraw | echomsg 'Done: '.url
|
if exists('g:rust_clip_command')
|
||||||
|
call system(g:rust_clip_command, url)
|
||||||
|
endif
|
||||||
|
|
||||||
|
redraw | echomsg 'Done: '.url
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
" vim: set noet sw=4 ts=4:
|
" vim: set noet sw=8 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -3,108 +3,109 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
|||||||
" Author: Stephen Sugden <stephen@stephensugden.com>
|
" Author: Stephen Sugden <stephen@stephensugden.com>
|
||||||
"
|
"
|
||||||
" Adapted from https://github.com/fatih/vim-go
|
" Adapted from https://github.com/fatih/vim-go
|
||||||
|
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||||
|
|
||||||
if !exists("g:rustfmt_autosave")
|
if !exists("g:rustfmt_autosave")
|
||||||
let g:rustfmt_autosave = 0
|
let g:rustfmt_autosave = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !exists("g:rustfmt_command")
|
if !exists("g:rustfmt_command")
|
||||||
let g:rustfmt_command = "rustfmt"
|
let g:rustfmt_command = "rustfmt"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !exists("g:rustfmt_options")
|
if !exists("g:rustfmt_options")
|
||||||
let g:rustfmt_options = ""
|
let g:rustfmt_options = ""
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !exists("g:rustfmt_fail_silently")
|
if !exists("g:rustfmt_fail_silently")
|
||||||
let g:rustfmt_fail_silently = 0
|
let g:rustfmt_fail_silently = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:got_fmt_error = 0
|
let s:got_fmt_error = 0
|
||||||
|
|
||||||
function! s:RustfmtCommandRange(filename, line1, line2)
|
function! s:RustfmtCommandRange(filename, line1, line2)
|
||||||
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
|
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
|
||||||
return printf("%s %s --write-mode=overwrite --file-lines '[%s]'", g:rustfmt_command, g:rustfmt_options, json_encode(l:arg))
|
return printf("%s %s --write-mode=overwrite --file-lines '[%s]'", g:rustfmt_command, g:rustfmt_options, json_encode(l:arg))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:RustfmtCommand(filename)
|
function! s:RustfmtCommand(filename)
|
||||||
return g:rustfmt_command . " --write-mode=overwrite " . g:rustfmt_options . " " . shellescape(a:filename)
|
return g:rustfmt_command . " --write-mode=overwrite " . g:rustfmt_options . " " . shellescape(a:filename)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:RunRustfmt(command, curw, tmpname)
|
function! s:RunRustfmt(command, curw, tmpname)
|
||||||
if exists("*systemlist")
|
if exists("*systemlist")
|
||||||
let out = systemlist(a:command)
|
let out = systemlist(a:command)
|
||||||
else
|
else
|
||||||
let out = split(system(a:command), '\r\?\n')
|
let out = split(system(a:command), '\r\?\n')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if v:shell_error == 0 || v:shell_error == 3
|
if v:shell_error == 0 || v:shell_error == 3
|
||||||
" remove undo point caused via BufWritePre
|
" remove undo point caused via BufWritePre
|
||||||
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(a:tmpname, expand('%'))
|
||||||
silent edit!
|
silent edit!
|
||||||
let &syntax = &syntax
|
let &syntax = &syntax
|
||||||
|
|
||||||
" only clear location list if it was previously filled to prevent
|
" only clear location list if it was previously filled to prevent
|
||||||
" clobbering other additions
|
" clobbering other additions
|
||||||
if s:got_fmt_error
|
if s:got_fmt_error
|
||||||
let s:got_fmt_error = 0
|
let s:got_fmt_error = 0
|
||||||
call setloclist(0, [])
|
call setloclist(0, [])
|
||||||
lwindow
|
lwindow
|
||||||
endif
|
endif
|
||||||
elseif g:rustfmt_fail_silently == 0
|
elseif g:rustfmt_fail_silently == 0
|
||||||
" otherwise get the errors and put them in the location list
|
" otherwise get the errors and put them in the location list
|
||||||
let errors = []
|
let errors = []
|
||||||
|
|
||||||
for line in out
|
for line in out
|
||||||
" src/lib.rs:13:5: 13:10 error: expected `,`, or `}`, found `value`
|
" src/lib.rs:13:5: 13:10 error: expected `,`, or `}`, found `value`
|
||||||
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\):\s*\(\d\+:\d\+\s*\)\?\s*error: \(.*\)')
|
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\):\s*\(\d\+:\d\+\s*\)\?\s*error: \(.*\)')
|
||||||
if !empty(tokens)
|
if !empty(tokens)
|
||||||
call add(errors, {"filename": @%,
|
call add(errors, {"filename": @%,
|
||||||
\"lnum": tokens[2],
|
\"lnum": tokens[2],
|
||||||
\"col": tokens[3],
|
\"col": tokens[3],
|
||||||
\"text": tokens[5]})
|
\"text": tokens[5]})
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
if empty(errors)
|
if empty(errors)
|
||||||
% | " Couldn't detect rustfmt error format, output errors
|
% | " Couldn't detect rustfmt error format, output errors
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !empty(errors)
|
if !empty(errors)
|
||||||
call setloclist(0, errors, 'r')
|
call setloclist(0, errors, 'r')
|
||||||
echohl Error | echomsg "rustfmt returned error" | echohl None
|
echohl Error | echomsg "rustfmt returned error" | echohl None
|
||||||
endif
|
endif
|
||||||
|
|
||||||
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(a:tmpname)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call winrestview(a:curw)
|
call winrestview(a:curw)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! rustfmt#FormatRange(line1, line2)
|
function! rustfmt#FormatRange(line1, line2)
|
||||||
let l:curw = winsaveview()
|
let l:curw = winsaveview()
|
||||||
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
|
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
|
||||||
call writefile(getline(1, '$'), l:tmpname)
|
call writefile(getline(1, '$'), l:tmpname)
|
||||||
|
|
||||||
let command = s:RustfmtCommandRange(l:tmpname, a:line1, a:line2)
|
let command = s:RustfmtCommandRange(l:tmpname, a:line1, a:line2)
|
||||||
|
|
||||||
call s:RunRustfmt(command, l:curw, l:tmpname)
|
call s:RunRustfmt(command, l:curw, l:tmpname)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! rustfmt#Format()
|
function! rustfmt#Format()
|
||||||
let l:curw = winsaveview()
|
let l:curw = winsaveview()
|
||||||
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
|
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
|
||||||
call writefile(getline(1, '$'), l:tmpname)
|
call writefile(getline(1, '$'), l:tmpname)
|
||||||
|
|
||||||
let command = s:RustfmtCommand(l:tmpname)
|
let command = s:RustfmtCommand(l:tmpname)
|
||||||
|
|
||||||
call s:RunRustfmt(command, l:curw, l:tmpname)
|
call s:RunRustfmt(command, l:curw, l:tmpname)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
18
autoload/vifm/edit.vim
Normal file
18
autoload/vifm/edit.vim
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
||||||
|
|
||||||
|
" common functions for vifm command-line editing buffer filetype plugins
|
||||||
|
" Maintainer: xaizek <xaizek@posteo.net>
|
||||||
|
" Last Change: August 18, 2013
|
||||||
|
|
||||||
|
" Prepare buffer
|
||||||
|
function! vifm#edit#Init()
|
||||||
|
" Mappings for quick leaving the buffer (behavior similar to Command line
|
||||||
|
" buffer in Vim)
|
||||||
|
nnoremap <buffer> <cr> :copy 0 \| wq<cr>
|
||||||
|
imap <buffer> <cr> <esc><cr>
|
||||||
|
|
||||||
|
" Start buffer editing in insert mode
|
||||||
|
startinsert
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -587,7 +587,7 @@ let g:xmldata_html5 = {
|
|||||||
\ ],
|
\ ],
|
||||||
\ '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-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', '']})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'ins': [
|
\ 'ins': [
|
||||||
\ flow_elements,
|
\ flow_elements,
|
||||||
|
|||||||
19
build
19
build
@@ -113,31 +113,33 @@ PACKS="
|
|||||||
yaml:stephpy/vim-yaml
|
yaml:stephpy/vim-yaml
|
||||||
ansible:pearofducks/ansible-vim
|
ansible:pearofducks/ansible-vim
|
||||||
arduino:sudar/vim-arduino-syntax
|
arduino:sudar/vim-arduino-syntax
|
||||||
|
autohotkey:hnamikaw/vim-autohotkey
|
||||||
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
|
caddyfile:isobit/vim-caddyfile
|
||||||
cjsx:mtscout6/vim-cjsx
|
cjsx:mtscout6/vim-cjsx
|
||||||
clojure:guns/vim-clojure-static
|
clojure:guns/vim-clojure-static
|
||||||
|
cmake:pboettch/vim-cmake-syntax
|
||||||
coffee-script:kchmck/vim-coffee-script
|
coffee-script:kchmck/vim-coffee-script
|
||||||
cryptol:victoredwardocallaghan/cryptol.vim
|
cryptol:victoredwardocallaghan/cryptol.vim
|
||||||
crystal:rhysd/vim-crystal
|
crystal:rhysd/vim-crystal
|
||||||
cql:elubow/cql-vim
|
cql:elubow/cql-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:docker/docker::/contrib/syntax/vim/
|
||||||
elixir:elixir-lang/vim-elixir
|
elixir:elixir-lang/vim-elixir
|
||||||
elm:lambdatoast/elm.vim
|
elm:ElmCast/elm-vim
|
||||||
emberscript:yalesov/vim-ember-script
|
emberscript:yalesov/vim-ember-script
|
||||||
emblem:yalesov/vim-emblem
|
emblem:yalesov/vim-emblem
|
||||||
erlang:vim-erlang/vim-erlang-runtime
|
erlang:vim-erlang/vim-erlang-runtime
|
||||||
fish:dag/vim-fish
|
fish:dag/vim-fish
|
||||||
|
fsharp:fsharp/vim-fsharp:_BASIC
|
||||||
git:tpope/vim-git
|
git:tpope/vim-git
|
||||||
|
gmpl:maelvalais/gmpl.vim
|
||||||
glsl:tikhomirov/vim-glsl
|
glsl:tikhomirov/vim-glsl
|
||||||
gnuplot:vim-scripts/gnuplot-syntax-highlighting
|
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:sheerun/vim-haml
|
||||||
handlebars:mustache/vim-mustache-handlebars
|
handlebars:mustache/vim-mustache-handlebars
|
||||||
@@ -147,6 +149,7 @@ PACKS="
|
|||||||
i3:PotatoesMaster/i3-vim-syntax
|
i3:PotatoesMaster/i3-vim-syntax
|
||||||
jasmine:glanotte/vim-jasmine
|
jasmine:glanotte/vim-jasmine
|
||||||
javascript:pangloss/vim-javascript:_JAVASCRIPT
|
javascript:pangloss/vim-javascript:_JAVASCRIPT
|
||||||
|
jenkins:martinda/Jenkinsfile-vim-syntax
|
||||||
json:elzr/vim-json
|
json:elzr/vim-json
|
||||||
jst:briancollins/vim-jst
|
jst:briancollins/vim-jst
|
||||||
jsx:mxw/vim-jsx:_ALL
|
jsx:mxw/vim-jsx:_ALL
|
||||||
@@ -162,7 +165,7 @@ PACKS="
|
|||||||
mathematica:rsmenon/vim-mathematica
|
mathematica:rsmenon/vim-mathematica
|
||||||
nginx:chr4/nginx.vim
|
nginx:chr4/nginx.vim
|
||||||
nim:zah/nim.vim:_BASIC
|
nim:zah/nim.vim:_BASIC
|
||||||
nix:spwhitt/vim-nix
|
nix:LnL7/vim-nix
|
||||||
objc:b4winckler/vim-objc
|
objc:b4winckler/vim-objc
|
||||||
ocaml:jrk/vim-ocaml
|
ocaml:jrk/vim-ocaml
|
||||||
octave:vim-scripts/octave.vim--
|
octave:vim-scripts/octave.vim--
|
||||||
@@ -175,11 +178,12 @@ PACKS="
|
|||||||
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:purescript-contrib/purescript-vim
|
||||||
python:mitsuhiko/vim-python-combined
|
python:mitsuhiko/vim-python-combined
|
||||||
python-compiler:aliev/vim-compiler-python
|
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
|
raml:IN3D/vim-raml
|
||||||
ragel:jneen/ragel.vim
|
ragel:jneen/ragel.vim
|
||||||
rspec:sheerun/rspec.vim
|
rspec:sheerun/rspec.vim
|
||||||
@@ -189,7 +193,7 @@ PACKS="
|
|||||||
scala:derekwyatt/vim-scala
|
scala:derekwyatt/vim-scala
|
||||||
scss:cakebaker/scss-syntax.vim
|
scss:cakebaker/scss-syntax.vim
|
||||||
slim:slim-template/vim-slim
|
slim:slim-template/vim-slim
|
||||||
solidity:ethereum/vim-solidity
|
solidity:tomlion/vim-solidity
|
||||||
stylus:wavded/vim-stylus
|
stylus:wavded/vim-stylus
|
||||||
swift:keith/swift.vim
|
swift:keith/swift.vim
|
||||||
sxhkd:baskerville/vim-sxhkdrc
|
sxhkd:baskerville/vim-sxhkdrc
|
||||||
@@ -205,6 +209,7 @@ PACKS="
|
|||||||
vala:arrufat/vala.vim
|
vala:arrufat/vala.vim
|
||||||
vbnet:vim-scripts/vbnet.vim
|
vbnet:vim-scripts/vbnet.vim
|
||||||
vcl:smerrill/vcl-vim-plugin
|
vcl:smerrill/vcl-vim-plugin
|
||||||
|
vifm:vifm/vifm.vim
|
||||||
vue:posva/vim-vue
|
vue:posva/vim-vue
|
||||||
vm:lepture/vim-velocity
|
vm:lepture/vim-velocity
|
||||||
xls:vim-scripts/XSLT-syntax
|
xls:vim-scripts/XSLT-syntax
|
||||||
|
|||||||
@@ -4,21 +4,25 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
|||||||
" Compiler: Cargo Compiler
|
" Compiler: Cargo Compiler
|
||||||
" Maintainer: Damien Radtke <damienradtke@gmail.com>
|
" Maintainer: Damien Radtke <damienradtke@gmail.com>
|
||||||
" Latest Revision: 2014 Sep 24
|
" Latest Revision: 2014 Sep 24
|
||||||
|
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||||
|
|
||||||
if exists('current_compiler')
|
if exists('current_compiler')
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
runtime compiler/rustc.vim
|
runtime compiler/rustc.vim
|
||||||
let current_compiler = "cargo"
|
let current_compiler = "cargo"
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
if exists(':CompilerSet') != 2
|
if exists(':CompilerSet') != 2
|
||||||
command -nargs=* CompilerSet setlocal <args>
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists('g:cargo_makeprg_params')
|
if exists('g:cargo_makeprg_params')
|
||||||
execute 'CompilerSet makeprg=cargo\ '.escape(g:cargo_makeprg_params, ' \|"').'\ $*'
|
execute 'CompilerSet makeprg=cargo\ '.escape(g:cargo_makeprg_params, ' \|"').'\ $*'
|
||||||
else
|
else
|
||||||
CompilerSet makeprg=cargo\ $*
|
CompilerSet makeprg=cargo\ $*
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Ignore general cargo progress messages
|
" Ignore general cargo progress messages
|
||||||
@@ -27,6 +31,11 @@ CompilerSet errorformat+=
|
|||||||
\%-G%\\s%#Compiling%.%#,
|
\%-G%\\s%#Compiling%.%#,
|
||||||
\%-G%\\s%#Finished%.%#,
|
\%-G%\\s%#Finished%.%#,
|
||||||
\%-G%\\s%#error:\ Could\ not\ compile\ %.%#,
|
\%-G%\\s%#error:\ Could\ not\ compile\ %.%#,
|
||||||
\%-G%\\s%#To\ learn\ more\\,%.%#
|
\%-G%\\s%#To\ learn\ more\\,%.%#,
|
||||||
|
\%-Gnote:\ Run\ with\ \`RUST_BACKTRACE=%.%#,
|
||||||
|
\%.%#panicked\ at\ \\'%m\\'\\,\ %f:%l
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
|
|||||||
"
|
"
|
||||||
" compiler/go.vim: Vim compiler file for Go.
|
" compiler/go.vim: Vim compiler file for Go.
|
||||||
|
|
||||||
if exists("current_compiler")
|
if exists("g:current_compiler")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let current_compiler = "go"
|
let g:current_compiler = "go"
|
||||||
|
|
||||||
if exists(":CompilerSet") != 2
|
if exists(":CompilerSet") != 2
|
||||||
command -nargs=* CompilerSet setlocal <args>
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
|||||||
@@ -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%\\&%.%#%\\D:%\\d%#:%.%#,
|
||||||
\%\\s%##\ %f:%l%\\&%.%#%\\D:%.%#,
|
\%\\s%##\ %f:%l%\\&%.%#%\\D:%\\d%#,
|
||||||
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%.%#,
|
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
|
||||||
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%.%#,
|
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
|
||||||
\%\\s%#%f:%l:,
|
\%\\s%#%f:%l:,
|
||||||
\%m\ [%f:%l]:,
|
\%m\ [%f:%l]:,
|
||||||
\%+Erake\ aborted!,
|
\%+Erake\ aborted!,
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
|||||||
" Compiler: Rust Compiler
|
" Compiler: Rust Compiler
|
||||||
" Maintainer: Chris Morgan <me@chrismorgan.info>
|
" Maintainer: Chris Morgan <me@chrismorgan.info>
|
||||||
" Latest Revision: 2013 Jul 12
|
" Latest Revision: 2013 Jul 12
|
||||||
|
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||||
|
|
||||||
if exists("current_compiler")
|
if exists("current_compiler")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let current_compiler = "rustc"
|
let current_compiler = "rustc"
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,18 @@ if exists(":CompilerSet") != 2
|
|||||||
command! -nargs=* CompilerSet setlocal <args>
|
command! -nargs=* CompilerSet setlocal <args>
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let &l:makeprg = g:typescript_compiler_binary . ' ' . g:typescript_compiler_options . ' $* %'
|
let s:cpo_save = &cpo
|
||||||
|
set cpo-=C
|
||||||
|
|
||||||
|
execute 'CompilerSet makeprg='
|
||||||
|
\ . escape(g:typescript_compiler_binary, ' ')
|
||||||
|
\ . '\ '
|
||||||
|
\ . escape(g:typescript_compiler_options, ' ')
|
||||||
|
\ . '\ $*\ %'
|
||||||
|
|
||||||
CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m
|
CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -9,3 +9,7 @@ if !exists('g:vim_json_syntax_conceal')
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let g:filetype_euphoria = 'elixir'
|
let g:filetype_euphoria = 'elixir'
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
autocmd BufNewFile,BufReadPost *.vb setlocal filetype=vbnet
|
||||||
|
augroup END
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
|
|||||||
|
|
||||||
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,jsComment fold
|
||||||
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster
|
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster,jsComment fold
|
||||||
syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster
|
syntax region jsFlowExactObject contained matchgroup=jsFlowNoise start=/{|/ end=/|}/ contains=@jsFlowCluster,jsComment fold
|
||||||
|
syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster keepend fold
|
||||||
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
|
||||||
@@ -12,18 +13,18 @@ syntax match jsFlowTypeCustom contained /[0-9a-zA-Z_.]*/ skipwhite skipemp
|
|||||||
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 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 keyword jsFlowImportType contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup
|
||||||
syntax match jsFlowWildcard contained /*/
|
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,jsFlowArrow,jsFlowReturnParens
|
||||||
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 fold
|
||||||
syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp
|
syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp fold
|
||||||
syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp
|
syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp,jsFlowReturnArrow fold
|
||||||
|
syntax match jsFlowReturnArrow contained /=>/ skipwhite skipempty nextgroup=@jsFlowReturnCluster
|
||||||
syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp
|
syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp
|
||||||
syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword
|
syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword,jsFlowReturnObject
|
||||||
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 match jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=jsFuncBlock
|
||||||
@@ -32,7 +33,8 @@ syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ e
|
|||||||
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\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend
|
||||||
syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression,jsFlowGroup,jsFlowMaybe
|
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/=/ end=/[\n;]/ contains=@jsFlowCluster,jsFlowGroup,jsFlowMaybe
|
||||||
|
syntax match jsFlowTypeOperator contained /=/ containedin=jsFlowTypeValue
|
||||||
syntax match jsFlowTypeOperator contained /=/
|
syntax match jsFlowTypeOperator contained /=/
|
||||||
syntax keyword jsFlowTypeKeyword contained type
|
syntax keyword jsFlowTypeKeyword contained type
|
||||||
|
|
||||||
@@ -42,12 +44,18 @@ syntax region jsFlowClassDef contained start=/:/ end=/\%(\s*[,=;)\n]\)
|
|||||||
|
|
||||||
syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString
|
syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString
|
||||||
syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster
|
syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster
|
||||||
syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise
|
syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise fold
|
||||||
|
|
||||||
syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend
|
" NOTE: It appears the nextgroup was causing a ton of breakages... testing it
|
||||||
|
" witout a nextgroup, but keeping this arround for reference incase something breaks
|
||||||
|
" syntax match jsFlowMaybe contained /?/ nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments,jsFlowObject,jsFlowReturnObject extend keepend
|
||||||
|
syntax match jsFlowMaybe contained /?/
|
||||||
|
syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend fold
|
||||||
|
|
||||||
syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn
|
syntax region jsFlowParenAnnotation contained start=/:/ end=/[,=)]\@=/ containedin=jsParen contains=@jsFlowCluster
|
||||||
syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard
|
|
||||||
|
syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn,jsFlowReturnArrow
|
||||||
|
syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowExactObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard
|
||||||
|
|
||||||
if version >= 508 || !exists("did_javascript_syn_inits")
|
if version >= 508 || !exists("did_javascript_syn_inits")
|
||||||
if version < 508
|
if version < 508
|
||||||
@@ -64,9 +72,11 @@ if version >= 508 || !exists("did_javascript_syn_inits")
|
|||||||
HiLink jsFlowTypeof PreProc
|
HiLink jsFlowTypeof PreProc
|
||||||
HiLink jsFlowArray PreProc
|
HiLink jsFlowArray PreProc
|
||||||
HiLink jsFlowObject PreProc
|
HiLink jsFlowObject PreProc
|
||||||
|
HiLink jsFlowExactObject PreProc
|
||||||
HiLink jsFlowParens PreProc
|
HiLink jsFlowParens PreProc
|
||||||
HiLink jsFlowGroup PreProc
|
HiLink jsFlowGroup PreProc
|
||||||
HiLink jsFlowReturn PreProc
|
HiLink jsFlowReturn PreProc
|
||||||
|
HiLink jsFlowParenAnnotation PreProc
|
||||||
HiLink jsFlowReturnObject jsFlowReturn
|
HiLink jsFlowReturnObject jsFlowReturn
|
||||||
HiLink jsFlowReturnArray jsFlowArray
|
HiLink jsFlowReturnArray jsFlowArray
|
||||||
HiLink jsFlowReturnParens jsFlowParens
|
HiLink jsFlowReturnParens jsFlowParens
|
||||||
@@ -75,9 +85,10 @@ if version >= 508 || !exists("did_javascript_syn_inits")
|
|||||||
HiLink jsFlowClassGroup PreProc
|
HiLink jsFlowClassGroup PreProc
|
||||||
HiLink jsFlowArrowArguments PreProc
|
HiLink jsFlowArrowArguments PreProc
|
||||||
HiLink jsFlowArrow PreProc
|
HiLink jsFlowArrow PreProc
|
||||||
|
HiLink jsFlowReturnArrow PreProc
|
||||||
HiLink jsFlowTypeStatement PreProc
|
HiLink jsFlowTypeStatement PreProc
|
||||||
HiLink jsFlowTypeKeyword PreProc
|
HiLink jsFlowTypeKeyword PreProc
|
||||||
HiLink jsFlowTypeOperator PreProc
|
HiLink jsFlowTypeOperator Operator
|
||||||
HiLink jsFlowMaybe PreProc
|
HiLink jsFlowMaybe PreProc
|
||||||
HiLink jsFlowReturnMaybe PreProc
|
HiLink jsFlowReturnMaybe PreProc
|
||||||
HiLink jsFlowClassProperty jsClassProperty
|
HiLink jsFlowClassProperty jsClassProperty
|
||||||
@@ -86,10 +97,12 @@ if version >= 508 || !exists("did_javascript_syn_inits")
|
|||||||
HiLink jsFlowInterface PreProc
|
HiLink jsFlowInterface PreProc
|
||||||
HiLink jsFlowNoise Noise
|
HiLink jsFlowNoise Noise
|
||||||
HiLink jsFlowObjectKey jsObjectKey
|
HiLink jsFlowObjectKey jsObjectKey
|
||||||
HiLink jsFlowOrOperator PreProc
|
HiLink jsFlowOrOperator jsOperator
|
||||||
HiLink jsFlowReturnOrOp jsFlowOrOperator
|
HiLink jsFlowReturnOrOp jsFlowOrOperator
|
||||||
HiLink jsFlowWildcard PreProc
|
HiLink jsFlowWildcard PreProc
|
||||||
HiLink jsFlowWildcardReturn PreProc
|
HiLink jsFlowWildcardReturn PreProc
|
||||||
|
HiLink jsFlowImportType PreProc
|
||||||
|
HiLink jsFlowTypeValue PreProc
|
||||||
delcommand HiLink
|
delcommand HiLink
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|
|
|||||||
" 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)
|
||||||
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 match jsDocTags contained "@\(abstract\|access\|accessor\|async\|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 region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
|
||||||
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
|
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ if !exists('g:vim_json_syntax_conceal')
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let g:filetype_euphoria = 'elixir'
|
let g:filetype_euphoria = 'elixir'
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
autocmd BufNewFile,BufReadPost *.vb setlocal filetype=vbnet
|
||||||
|
augroup END
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" apiblueprint:sheerun/apiblueprint.vim
|
" apiblueprint:sheerun/apiblueprint.vim
|
||||||
autocmd BufReadPost,BufNewFile *.apib set filetype=apiblueprint
|
autocmd BufReadPost,BufNewFile *.apib set filetype=apiblueprint
|
||||||
@@ -56,6 +60,10 @@ augroup filetypedetect
|
|||||||
au BufRead,BufNewFile *.ino,*.pde set filetype=arduino
|
au BufRead,BufNewFile *.ino,*.pde set filetype=arduino
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" autohotkey:hnamikaw/vim-autohotkey
|
||||||
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" blade:jwalton512/vim-blade
|
" blade:jwalton512/vim-blade
|
||||||
autocmd BufNewFile,BufRead *.blade.php set filetype=blade
|
autocmd BufNewFile,BufRead *.blade.php set filetype=blade
|
||||||
@@ -70,7 +78,7 @@ augroup filetypedetect
|
|||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" caddyfile:joshglendenning/vim-caddyfile
|
" caddyfile:isobit/vim-caddyfile
|
||||||
au BufNewFile,BufRead Caddyfile set ft=caddyfile
|
au BufNewFile,BufRead Caddyfile set ft=caddyfile
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
@@ -87,6 +95,10 @@ augroup filetypedetect
|
|||||||
autocmd BufNewFile,BufRead *.clj,*.cljs,*.edn,*.cljx,*.cljc,{build,profile}.boot setlocal filetype=clojure
|
autocmd BufNewFile,BufRead *.clj,*.cljs,*.edn,*.cljx,*.cljc,{build,profile}.boot setlocal filetype=clojure
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" cmake:pboettch/vim-cmake-syntax
|
||||||
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" coffee-script:kchmck/vim-coffee-script
|
" coffee-script:kchmck/vim-coffee-script
|
||||||
" Language: CoffeeScript
|
" Language: CoffeeScript
|
||||||
@@ -146,10 +158,6 @@ if has("autocmd")
|
|||||||
endif
|
endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
|
||||||
" css:JulesWang/css.vim
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" cucumber:tpope/vim-cucumber
|
" cucumber:tpope/vim-cucumber
|
||||||
" Cucumber
|
" Cucumber
|
||||||
@@ -183,8 +191,10 @@ endfunction
|
|||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" elm:lambdatoast/elm.vim
|
" elm:ElmCast/elm-vim
|
||||||
au BufNewFile,BufRead *.elm set filetype=elm
|
" detection for Elm (http://elm-lang.org/)
|
||||||
|
|
||||||
|
au BufRead,BufNewFile *.elm set filetype=elm
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
@@ -257,6 +267,12 @@ autocmd BufNewFile ~/.config/fish/functions/*.fish
|
|||||||
\ 2
|
\ 2
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" fsharp:fsharp/vim-fsharp:_BASIC
|
||||||
|
" F#, fsharp
|
||||||
|
autocmd BufNewFile,BufRead *.fs,*.fsi,*.fsx set filetype=fsharp
|
||||||
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" git:tpope/vim-git
|
" git:tpope/vim-git
|
||||||
" Git
|
" Git
|
||||||
@@ -282,14 +298,19 @@ autocmd BufNewFile,BufRead *
|
|||||||
\ endif
|
\ endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" gmpl:maelvalais/gmpl.vim
|
||||||
|
au BufRead,BufNewFile *.mod set filetype=gmpl
|
||||||
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" glsl:tikhomirov/vim-glsl
|
" glsl:tikhomirov/vim-glsl
|
||||||
" Language: OpenGL Shading Language
|
" Language: OpenGL Shading Language
|
||||||
" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io>
|
" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io>
|
||||||
|
|
||||||
" Extensions supported by Khronos reference compiler
|
" Extensions supported by Khronos reference compiler (with one exception, ".glsl")
|
||||||
" https://github.com/KhronosGroup/glslang
|
" https://github.com/KhronosGroup/glslang
|
||||||
autocmd! BufNewFile,BufRead *.vert,*.tesc,*.tese,*.geom,*.frag,*.comp set filetype=glsl
|
autocmd! BufNewFile,BufRead *.vert,*.tesc,*.tese,*.glsl,*.geom,*.frag,*.comp set filetype=glsl
|
||||||
|
|
||||||
" vim:set sts=2 sw=2 :
|
" vim:set sts=2 sw=2 :
|
||||||
augroup END
|
augroup END
|
||||||
@@ -320,24 +341,22 @@ function! s:gofiletype_post()
|
|||||||
let &g:fileencodings = s:current_fileencodings
|
let &g:fileencodings = s:current_fileencodings
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
au BufNewFile *.go setfiletype go | setlocal fileencoding=utf-8 fileformat=unix
|
augroup vim-go-filetype
|
||||||
au BufRead *.go call s:gofiletype_pre("go")
|
autocmd!
|
||||||
au BufReadPost *.go call s:gofiletype_post()
|
au BufNewFile *.go setfiletype go | setlocal fileencoding=utf-8 fileformat=unix
|
||||||
|
au BufRead *.go call s:gofiletype_pre("go")
|
||||||
|
au BufReadPost *.go call s:gofiletype_post()
|
||||||
|
|
||||||
au BufNewFile *.s setfiletype asm | setlocal fileencoding=utf-8 fileformat=unix
|
au BufNewFile *.s setfiletype asm | setlocal fileencoding=utf-8 fileformat=unix
|
||||||
au BufRead *.s call s:gofiletype_pre("asm")
|
au BufRead *.s call s:gofiletype_pre("asm")
|
||||||
au BufReadPost *.s call s:gofiletype_post()
|
au BufReadPost *.s call s:gofiletype_post()
|
||||||
|
|
||||||
au BufRead,BufNewFile *.tmpl set filetype=gohtmltmpl
|
au BufRead,BufNewFile *.tmpl set filetype=gohtmltmpl
|
||||||
|
augroup end
|
||||||
|
|
||||||
" vim: sw=2 ts=2 et
|
" vim: sw=2 ts=2 et
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
|
||||||
" graphql:jparise/vim-graphql
|
|
||||||
au BufRead,BufNewFile *.graphql,*.gql setfiletype graphql
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" groovy:vim-scripts/groovy.vim
|
" groovy:vim-scripts/groovy.vim
|
||||||
augroup END
|
augroup END
|
||||||
@@ -387,7 +406,7 @@ augroup END
|
|||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" javascript:pangloss/vim-javascript:_JAVASCRIPT
|
" javascript:pangloss/vim-javascript:_JAVASCRIPT
|
||||||
au BufNewFile,BufRead *.{js,jsm,es,es6},Jakefile setf javascript
|
au BufNewFile,BufRead *.{js,mjs,jsm,es,es6},Jakefile setf javascript
|
||||||
|
|
||||||
fun! s:SourceFlowSyntax()
|
fun! s:SourceFlowSyntax()
|
||||||
if !exists('javascript_plugin_flow') && !exists('b:flow_active') &&
|
if !exists('javascript_plugin_flow') && !exists('b:flow_active') &&
|
||||||
@@ -406,6 +425,15 @@ endfun
|
|||||||
au BufNewFile,BufRead * call s:SelectJavascript()
|
au BufNewFile,BufRead * call s:SelectJavascript()
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" jenkins:martinda/Jenkinsfile-vim-syntax
|
||||||
|
" Jenkinsfile
|
||||||
|
autocmd BufRead,BufNewFile Jenkinsfile set ft=Jenkinsfile
|
||||||
|
autocmd BufRead,BufNewFile Jenkinsfile* setf Jenkinsfile
|
||||||
|
autocmd BufRead,BufNewFile *.jenkinsfile set ft=Jenkinsfile
|
||||||
|
autocmd BufRead,BufNewFile *.jenkinsfile setf Jenkinsfile
|
||||||
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" json:elzr/vim-json
|
" json:elzr/vim-json
|
||||||
autocmd BufNewFile,BufRead *.json setlocal filetype=json
|
autocmd BufNewFile,BufRead *.json setlocal filetype=json
|
||||||
@@ -442,15 +470,16 @@ if !exists('g:jsx_pragma_required')
|
|||||||
let g:jsx_pragma_required = 0
|
let g:jsx_pragma_required = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:jsx_pragma_required
|
let s:jsx_pragma_pattern = '\%^\_s*\/\*\*\%(\_.\%(\*\/\)\@!\)*@jsx\_.\{-}\*\/'
|
||||||
" Look for the @jsx pragma. It must be included in a docblock comment before
|
|
||||||
" anything else in the file (except whitespace).
|
|
||||||
let s:jsx_pragma_pattern = '\%^\_s*\/\*\*\%(\_.\%(\*\/\)\@!\)*@jsx\_.\{-}\*\/'
|
|
||||||
let b:jsx_pragma_found = search(s:jsx_pragma_pattern, 'npw')
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Whether to set the JSX filetype on *.js files.
|
" Whether to set the JSX filetype on *.js files.
|
||||||
fu! <SID>EnableJSX()
|
fu! <SID>EnableJSX()
|
||||||
|
if g:jsx_pragma_required && !exists('b:jsx_ext_found')
|
||||||
|
" Look for the @jsx pragma. It must be included in a docblock comment
|
||||||
|
" before anything else in the file (except whitespace).
|
||||||
|
let b:jsx_pragma_found = search(s:jsx_pragma_pattern, 'npw')
|
||||||
|
endif
|
||||||
|
|
||||||
if g:jsx_pragma_required && !b:jsx_pragma_found | return 0 | endif
|
if g:jsx_pragma_required && !b:jsx_pragma_found | return 0 | endif
|
||||||
if g:jsx_ext_required && !exists('b:jsx_ext_found') | return 0 | endif
|
if g:jsx_ext_required && !exists('b:jsx_ext_found') | return 0 | endif
|
||||||
return 1
|
return 1
|
||||||
@@ -524,6 +553,16 @@ augroup END
|
|||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" mako:sophacles/vim-bundle-mako
|
" mako:sophacles/vim-bundle-mako
|
||||||
|
if !exists("g:mako_detect_lang_from_ext")
|
||||||
|
let g:mako_detect_lang_from_ext = 1
|
||||||
|
endif
|
||||||
|
if g:mako_detect_lang_from_ext
|
||||||
|
au BufNewFile *.*.mako execute "do BufNewFile filetypedetect " . expand("<afile>:r") | let b:mako_outer_lang = &filetype
|
||||||
|
" it's important to get this before any of the normal BufRead autocmds execute
|
||||||
|
" for this file, otherwise a mako tag at the start of the file can cause the
|
||||||
|
" filetype to be set to mason
|
||||||
|
au BufReadPre *.*.mako execute "do BufRead filetypedetect " . expand("<afile>:r") | let b:mako_outer_lang = &filetype
|
||||||
|
endif
|
||||||
au BufRead,BufNewFile *.mako set filetype=mako
|
au BufRead,BufNewFile *.mako set filetype=mako
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
@@ -554,8 +593,14 @@ au BufNewFile,BufRead *.nim,*.nims set filetype=nim
|
|||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" nix:spwhitt/vim-nix
|
" nix:LnL7/vim-nix
|
||||||
autocmd BufNewFile,BufRead *.nix setfiletype nix
|
" Vim filetype detect
|
||||||
|
" Language: Nix
|
||||||
|
" Maintainer: Daiderd Jordan <daiderd@gmail.com>
|
||||||
|
" URL: https://github.com/LnL7/vim-nix
|
||||||
|
|
||||||
|
au BufRead,BufNewFile *.nix set filetype=nix
|
||||||
|
au FileType nix setl sw=2 sts=2 et iskeyword+=-
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
@@ -703,7 +748,7 @@ au! BufRead,BufNewFile Puppetfile setfiletype ruby
|
|||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" purescript:raichoo/purescript-vim
|
" purescript:purescript-contrib/purescript-vim
|
||||||
au BufNewFile,BufRead *.purs setf purescript
|
au BufNewFile,BufRead *.purs setf purescript
|
||||||
au FileType purescript let &l:commentstring='{--%s--}'
|
au FileType purescript let &l:commentstring='{--%s--}'
|
||||||
augroup END
|
augroup END
|
||||||
@@ -731,6 +776,11 @@ augroup filetypedetect
|
|||||||
" r-lang:vim-scripts/R.vim
|
" r-lang:vim-scripts/R.vim
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" racket:wlangstroth/vim-racket
|
||||||
|
au BufRead,BufNewFile *.rkt,*.rktl set filetype=racket
|
||||||
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" raml:IN3D/vim-raml
|
" raml:IN3D/vim-raml
|
||||||
au BufRead,BufNewFile *.raml set ft=raml
|
au BufRead,BufNewFile *.raml set ft=raml
|
||||||
@@ -750,7 +800,7 @@ augroup filetypedetect
|
|||||||
|
|
||||||
" Support functions {{{
|
" Support functions {{{
|
||||||
function! s:setf(filetype) abort
|
function! s:setf(filetype) abort
|
||||||
if &filetype !=# a:filetype
|
if &filetype !~# '\<'.a:filetype.'\>'
|
||||||
let &filetype = a:filetype
|
let &filetype = a:filetype
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
@@ -880,7 +930,7 @@ fun! s:DetectScala()
|
|||||||
endif
|
endif
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
au BufRead,BufNewFile *.scala set filetype=scala
|
au BufRead,BufNewFile *.scala,*.sc set filetype=scala
|
||||||
au BufRead,BufNewFile * call s:DetectScala()
|
au BufRead,BufNewFile * call s:DetectScala()
|
||||||
|
|
||||||
" Install vim-sbt for additional syntax highlighting.
|
" Install vim-sbt for additional syntax highlighting.
|
||||||
@@ -899,7 +949,7 @@ autocmd BufNewFile,BufRead *.slim setfiletype slim
|
|||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" solidity:ethereum/vim-solidity
|
" solidity:tomlion/vim-solidity
|
||||||
au BufNewFile,BufRead *.sol setf solidity
|
au BufNewFile,BufRead *.sol setf solidity
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
@@ -982,8 +1032,8 @@ augroup END
|
|||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" toml:cespare/vim-toml
|
" toml:cespare/vim-toml
|
||||||
" Rust uses several TOML config files that are not named with .toml.
|
" Go dep and Rust use several TOML config files that are not named with .toml.
|
||||||
autocmd BufNewFile,BufRead *.toml,Cargo.lock,*/.cargo/config set filetype=toml
|
autocmd BufNewFile,BufRead *.toml,Gopkg.lock,Cargo.lock,*/.cargo/config set filetype=toml
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
@@ -1019,6 +1069,17 @@ augroup filetypedetect
|
|||||||
au BufRead,BufNewFile *.vcl set filetype=vcl
|
au BufRead,BufNewFile *.vcl set filetype=vcl
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" vifm:vifm/vifm.vim
|
||||||
|
autocmd BufRead,BufNewFile vifm.rename* :set filetype=vifm-rename
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" vifm:vifm/vifm.vim
|
||||||
|
autocmd BufRead,BufNewFile vifmrc :set filetype=vifm
|
||||||
|
autocmd BufRead,BufNewFile *vifm/colors/* :set filetype=vifm
|
||||||
|
augroup END
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" vue:posva/vim-vue
|
" vue:posva/vim-vue
|
||||||
au BufNewFile,BufRead *.vue setf vue
|
au BufNewFile,BufRead *.vue setf vue
|
||||||
|
|||||||
149
ftplugin/elm.vim
149
ftplugin/elm.vim
@@ -1,86 +1,101 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
||||||
|
|
||||||
" elm.vim - Plugin for the Elm programming language
|
" plugin for Elm (http://elm-lang.org/)
|
||||||
" Maintainer: Alexander Noriega <http://lambdatoast.com/>
|
|
||||||
" Version: 0.4.3
|
|
||||||
|
|
||||||
" Plugin setup stuff
|
if exists('b:did_ftplugin')
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
" Compilation
|
" Settings
|
||||||
|
if !exists('g:elm_jump_to_error')
|
||||||
|
let g:elm_jump_to_error = 0
|
||||||
|
endif
|
||||||
|
|
||||||
function! ElmMake(file)
|
if !exists('g:elm_make_output_file')
|
||||||
let args = a:file
|
let g:elm_make_output_file = 'elm.js'
|
||||||
return elm#io#system("elm-make", args)
|
endif
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ElmMakeCurrentFile()
|
if !exists('g:elm_make_show_warnings')
|
||||||
echo ElmMake(expand("%"))
|
let g:elm_make_show_warnings = 0
|
||||||
endfunction
|
endif
|
||||||
|
|
||||||
function! ElmMakeMain()
|
if !exists('g:elm_syntastic_show_warnings')
|
||||||
echo ElmMake("Main.elm")
|
let g:elm_syntastic_show_warnings = 0
|
||||||
endfunction
|
endif
|
||||||
|
|
||||||
function! ElmMakeFile(file)
|
if !exists('g:elm_format_autosave')
|
||||||
echo ElmMake(a:file)
|
let g:elm_format_autosave = 1
|
||||||
endfunction
|
endif
|
||||||
|
|
||||||
" REPL
|
if !exists('g:elm_format_fail_silently')
|
||||||
|
let g:elm_format_fail_silently = 0
|
||||||
|
endif
|
||||||
|
|
||||||
function! ElmRepl()
|
if !exists('g:elm_setup_keybindings')
|
||||||
!elm-repl
|
let g:elm_setup_keybindings = 1
|
||||||
endfunction
|
endif
|
||||||
|
|
||||||
" Evaluation
|
setlocal omnifunc=elm#Complete
|
||||||
|
|
||||||
function! ElmEvalLine()
|
|
||||||
return ElmEval(getline("."))
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ElmEvalSelection()
|
|
||||||
let savedReg = @z
|
|
||||||
normal! `<v`>"zy
|
|
||||||
let res = ElmEval(substitute(getreg("z"), "\n", "\\\n", "g"))
|
|
||||||
let @z = savedReg
|
|
||||||
normal! gv
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ElmEval(sourceCode)
|
|
||||||
let currentLine = a:sourceCode
|
|
||||||
let args = "echo '" . currentLine . "' | elm-repl"
|
|
||||||
let result = elm#io#system("echo", args)
|
|
||||||
let cleanResult = "-- " . join(s:Filtered(function("s:IsUsefulReplOutput"), split(result, "\n")), "")
|
|
||||||
put =cleanResult
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:IsUsefulReplOutput(str)
|
|
||||||
return a:str !~ "^Elm REPL" && a:str !~ "Type :help" && a:str !~ ">\\s*$"
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" List processing
|
|
||||||
|
|
||||||
function! s:Filtered(fn, l)
|
|
||||||
let new_list = deepcopy(a:l)
|
|
||||||
call filter(new_list, string(a:fn) . '(v:val)')
|
|
||||||
return new_list
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
command -buffer ElmEvalLine call ElmEvalLine()
|
|
||||||
command -buffer ElmEvalSelection call ElmEvalSelection()
|
|
||||||
command -buffer ElmMakeMain call ElmMakeMain()
|
|
||||||
command -buffer -nargs=1 ElmMakeFile call ElmMakeFile <args>
|
|
||||||
command -buffer ElmMakeCurrentFile call ElmMakeCurrentFile()
|
|
||||||
command -buffer ElmRepl call ElmRepl()
|
|
||||||
|
|
||||||
" Define comment convention
|
|
||||||
|
|
||||||
setlocal comments=:--
|
setlocal comments=:--
|
||||||
setlocal commentstring=--%s
|
setlocal commentstring=--\ %s
|
||||||
|
|
||||||
|
" Commands
|
||||||
|
command -buffer -nargs=? -complete=file ElmMake call elm#Make(<f-args>)
|
||||||
|
command -buffer ElmMakeMain call elm#Make("Main.elm")
|
||||||
|
command -buffer -nargs=? -complete=file ElmTest call elm#Test(<f-args>)
|
||||||
|
command -buffer ElmRepl call elm#Repl()
|
||||||
|
command -buffer ElmErrorDetail call elm#ErrorDetail()
|
||||||
|
command -buffer ElmShowDocs call elm#ShowDocs()
|
||||||
|
command -buffer ElmBrowseDocs call elm#BrowseDocs()
|
||||||
|
command -buffer ElmFormat call elm#Format()
|
||||||
|
|
||||||
|
if get(g:, 'elm_setup_keybindings', 1)
|
||||||
|
nmap <buffer> <LocalLeader>m <Plug>(elm-make)
|
||||||
|
nmap <buffer> <LocalLeader>b <Plug>(elm-make-main)
|
||||||
|
nmap <buffer> <LocalLeader>t <Plug>(elm-test)
|
||||||
|
nmap <buffer> <LocalLeader>r <Plug>(elm-repl)
|
||||||
|
nmap <buffer> <LocalLeader>e <Plug>(elm-error-detail)
|
||||||
|
nmap <buffer> <LocalLeader>d <Plug>(elm-show-docs)
|
||||||
|
nmap <buffer> <LocalLeader>w <Plug>(elm-browse-docs)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Better gf command
|
||||||
|
nmap <buffer> gf :call elm#util#GoToModule(expand('<cfile>'))<CR>
|
||||||
|
|
||||||
|
" Elm code formatting on save
|
||||||
|
if get(g:, 'elm_format_autosave', 1)
|
||||||
|
augroup elmFormat
|
||||||
|
autocmd!
|
||||||
|
autocmd BufWritePre *.elm call elm#Format()
|
||||||
|
autocmd BufWritePost *.elm call elm#util#EchoStored()
|
||||||
|
augroup END
|
||||||
|
endif
|
||||||
|
if has('win32')
|
||||||
|
set viewdir=$HOME/vimfiles/views/
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Enable go to file under cursor from module name
|
||||||
|
" Based on: https://github.com/elixir-lang/vim-elixir/blob/bd66ed134319d1e390f3331e8c4d525109f762e8/ftplugin/elixir.vim#L22-L56
|
||||||
|
function! GetElmFilename(word)
|
||||||
|
let l:word = a:word
|
||||||
|
|
||||||
|
" replace module dots with slash
|
||||||
|
let l:word = substitute(l:word,'\.','/','g')
|
||||||
|
|
||||||
|
return l:word
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &l:path =
|
||||||
|
\ join([
|
||||||
|
\ elm#FindRootDirectory().'/src',
|
||||||
|
\ elm#FindRootDirectory().'/elm-stuff/packages/**/src',
|
||||||
|
\ &g:path
|
||||||
|
\ ], ',')
|
||||||
|
setlocal includeexpr=GetElmFilename(v:fname)
|
||||||
|
setlocal include=^\\s*import\\s\\+
|
||||||
|
setlocal suffixesadd=.elm
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
24
ftplugin/elm/tagbar.vim
Normal file
24
ftplugin/elm/tagbar.vim
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
||||||
|
|
||||||
|
if !executable('ctags')
|
||||||
|
finish
|
||||||
|
elseif globpath(&runtimepath, 'plugin/tagbar.vim') ==? ''
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! s:SetTagbar()
|
||||||
|
if !exists('g:tagbar_type_elm')
|
||||||
|
let g:tagbar_type_elm = {
|
||||||
|
\ 'ctagstype' : 'elm',
|
||||||
|
\ 'kinds' : [
|
||||||
|
\ 'c:constants',
|
||||||
|
\ 'f:functions',
|
||||||
|
\ 'p:ports'
|
||||||
|
\ ]
|
||||||
|
\ }
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call s:SetTagbar()
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -29,7 +29,7 @@ elseif !exists("b:eruby_subtype")
|
|||||||
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
|
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
|
||||||
let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
|
let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
|
||||||
if b:eruby_subtype == ''
|
if b:eruby_subtype == ''
|
||||||
let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
|
let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
|
||||||
endif
|
endif
|
||||||
if b:eruby_subtype == 'rhtml'
|
if b:eruby_subtype == 'rhtml'
|
||||||
let b:eruby_subtype = 'html'
|
let b:eruby_subtype = 'html'
|
||||||
@@ -47,7 +47,7 @@ elseif !exists("b:eruby_subtype")
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists("b:eruby_subtype") && b:eruby_subtype != ''
|
if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
|
||||||
exe "runtime! ftplugin/".b:eruby_subtype.".vim ftplugin/".b:eruby_subtype."_*.vim ftplugin/".b:eruby_subtype."/*.vim"
|
exe "runtime! ftplugin/".b:eruby_subtype.".vim ftplugin/".b:eruby_subtype."_*.vim ftplugin/".b:eruby_subtype."/*.vim"
|
||||||
else
|
else
|
||||||
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
|
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
|
||||||
|
|||||||
@@ -28,11 +28,12 @@ function! s:cycle()
|
|||||||
call s:choose(get({'s':'edit','p':'squash','e':'reword','r':'fixup'},getline('.')[0],'pick'))
|
call s:choose(get({'s':'edit','p':'squash','e':'reword','r':'fixup'},getline('.')[0],'pick'))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
command! -buffer -bar Pick :call s:choose('pick')
|
command! -buffer -bar -range Pick :<line1>,<line2>call s:choose('pick')
|
||||||
command! -buffer -bar Squash :call s:choose('squash')
|
command! -buffer -bar -range Squash :<line1>,<line2>call s:choose('squash')
|
||||||
command! -buffer -bar Edit :call s:choose('edit')
|
command! -buffer -bar -range Edit :<line1>,<line2>call s:choose('edit')
|
||||||
command! -buffer -bar Reword :call s:choose('reword')
|
command! -buffer -bar -range Reword :<line1>,<line2>call s:choose('reword')
|
||||||
command! -buffer -bar Fixup :call s:choose('fixup')
|
command! -buffer -bar -range Fixup :<line1>,<line2>call s:choose('fixup')
|
||||||
|
command! -buffer -bar -range Drop :<line1>,<line2>call s:choose('drop')
|
||||||
command! -buffer -bar Cycle :call s:cycle()
|
command! -buffer -bar Cycle :call s:cycle()
|
||||||
" The above are more useful when they are mapped; for example:
|
" The above are more useful when they are mapped; for example:
|
||||||
"nnoremap <buffer> <silent> S :Cycle<CR>
|
"nnoremap <buffer> <silent> S :Cycle<CR>
|
||||||
|
|||||||
@@ -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
|
|
||||||
66
ftplugin/mail_vifm.vim
Normal file
66
ftplugin/mail_vifm.vim
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
||||||
|
|
||||||
|
" Mail file type extension to pick files for attachments via vifm
|
||||||
|
" Maintainer: xaizek <xaizek@posteo.net>
|
||||||
|
" Last Change: January 23, 2016
|
||||||
|
|
||||||
|
" Insert attachment picked via vifm after 'Subject' header
|
||||||
|
function! s:AddMailAttacments()
|
||||||
|
" TODO: reduce duplication between this file and plugins/vifm.vim
|
||||||
|
let l:listf = tempname()
|
||||||
|
|
||||||
|
if !has('nvim')
|
||||||
|
if has('gui_running')
|
||||||
|
execute 'silent !' g:vifm_term g:vifm_exec
|
||||||
|
\ '--choose-files' shellescape(l:listf, 1)
|
||||||
|
\ g:vifm_exec_args
|
||||||
|
else
|
||||||
|
execute 'silent !' g:vifm_exec
|
||||||
|
\ '--choose-files' shellescape(l:listf, 1)
|
||||||
|
\ g:vifm_exec_args
|
||||||
|
endif
|
||||||
|
|
||||||
|
redraw!
|
||||||
|
|
||||||
|
call s:HandleRunResults(v:shell_error, l:listf)
|
||||||
|
else
|
||||||
|
" Work around handicapped neovim...
|
||||||
|
let callback = { 'listf': l:listf }
|
||||||
|
function! callback.on_exit(id, code)
|
||||||
|
buffer #
|
||||||
|
silent! bdelete! #
|
||||||
|
call s:HandleRunResults(a:code, self.listf)
|
||||||
|
endfunction
|
||||||
|
enew
|
||||||
|
call termopen(g:vifm_exec . ' --choose-files ' . shellescape(l:listf, 1)
|
||||||
|
\. ' ' . g:vifm_exec_args, callback)
|
||||||
|
|
||||||
|
startinsert
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:HandleRunResults(exitcode, listf)
|
||||||
|
if a:exitcode != 0
|
||||||
|
echohl WarningMsg
|
||||||
|
echo 'Got non-zero code from vifm: ' . a:exitcode
|
||||||
|
echohl None
|
||||||
|
call delete(a:listf)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:insert_pos = search('^Subject:', 'nw')
|
||||||
|
|
||||||
|
if filereadable(a:listf) && l:insert_pos != 0
|
||||||
|
for line in readfile(a:listf)
|
||||||
|
call append(l:insert_pos, 'Attach: '.line)
|
||||||
|
let l:insert_pos += 1
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
call delete(a:listf)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <buffer> <silent> <localleader>a :call <sid>AddMailAttacments()<cr>
|
||||||
|
|
||||||
|
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
" Vim filetype plugin
|
||||||
finish
|
" Language: Nix
|
||||||
endif
|
" Maintainer: Daiderd Jordan <daiderd@gmail.com>
|
||||||
let b:did_ftplugin=1
|
" URL: https://github.com/LnL7/vim-nix
|
||||||
|
|
||||||
setlocal comments=
|
if (exists("b:did_ftplugin"))
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
|
||||||
|
setlocal comments=:#
|
||||||
setlocal commentstring=#\ %s
|
setlocal commentstring=#\ %s
|
||||||
|
|
||||||
" Nixpkgs indent settings
|
|
||||||
setlocal tabstop=2
|
|
||||||
setlocal softtabstop=2
|
|
||||||
setlocal shiftwidth=2
|
|
||||||
setlocal expandtab
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -1,5 +1,42 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1
|
||||||
|
|
||||||
setlocal comments=s1fl:{-,mb:\ \ ,ex:-},:--
|
setlocal comments=s1fl:{-,mb:\ \ ,ex:-},:--
|
||||||
|
setlocal include=^import
|
||||||
|
setlocal includeexpr=printf('%s.purs',substitute(v:fname,'\\.','/','g'))
|
||||||
|
|
||||||
|
let s:PS = []
|
||||||
|
fun! InitPureScript()
|
||||||
|
let dirs = map(
|
||||||
|
\ findfile("psc-package.json", expand("%:p:h") . ";/", -1),
|
||||||
|
\ { idx, val -> fnamemodify(val, ":p:h") }
|
||||||
|
\ )
|
||||||
|
if empty(dirs)
|
||||||
|
let dirs = map(
|
||||||
|
\ findfile("bower.json", expand("%:p:h") . ";/", -1),
|
||||||
|
\ { idx, val -> fnamemodify(val, ":p:h") }
|
||||||
|
\ )
|
||||||
|
if empty(dirs)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let path = expand("%:p")
|
||||||
|
for p in s:PS
|
||||||
|
if stridx(path, p[0], 0) == 0
|
||||||
|
let &l:path=p[1]
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let dir = dirs[len(dirs) - 1]
|
||||||
|
let gp = globpath(dir, "src/**/*.purs", v:true, v:true)
|
||||||
|
if empty(gp)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let &l:path=join([dir, dir . "/bower_components/**", dir . "/src/**"], ",")
|
||||||
|
call add(s:PS, [dir, &l:path])
|
||||||
|
endfun
|
||||||
|
call InitPureScript()
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
63
ftplugin/racket.vim
Normal file
63
ftplugin/racket.vim
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
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
|
||||||
@@ -365,6 +365,7 @@ function! RubyCursorFile() abort
|
|||||||
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:synid() ==# hlID('rubyConstant')
|
||||||
let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','')
|
let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','')
|
||||||
|
let cfile = substitute(cfile,'^::','','')
|
||||||
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')
|
||||||
let cfile = substitute(cfile,'\(\l\|\d\)\(\u\)','\1_\2', 'g')
|
let cfile = substitute(cfile,'\(\l\|\d\)\(\u\)','\1_\2', 'g')
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
" Language: Rust
|
" Language: Rust
|
||||||
" Description: Vim syntax file for Rust
|
" Description: Vim ftplugin for Rust
|
||||||
" Maintainer: Chris Morgan <me@chrismorgan.info>
|
" Maintainer: Chris Morgan <me@chrismorgan.info>
|
||||||
" Maintainer: Kevin Ballard <kevin@sb.org>
|
" Maintainer: Kevin Ballard <kevin@sb.org>
|
||||||
" Last Change: June 08, 2016
|
" Last Change: June 08, 2016
|
||||||
|
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
if exists("b:did_ftplugin")
|
||||||
finish
|
finish
|
||||||
@@ -193,19 +194,13 @@ endif
|
|||||||
|
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
" %-matching. <:> is handy for generics.
|
|
||||||
set matchpairs+=<:>
|
set matchpairs+=<:>
|
||||||
" There are two minor issues with it; (a) comparison operators in expressions,
|
" For matchit.vim (rustArrow stops `Fn() -> X` messing things up)
|
||||||
" 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'
|
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
|
||||||
|
|
||||||
" vim: set noet sw=4 ts=4:
|
" vim: set noet sw=8 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
5
ftplugin/solidity.vim
Normal file
5
ftplugin/solidity.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'solidity') == -1
|
||||||
|
|
||||||
|
setlocal commentstring=//\ %s
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -15,7 +15,7 @@ setlocal commentstring=//\ %s
|
|||||||
" " and insert the comment leader when hitting <CR> or using "o".
|
" " and insert the comment leader when hitting <CR> or using "o".
|
||||||
setlocal formatoptions-=t formatoptions+=croql
|
setlocal formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
setlocal suffixesadd+=.ts
|
setlocal suffixesadd+=.ts,.tsx
|
||||||
|
|
||||||
let b:undo_ftplugin = "setl fo< ofu< com< cms<"
|
let b:undo_ftplugin = "setl fo< ofu< com< cms<"
|
||||||
|
|
||||||
|
|||||||
23
ftplugin/vifm-cmdedit.vim
Normal file
23
ftplugin/vifm-cmdedit.vim
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
||||||
|
|
||||||
|
" vifm command-line editing buffer filetype plugin
|
||||||
|
" Maintainer: xaizek <xaizek@posteo.net>
|
||||||
|
" Last Change: August 18, 2013
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
" Behave as vifm script file
|
||||||
|
runtime! ftplugin/vifm.vim
|
||||||
|
|
||||||
|
" Use vifm script highlighting
|
||||||
|
set syntax=vifm
|
||||||
|
|
||||||
|
call vifm#edit#Init()
|
||||||
|
|
||||||
|
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
||||||
|
|
||||||
|
endif
|
||||||
17
ftplugin/vifm-edit.vim
Normal file
17
ftplugin/vifm-edit.vim
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
||||||
|
|
||||||
|
" vifm command-line editing buffer filetype plugin
|
||||||
|
" Maintainer: xaizek <xaizek@posteo.net>
|
||||||
|
" Last Change: August 18, 2013
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
call vifm#edit#Init()
|
||||||
|
|
||||||
|
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
||||||
|
|
||||||
|
endif
|
||||||
62
ftplugin/vifm-rename.vim
Normal file
62
ftplugin/vifm-rename.vim
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
||||||
|
|
||||||
|
" Filetype plugin for vifm rename buffer
|
||||||
|
" Maintainer: xaizek <xaizek@posteo.net>
|
||||||
|
" Last Change: October 05, 2014
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
" Copy list of original file names
|
||||||
|
let s:files = getline(1, '$')
|
||||||
|
|
||||||
|
" Closes window/tab/Vim when buffer is left alone in there
|
||||||
|
function! s:QuitIfOnlyWindow()
|
||||||
|
" Boil out if there is more than one window
|
||||||
|
if winbufnr(2) != -1
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Just close tab with this single window or quit Vim with last tab
|
||||||
|
if tabpagenr('$') == 1
|
||||||
|
bdelete
|
||||||
|
quit
|
||||||
|
else
|
||||||
|
close
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Create a vertical split window for original file names and configure it
|
||||||
|
belowright vsplit __VifmRenameOrig__
|
||||||
|
enew
|
||||||
|
call setline(1, s:files)
|
||||||
|
setlocal buftype=nofile
|
||||||
|
setlocal bufhidden=hide
|
||||||
|
setlocal noswapfile
|
||||||
|
setlocal nobuflisted
|
||||||
|
setlocal cursorbind
|
||||||
|
setlocal scrollbind
|
||||||
|
setlocal nocursorline
|
||||||
|
|
||||||
|
" Free now useless list of file names
|
||||||
|
unlet s:files
|
||||||
|
|
||||||
|
" Setup a hook in auxiliary local window to do not leave it alone, when it's
|
||||||
|
" useless
|
||||||
|
augroup VifmRenameAutoCmds
|
||||||
|
autocmd! * <buffer>
|
||||||
|
autocmd BufEnter <buffer> call s:QuitIfOnlyWindow()
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
" Go back to the original window and ensure it will remain synchronized with
|
||||||
|
" the auxiliary one
|
||||||
|
wincmd w
|
||||||
|
setlocal cursorbind
|
||||||
|
setlocal scrollbind
|
||||||
|
|
||||||
|
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
||||||
|
|
||||||
|
endif
|
||||||
50
ftplugin/vifm.vim
Normal file
50
ftplugin/vifm.vim
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
||||||
|
|
||||||
|
" vifmrc filetype plugin
|
||||||
|
" Maintainer: xaizek <xaizek@posteo.net>
|
||||||
|
" Last Change: July 08, 2016
|
||||||
|
" Based On: Vim file type file by Bram Moolenaar
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo-=C
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setlocal formatoptions< comments< textwidth< commentstring<"
|
||||||
|
|
||||||
|
" Break comment lines but not other lines
|
||||||
|
setlocal formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
|
" Set comment character
|
||||||
|
setlocal comments=:\"
|
||||||
|
|
||||||
|
" Format comments to be up to 78 characters long
|
||||||
|
if &textwidth == 0
|
||||||
|
setlocal textwidth=78
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Comments start with a double quote
|
||||||
|
setlocal commentstring=\"%s
|
||||||
|
|
||||||
|
" Move around comments
|
||||||
|
nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
|
||||||
|
vnoremap <silent><buffer> ]" :<C-U>exe "normal! gv"<Bar>call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
|
||||||
|
nnoremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
|
||||||
|
vnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
|
||||||
|
|
||||||
|
" Let the matchit plugin know what items can be matched.
|
||||||
|
if exists("loaded_matchit")
|
||||||
|
let b:match_ignorecase = 0
|
||||||
|
let b:match_words = '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
|
||||||
|
|
||||||
|
endif
|
||||||
5
indent/Jenkinsfile.vim
Normal file
5
indent/Jenkinsfile.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jenkins') == -1
|
||||||
|
|
||||||
|
runtime indent/groovy.vim
|
||||||
|
|
||||||
|
endif
|
||||||
223
indent/autohotkey.vim
Normal file
223
indent/autohotkey.vim
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'autohotkey') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: AutoHotkey
|
||||||
|
" Maintainer: Hirotoshi Namikawa <hnamikaw1@gmail.com>
|
||||||
|
" URL: http://github.com/hnamikaw/vim-autohotkey
|
||||||
|
" License: Same as Vim.
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
setlocal autoindent
|
||||||
|
setlocal indentexpr=GetAutoHotkeyIndent()
|
||||||
|
setlocal indentkeys=!^F,o,O,0{,0},=if,=else,=return
|
||||||
|
setlocal expandtab
|
||||||
|
|
||||||
|
let b:undo_indent = 'setlocal '.join([
|
||||||
|
\ 'autoindent<',
|
||||||
|
\ 'indentexpr<',
|
||||||
|
\ 'indentkeys<',
|
||||||
|
\ 'expandtab<',
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
let s:TRUE = !0
|
||||||
|
let s:FALSE = 0
|
||||||
|
|
||||||
|
" Check BEGIN BLOCK
|
||||||
|
" TRUE:
|
||||||
|
" {
|
||||||
|
" { ; with comment
|
||||||
|
" if {
|
||||||
|
" if { ; with comment
|
||||||
|
"
|
||||||
|
" FALSE:
|
||||||
|
" ; if { comment
|
||||||
|
" sleep 1000 ; {
|
||||||
|
function! IsBeginBlockByStr(str)
|
||||||
|
return a:str =~? '^[^;]*{\s*\(;.*\)\?$' ? s:TRUE : s:FALSE
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Check END BLOCK
|
||||||
|
" TRUE:
|
||||||
|
" }
|
||||||
|
" } ; with comment
|
||||||
|
" } else {
|
||||||
|
" } else { ; with comment
|
||||||
|
"
|
||||||
|
" FALSE:
|
||||||
|
" ; } else {
|
||||||
|
function! IsEndBlockByStr(str)
|
||||||
|
return a:str =~? '^\s*}.*\(;.*\)\?$' ? s:TRUE : s:FALSE
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Check DOUBLE CORON
|
||||||
|
" TRUE:
|
||||||
|
" LAlt up::
|
||||||
|
" LAlt up:: ; with comment
|
||||||
|
"
|
||||||
|
" FALSE:
|
||||||
|
" ; LAlt up::
|
||||||
|
" sleep 1000 ; ::
|
||||||
|
function! IsDoubleCoronByStr(str)
|
||||||
|
return a:str =~? '^[^;]*::\s*\(;.*\)\?$' ? s:TRUE : s:FALSE
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Check RETURN
|
||||||
|
" TRUE:
|
||||||
|
" return
|
||||||
|
" return 1
|
||||||
|
" return ; with comment
|
||||||
|
"
|
||||||
|
" FALSE:
|
||||||
|
" ; return
|
||||||
|
function! IsReturnByStr(str)
|
||||||
|
return a:str =~? '^\s*return.*\(;.*\)\?$' ? s:TRUE : s:FALSE
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Check IF STATEMENT(without BLOCK)
|
||||||
|
" TRUE:
|
||||||
|
" if
|
||||||
|
" if ; with comment
|
||||||
|
" else
|
||||||
|
" else ; with comment
|
||||||
|
"
|
||||||
|
" FALSE:
|
||||||
|
" if {
|
||||||
|
" else {
|
||||||
|
function! IsIfStatementByStr(str)
|
||||||
|
return a:str =~? '^\s*\(if\|else\)[^{]*\(;.*\)\?$' ? s:TRUE : s:FALSE
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Check inside of BLOCK.
|
||||||
|
" TRUE:
|
||||||
|
" if {
|
||||||
|
" hogehoge
|
||||||
|
" fugafuga <--- line_num
|
||||||
|
" }
|
||||||
|
"
|
||||||
|
" FALSE:
|
||||||
|
" foobar <--- line_num
|
||||||
|
function! IsInsideOfBlockByNum(line_num)
|
||||||
|
let block_indent_level = 0
|
||||||
|
|
||||||
|
for scan_line_num in range(1, a:line_num)
|
||||||
|
if IsBeginBlockByStr(getline(scan_line_num)) == s:TRUE
|
||||||
|
let block_indent_level += 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if IsEndBlockByStr(getline(scan_line_num)) == s:TRUE
|
||||||
|
let block_indent_level -= 1
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return block_indent_level >= 1 ? s:TRUE : s:FALSE
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! AddIndentByInd(indent)
|
||||||
|
return a:indent + &l:shiftwidth
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! UnIndentByInd(indent)
|
||||||
|
return a:indent - &l:shiftwidth
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! GetAutoHotkeyIndent()
|
||||||
|
let l0_num = v:lnum
|
||||||
|
let l1_num = v:lnum - 1
|
||||||
|
let pl1_num = prevnonblank(l1_num)
|
||||||
|
let pl2_num = prevnonblank(pl1_num - 1)
|
||||||
|
|
||||||
|
let l0_str = getline(l0_num)
|
||||||
|
let pl1_str = getline(pl1_num)
|
||||||
|
let pl2_str = getline(pl2_num)
|
||||||
|
let pl1_ind = indent(pl1_num)
|
||||||
|
let pl2_ind = indent(pl2_num)
|
||||||
|
|
||||||
|
" Case: Next line of IF STATEMENT(without BLOCK)
|
||||||
|
" if bar = 1
|
||||||
|
" callFunc1() <--- AddIndent
|
||||||
|
"
|
||||||
|
" if bar = 1
|
||||||
|
" { <--- No! AddIndent
|
||||||
|
if IsIfStatementByStr(pl1_str) == s:TRUE && IsBeginBlockByStr(l0_str) == s:FALSE
|
||||||
|
return AddIndentByInd(pl1_ind)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Case: End of IF STATEMENT(without BLOCK)
|
||||||
|
" if bar = 1
|
||||||
|
" callFunc1()
|
||||||
|
" if bar = 2 <--- UnIndent
|
||||||
|
"
|
||||||
|
" Case: End of IF STATEMENT(without BLOCK) and END BLOCK(of outer block)
|
||||||
|
" if foo
|
||||||
|
" {
|
||||||
|
" if bar = 3
|
||||||
|
" callFunc3()
|
||||||
|
" } <--- UnIndent (2level)
|
||||||
|
if IsIfStatementByStr(pl2_str) == s:TRUE && IsBeginBlockByStr(pl1_str) == s:FALSE
|
||||||
|
if IsEndBlockByStr(l0_str) == s:FALSE
|
||||||
|
return UnIndentByInd(pl1_ind)
|
||||||
|
else
|
||||||
|
return UnIndentByInd(pl2_ind)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Case: Next line of BEGIN BLOCK
|
||||||
|
" Swap(ByRef Left, ByRef Right)
|
||||||
|
" {
|
||||||
|
" temp := Left <--- AddIndent
|
||||||
|
" Left := Right
|
||||||
|
" Right := temp
|
||||||
|
" }
|
||||||
|
if IsBeginBlockByStr(pl1_str) == s:TRUE
|
||||||
|
return AddIndentByInd(pl1_ind)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Case: END BLOCK
|
||||||
|
" Swap(ByRef Left, ByRef Right)
|
||||||
|
" {
|
||||||
|
" temp := Left
|
||||||
|
" Left := Right
|
||||||
|
" Right := temp
|
||||||
|
" } <--- UnIndent
|
||||||
|
if IsEndBlockByStr(l0_str) == s:TRUE
|
||||||
|
return UnIndentByInd(pl1_ind)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Case: Next line of DOUBLE CORON
|
||||||
|
" #n::
|
||||||
|
" Run Notepad <--- AddIndent
|
||||||
|
" return
|
||||||
|
if IsDoubleCoronByStr(pl1_str) == s:TRUE
|
||||||
|
return AddIndentByInd(pl1_ind)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Case: RETURN
|
||||||
|
" Note: It is not nothing if in the BLOCK.
|
||||||
|
" #n::
|
||||||
|
" Run Notepad
|
||||||
|
" return <--- UnIndent
|
||||||
|
" ~~~
|
||||||
|
" if foo
|
||||||
|
" {
|
||||||
|
" callFunc1()
|
||||||
|
" return <--- No! UnIndent
|
||||||
|
" }
|
||||||
|
if IsReturnByStr(l0_str) == s:TRUE && IsInsideOfBlockByNum(l0_num) == s:FALSE
|
||||||
|
return UnIndentByInd(pl1_ind)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Case: Top line.
|
||||||
|
if pl1_num == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Case: It does not match anything.
|
||||||
|
return pl1_ind
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -19,7 +19,7 @@ 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\|php\|' .
|
||||||
\ 'component\|slot\|prepend'
|
\ 'component\|slot\|prepend\|auth\|guest'
|
||||||
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')
|
||||||
|
|||||||
@@ -192,11 +192,7 @@ if exists("*searchpairpos")
|
|||||||
" Check if form is a reader conditional, that is, it is prefixed by #?
|
" Check if form is a reader conditional, that is, it is prefixed by #?
|
||||||
" or @#?
|
" or @#?
|
||||||
function! s:is_reader_conditional_special_case(position)
|
function! s:is_reader_conditional_special_case(position)
|
||||||
if getline(a:position[0])[a:position[1] - 3 : a:position[1] - 2] == "#?"
|
return getline(a:position[0])[a:position[1] - 3 : a:position[1] - 2] == "#?"
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
return 0
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Returns 1 for opening brackets, -1 for _anything else_.
|
" Returns 1 for opening brackets, -1 for _anything else_.
|
||||||
@@ -294,6 +290,19 @@ if exists("*searchpairpos")
|
|||||||
return paren
|
return paren
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" If the keyword begins with #, check if it is an anonymous
|
||||||
|
" function or set, in which case we indent by the shiftwidth
|
||||||
|
" (minus one if g:clojure_align_subforms = 1), or if it is
|
||||||
|
" ignored, in which case we use the ( position for indent.
|
||||||
|
if w[0] == "#"
|
||||||
|
" TODO: Handle #=() and other rare reader invocations?
|
||||||
|
if w[1] == '(' || w[1] == '{'
|
||||||
|
return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)]
|
||||||
|
elseif w[1] == '_'
|
||||||
|
return paren
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
" Test words without namespace qualifiers and leading reader macro
|
" Test words without namespace qualifiers and leading reader macro
|
||||||
" metacharacters.
|
" metacharacters.
|
||||||
"
|
"
|
||||||
|
|||||||
93
indent/cmake.vim
Normal file
93
indent/cmake.vim
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cmake') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: CMake (ft=cmake)
|
||||||
|
" Author: Andy Cedilnik <andy.cedilnik@kitware.com>
|
||||||
|
" Maintainer: Dimitri Merejkowsky <d.merej@gmail.com>
|
||||||
|
" Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com>
|
||||||
|
" Last Change: 2017 Aug 30
|
||||||
|
"
|
||||||
|
" Licence: The CMake license applies to this file. See
|
||||||
|
" https://cmake.org/licensing
|
||||||
|
" This implies that distribution with Vim is allowed
|
||||||
|
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
let s:keepcpo= &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
setlocal indentexpr=CMakeGetIndent(v:lnum)
|
||||||
|
setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE(
|
||||||
|
|
||||||
|
" Only define the function once.
|
||||||
|
if exists("*CMakeGetIndent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
fun! CMakeGetIndent(lnum)
|
||||||
|
let this_line = getline(a:lnum)
|
||||||
|
|
||||||
|
" Find a non-blank line above the current line.
|
||||||
|
let lnum = a:lnum
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
let previous_line = getline(lnum)
|
||||||
|
|
||||||
|
" Hit the start of the file, use zero indent.
|
||||||
|
if lnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let ind = indent(lnum)
|
||||||
|
|
||||||
|
let or = '\|'
|
||||||
|
" Regular expressions used by line indentation function.
|
||||||
|
let cmake_regex_comment = '#.*'
|
||||||
|
let cmake_regex_identifier = '[A-Za-z][A-Za-z0-9_]*'
|
||||||
|
let cmake_regex_quoted = '"\([^"\\]\|\\.\)*"'
|
||||||
|
let cmake_regex_arguments = '\(' . cmake_regex_quoted .
|
||||||
|
\ or . '\$(' . cmake_regex_identifier . ')' .
|
||||||
|
\ or . '[^()\\#"]' . or . '\\.' . '\)*'
|
||||||
|
|
||||||
|
let cmake_indent_comment_line = '^\s*' . cmake_regex_comment
|
||||||
|
let cmake_indent_blank_regex = '^\s*$'
|
||||||
|
let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier .
|
||||||
|
\ '\s*(' . cmake_regex_arguments .
|
||||||
|
\ '\(' . cmake_regex_comment . '\)\?$'
|
||||||
|
|
||||||
|
let cmake_indent_close_regex = '^' . cmake_regex_arguments .
|
||||||
|
\ ')\s*' .
|
||||||
|
\ '\(' . cmake_regex_comment . '\)\?$'
|
||||||
|
|
||||||
|
let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*('
|
||||||
|
let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*('
|
||||||
|
|
||||||
|
" Add
|
||||||
|
if previous_line =~? cmake_indent_comment_line " Handle comments
|
||||||
|
let ind = ind
|
||||||
|
else
|
||||||
|
if previous_line =~? cmake_indent_begin_regex
|
||||||
|
let ind = ind + shiftwidth()
|
||||||
|
endif
|
||||||
|
if previous_line =~? cmake_indent_open_regex
|
||||||
|
let ind = ind + shiftwidth()
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Subtract
|
||||||
|
if this_line =~? cmake_indent_end_regex
|
||||||
|
let ind = ind - shiftwidth()
|
||||||
|
endif
|
||||||
|
if previous_line =~? cmake_indent_close_regex
|
||||||
|
let ind = ind - shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ind
|
||||||
|
endfun
|
||||||
|
|
||||||
|
let &cpo = s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -7,42 +7,13 @@ let b:did_indent = 1
|
|||||||
|
|
||||||
setlocal indentexpr=elixir#indent(v:lnum)
|
setlocal indentexpr=elixir#indent(v:lnum)
|
||||||
|
|
||||||
setlocal indentkeys+=0=end,0=catch,0=rescue,0=after,0=else,=->,0},0],0),0=\|>,0=<>
|
setlocal indentkeys+==after,=catch,=do,=else,=end,=rescue,
|
||||||
|
setlocal indentkeys+=*<Return>,=->,=\|>,=<>,0},0],0)
|
||||||
|
|
||||||
" TODO: @jbodah 2017-02-27: all operators should cause reindent when typed
|
" TODO: @jbodah 2017-02-27: all operators should cause reindent when typed
|
||||||
|
|
||||||
function! elixir#indent(lnum)
|
function! elixir#indent(lnum)
|
||||||
let lnum = a:lnum
|
return elixir#indent#indent(a:lnum)
|
||||||
let text = getline(lnum)
|
|
||||||
let prev_nb_lnum = prevnonblank(lnum-1)
|
|
||||||
let prev_nb_text = getline(prev_nb_lnum)
|
|
||||||
|
|
||||||
call elixir#indent#debug("==> Indenting line " . lnum)
|
|
||||||
call elixir#indent#debug("text = '" . text . "'")
|
|
||||||
|
|
||||||
let handlers = [
|
|
||||||
\'top_of_file',
|
|
||||||
\'starts_with_end',
|
|
||||||
\'starts_with_mid_or_end_block_keyword',
|
|
||||||
\'following_trailing_do',
|
|
||||||
\'following_trailing_binary_operator',
|
|
||||||
\'starts_with_pipe',
|
|
||||||
\'starts_with_close_bracket',
|
|
||||||
\'starts_with_binary_operator',
|
|
||||||
\'inside_nested_construct',
|
|
||||||
\'starts_with_comment',
|
|
||||||
\'inside_generic_block'
|
|
||||||
\]
|
|
||||||
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")
|
|
||||||
return 0
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
212
indent/elm.vim
212
indent/elm.vim
@@ -1,129 +1,115 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
||||||
|
|
||||||
" Vim indent file
|
" indentation for Elm (http://elm-lang.org/)
|
||||||
" Language: Haskell
|
|
||||||
" Maintainer: lilydjwg <lilydjwg@gmail.com>
|
|
||||||
" Version: 1.0
|
|
||||||
" References: http://en.wikibooks.org/wiki/Haskell/Indentation
|
|
||||||
" http://book.realworldhaskell.org/read/
|
|
||||||
" See Also: The Align plugin http://www.vim.org/scripts/script.php?script_id=294
|
|
||||||
|
|
||||||
" 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
|
||||||
|
|
||||||
setlocal indentexpr=HaskellIndent()
|
" Local defaults
|
||||||
for i in split('0{,:,0#,e', ',')
|
|
||||||
exec "setlocal indentkeys-=" . i
|
|
||||||
endfor
|
|
||||||
setlocal indentkeys+=0=else,0=in,0=where,0),0<bar>
|
|
||||||
setlocal tabstop=8
|
|
||||||
setlocal expandtab
|
setlocal expandtab
|
||||||
|
setlocal indentexpr=GetElmIndent()
|
||||||
|
setlocal indentkeys+=0=else,0=if,0=of,0=import,0=then,0=type,0\|,0},0\],0),=-},0=in
|
||||||
|
setlocal nolisp
|
||||||
|
setlocal nosmartindent
|
||||||
|
|
||||||
if !exists('g:Haskell_no_mapping')
|
" Comment formatting
|
||||||
inoremap <silent> <BS> <C-R>=<SID>HaskellDedent(1)<CR>
|
setlocal comments=s1fl:{-,mb:\ ,ex:-},:--
|
||||||
inoremap <silent> <C-D> <C-R>=<SID>HaskellDedent(0)<CR>
|
|
||||||
|
" Only define the function once.
|
||||||
|
if exists('*GetElmIndent')
|
||||||
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Only define the functions once.
|
" Indent pairs
|
||||||
if exists("*HaskellIndent")
|
function! s:FindPair(pstart, pmid, pend)
|
||||||
finish
|
"call search(a:pend, 'bW')
|
||||||
endif
|
return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
|
||||||
|
|
||||||
let s:align_map = {
|
|
||||||
\ 'in': '\<let\>',
|
|
||||||
\ '\<else\>': '\<then\>',
|
|
||||||
\ ',': '\v%(\s|\w|^)@<=[[{]%(\s|\w|"|$)@='
|
|
||||||
\ }
|
|
||||||
let s:indent_self = ['=']
|
|
||||||
let s:indent_next = ['let', 'in', 'where', 'do', 'if']
|
|
||||||
let s:indent_if_final = ['=', 'do', '->', 'of', 'where']
|
|
||||||
|
|
||||||
function HaskellIndent()
|
|
||||||
let lnum = v:lnum - 1
|
|
||||||
|
|
||||||
" Hit the start of the file, use zero indent.
|
|
||||||
if lnum == 0
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
let ind = indent(lnum)
|
|
||||||
let prevline = getline(lnum)
|
|
||||||
let curline = getline(v:lnum)
|
|
||||||
let curwords = split(curline)
|
|
||||||
if len(curwords) > 0
|
|
||||||
if has_key(s:align_map, curwords[0])
|
|
||||||
let word = s:align_map[curwords[0]]
|
|
||||||
let m = -1
|
|
||||||
let line = v:lnum
|
|
||||||
while m == -1
|
|
||||||
let line -= 1
|
|
||||||
if line <= 0
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
let m = match(getline(line), word)
|
|
||||||
endwhile
|
|
||||||
return m
|
|
||||||
elseif index(s:indent_self, curwords[0]) != -1
|
|
||||||
return ind + &sw
|
|
||||||
elseif curwords[0] == '|'
|
|
||||||
return match(prevline, '\v%(\s|\w|^)@<=[|=]%(\s|\w)@=')
|
|
||||||
elseif index([')', '}'], curwords[0]) != -1
|
|
||||||
return ind - &sw
|
|
||||||
elseif curwords[0] == 'where'
|
|
||||||
if prevline =~ '\v^\s+\|%(\s|\w)@='
|
|
||||||
return ind - 1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
let prevwords = split(prevline)
|
|
||||||
if len(prevwords) == 0
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if prevwords[-1] == 'where' && prevwords[0] == 'module'
|
|
||||||
return 0
|
|
||||||
elseif index(s:indent_if_final, prevwords[-1]) != -1
|
|
||||||
return ind + &sw
|
|
||||||
elseif prevwords[-1] =~ '\v%(\s|\w|^)@<=[[{(]$'
|
|
||||||
return ind + &sw
|
|
||||||
else
|
|
||||||
for word in reverse(prevwords)
|
|
||||||
if index(s:indent_next, word) != -1
|
|
||||||
return match(prevline, '\<'.word.'\>') + len(word) + 1
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
|
|
||||||
if len(curwords) > 0 && curwords[0] == 'where'
|
|
||||||
return ind + &sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
return ind
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:HaskellDedent(isbs)
|
function! GetElmIndent()
|
||||||
if a:isbs && strpart(getline('.'), 0, col('.')-1) !~ '^\s\+$'
|
let l:lnum = v:lnum - 1
|
||||||
return "\<BS>"
|
|
||||||
endif
|
|
||||||
|
|
||||||
let curind = indent('.')
|
" Ident 0 if the first line of the file:
|
||||||
let line = line('.') - 1
|
if l:lnum == 0
|
||||||
while curind > 0 && line > 0
|
return 0
|
||||||
let ind = indent(line)
|
endif
|
||||||
if ind >= curind
|
|
||||||
let line -= 1
|
let l:ind = indent(l:lnum)
|
||||||
else
|
let l:lline = getline(l:lnum)
|
||||||
echomsg curind ind
|
let l:line = getline(v:lnum)
|
||||||
call setline('.', repeat(' ', ind) .
|
|
||||||
\ substitute(getline('.'), '^\s\+', '', ''))
|
" Indent if current line begins with '}':
|
||||||
return ''
|
if l:line =~? '^\s*}'
|
||||||
endif
|
return s:FindPair('{', '', '}')
|
||||||
endwhile
|
|
||||||
return a:isbs ? "\<BS>" : ''
|
" Indent if current line begins with 'else':
|
||||||
endfunction
|
elseif l:line =~# '^\s*else\>'
|
||||||
|
if l:lline !~# '^\s*\(if\|then\)\>'
|
||||||
|
return s:FindPair('\<if\>', '', '\<else\>')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'then':
|
||||||
|
elseif l:line =~# '^\s*then\>'
|
||||||
|
if l:lline !~# '^\s*\(if\|else\)\>'
|
||||||
|
return s:FindPair('\<if\>', '', '\<then\>')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" HACK: Indent lines in case with nearest case clause:
|
||||||
|
elseif l:line =~# '->' && l:line !~# ':' && l:line !~# '\\'
|
||||||
|
return indent(search('^\s*case', 'bWn')) + &shiftwidth
|
||||||
|
|
||||||
|
" HACK: Don't change the indentation if the last line is a comment.
|
||||||
|
elseif l:lline =~# '^\s*--'
|
||||||
|
return l:ind
|
||||||
|
|
||||||
|
" Align the end of block comments with the start
|
||||||
|
elseif l:line =~# '^\s*-}'
|
||||||
|
return indent(search('{-', 'bWn'))
|
||||||
|
|
||||||
|
" Indent double shift after let with an empty rhs
|
||||||
|
elseif l:lline =~# '\<let\>.*\s=$'
|
||||||
|
return l:ind + 4 + &shiftwidth
|
||||||
|
|
||||||
|
" Align 'in' with the parent let.
|
||||||
|
elseif l:line =~# '^\s*in\>'
|
||||||
|
return indent(search('^\s*let', 'bWn'))
|
||||||
|
|
||||||
|
" Align bindings with the parent let.
|
||||||
|
elseif l:lline =~# '\<let\>'
|
||||||
|
return l:ind + 4
|
||||||
|
|
||||||
|
" Align bindings with the parent in.
|
||||||
|
elseif l:lline =~# '^\s*in\>'
|
||||||
|
return l:ind + 4
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Add a 'shiftwidth' after lines ending with:
|
||||||
|
if l:lline =~# '\(|\|=\|->\|<-\|(\|\[\|{\|\<\(of\|else\|if\|then\)\)\s*$'
|
||||||
|
let l:ind = l:ind + &shiftwidth
|
||||||
|
|
||||||
|
" Add a 'shiftwidth' after lines starting with type ending with '=':
|
||||||
|
elseif l:lline =~# '^\s*type' && l:line =~# '^\s*='
|
||||||
|
let l:ind = l:ind + &shiftwidth
|
||||||
|
|
||||||
|
" Back to normal indent after comments:
|
||||||
|
elseif l:lline =~# '-}\s*$'
|
||||||
|
call search('-}', 'bW')
|
||||||
|
let l:ind = indent(searchpair('{-', '', '-}', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
|
||||||
|
|
||||||
|
" Ident some operators if there aren't any starting the last line.
|
||||||
|
elseif l:line =~# '^\s*\(!\|&\|(\|`\|+\||\|{\|[\|,\)=' && l:lline !~# '^\s*\(!\|&\|(\|`\|+\||\|{\|[\|,\)=' && l:lline !~# '^\s*$'
|
||||||
|
let l:ind = l:ind + &shiftwidth
|
||||||
|
|
||||||
|
elseif l:lline ==# '' && getline(l:lnum - 1) !=# ''
|
||||||
|
let l:ind = indent(search('^\s*\S+', 'bWn'))
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:ind
|
||||||
|
endfunc
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ runtime! indent/ruby.vim
|
|||||||
unlet! b:did_indent
|
unlet! b:did_indent
|
||||||
setlocal indentexpr=
|
setlocal indentexpr=
|
||||||
|
|
||||||
if exists("b:eruby_subtype")
|
if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=# 'eruby'
|
||||||
exe "runtime! indent/".b:eruby_subtype.".vim"
|
exe "runtime! indent/".b:eruby_subtype.".vim"
|
||||||
else
|
else
|
||||||
runtime! indent/html.vim
|
runtime! indent/html.vim
|
||||||
|
|||||||
253
indent/fsharp.vim
Normal file
253
indent/fsharp.vim
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: FSharp
|
||||||
|
" Maintainers: Jean-Francois Yuen <jfyuen@happycoders.org>
|
||||||
|
" Mike Leary <leary@nwlink.com>
|
||||||
|
" Markus Mottl <markus.mottl@gmail.com>
|
||||||
|
" Rudi Grinberg <rudi.grinberg@gmail.com>
|
||||||
|
" Gregor Uhlenheuer <kongo2002@gmail.com>
|
||||||
|
" Last Change: 2013 Jun 29
|
||||||
|
" 2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
|
||||||
|
" 2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
|
||||||
|
" 2013 June - commented textwidth (Marc Weber)
|
||||||
|
" 2014 August - Ported to F#
|
||||||
|
" 2014 August - F# specific cleanup
|
||||||
|
"
|
||||||
|
" Marc Weber's comment: This file may contain a lot of (very custom) stuff
|
||||||
|
" which eventually should be moved somewhere else ..
|
||||||
|
|
||||||
|
" Only load this indent file when no other was loaded.
|
||||||
|
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal indentexpr=GetFsharpIndent()
|
||||||
|
setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0)
|
||||||
|
|
||||||
|
" Only define the function once.
|
||||||
|
if exists("*GetFsharpIndent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Skipping pattern, for comments
|
||||||
|
function! s:GetLineWithoutFullComment(lnum)
|
||||||
|
let lnum = prevnonblank(a:lnum - 1)
|
||||||
|
let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
|
||||||
|
while lline =~ '^\s*$' && lnum > 0
|
||||||
|
let lnum = prevnonblank(lnum - 1)
|
||||||
|
let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
|
||||||
|
endwhile
|
||||||
|
return lnum
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Indent for ';;' to match multiple 'let'
|
||||||
|
function! s:GetInd(lnum, pat, lim)
|
||||||
|
let llet = search(a:pat, 'bW')
|
||||||
|
let old = indent(a:lnum)
|
||||||
|
while llet > 0
|
||||||
|
let old = indent(llet)
|
||||||
|
let nb = s:GetLineWithoutFullComment(llet)
|
||||||
|
if getline(nb) =~ a:lim
|
||||||
|
return old
|
||||||
|
endif
|
||||||
|
let llet = search(a:pat, 'bW')
|
||||||
|
endwhile
|
||||||
|
return old
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Indent pairs
|
||||||
|
function! s:FindPair(pstart, pmid, pend)
|
||||||
|
call search(a:pend, 'bW')
|
||||||
|
return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Indent 'let'
|
||||||
|
function! s:FindLet(pstart, pmid, pend)
|
||||||
|
call search(a:pend, 'bW')
|
||||||
|
return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! GetFsharpIndent()
|
||||||
|
" Find a non-commented line above the current line.
|
||||||
|
let lnum = s:GetLineWithoutFullComment(v:lnum)
|
||||||
|
|
||||||
|
" At the start of the file use zero indent.
|
||||||
|
if lnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let ind = indent(lnum)
|
||||||
|
let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
|
||||||
|
|
||||||
|
" " Return single 'shiftwidth' after lines matching:
|
||||||
|
" if lline =~ '^\s*|.*->\s*$'
|
||||||
|
" return ind + &sw
|
||||||
|
" endif
|
||||||
|
|
||||||
|
let line = getline(v:lnum)
|
||||||
|
|
||||||
|
" Indent if current line begins with 'end':
|
||||||
|
if line =~ '^\s*end\>'
|
||||||
|
return s:FindPair(s:module, '','\<end\>')
|
||||||
|
|
||||||
|
" Indent if current line begins with 'done' for 'do':
|
||||||
|
elseif line =~ '^\s*done\>'
|
||||||
|
return s:FindPair('\<do\>', '','\<done\>')
|
||||||
|
|
||||||
|
" Indent if current line begins with '}' or '>}':
|
||||||
|
elseif line =~ '^\s*\(\|>\)}'
|
||||||
|
return s:FindPair('{', '','}')
|
||||||
|
|
||||||
|
" Indent if current line begins with ']', '|]' or '>]':
|
||||||
|
elseif line =~ '^\s*\(\||\|>\)\]'
|
||||||
|
return s:FindPair('\[', '','\]')
|
||||||
|
|
||||||
|
" Indent if current line begins with ')':
|
||||||
|
elseif line =~ '^\s*)'
|
||||||
|
return s:FindPair('(', '',')')
|
||||||
|
|
||||||
|
" Indent if current line begins with 'let':
|
||||||
|
elseif line =~ '^\s*let\>'
|
||||||
|
if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet
|
||||||
|
return s:FindLet(s:type, '','\<let\s*$')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'class' or 'type':
|
||||||
|
elseif line =~ '^\s*\(class\|type\)\>'
|
||||||
|
if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim
|
||||||
|
return s:FindLet(s:type, '','\<\(class\|type\)\s*$')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent for pattern matching:
|
||||||
|
elseif line =~ '^\s*|'
|
||||||
|
if lline !~ '^\s*\(|[^\]]\|\(match\|type\|with\)\>\)\|\<\(function\|private\|with\)\s*$'
|
||||||
|
call search('|', 'bW')
|
||||||
|
return indent(searchpair('^\s*\(match\|type\)\>\|\<\(function\|private\|with\)\s*$', '', '^\s*|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") !~ "^\\s*|.*->"'))
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with ';;':
|
||||||
|
elseif line =~ '^\s*;;'
|
||||||
|
if lline !~ ';;\s*$'
|
||||||
|
return s:GetInd(v:lnum, s:letpat, s:letlim)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'in':
|
||||||
|
elseif line =~ '^\s*in\>'
|
||||||
|
if lline !~ '^\s*\(let\|and\)\>'
|
||||||
|
return s:FindPair('\<let\>', '', '\<in\>')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'else':
|
||||||
|
elseif line =~ '^\s*else\>'
|
||||||
|
if lline !~ '^\s*\(if\|then\)\>'
|
||||||
|
return s:FindPair('\<if\>', '', '\<else\>')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'then':
|
||||||
|
elseif line =~ '^\s*then\>'
|
||||||
|
if lline !~ '^\s*\(if\|else\)\>'
|
||||||
|
return s:FindPair('\<if\>', '', '\<then\>')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'and':
|
||||||
|
elseif line =~ '^\s*and\>'
|
||||||
|
if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$'
|
||||||
|
return ind - &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'with':
|
||||||
|
elseif line =~ '^\s*with\>'
|
||||||
|
if lline !~ '^\s*\(match\|try\)\>'
|
||||||
|
return s:FindPair('\<\%(match\|try\)\>', '','\<with\>')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'exception', 'external', 'include' or
|
||||||
|
" 'open':
|
||||||
|
elseif line =~ '^\s*\(exception\|external\|include\|open\)\>'
|
||||||
|
if lline !~ s:lim . '\|' . s:letlim
|
||||||
|
call search(line)
|
||||||
|
return indent(search('^\s*\(\(exception\|external\|include\|open\|type\)\>\|val\>.*:\)', 'bW'))
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'val':
|
||||||
|
elseif line =~ '^\s*val\>'
|
||||||
|
if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim
|
||||||
|
return indent(search('^\s*\(\(exception\|include\|initializer\|method\|open\|type\|val\)\>\|external\>.*:\)', 'bW'))
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Indent if current line begins with 'constraint', 'inherit', 'initializer'
|
||||||
|
" or 'method':
|
||||||
|
elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>'
|
||||||
|
if lline !~ s:obj
|
||||||
|
return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Add a 'shiftwidth' after lines ending with:
|
||||||
|
if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$'
|
||||||
|
let ind = ind + &sw
|
||||||
|
|
||||||
|
" Back to normal indent after lines ending with ';;':
|
||||||
|
elseif lline =~ ';;\s*$' && lline !~ '^\s*;;'
|
||||||
|
let ind = s:GetInd(v:lnum, s:letpat, s:letlim)
|
||||||
|
|
||||||
|
" Back to normal indent after lines ending with 'end':
|
||||||
|
elseif lline =~ '\<end\s*$'
|
||||||
|
let ind = s:FindPair(s:module, '','\<end\>')
|
||||||
|
|
||||||
|
" Back to normal indent after lines ending with 'in':
|
||||||
|
elseif lline =~ '\<in\s*$' && lline !~ '^\s*in\>'
|
||||||
|
let ind = s:FindPair('\<let\>', '', '\<in\>')
|
||||||
|
|
||||||
|
" Back to normal indent after lines ending with 'done':
|
||||||
|
elseif lline =~ '\<done\s*$'
|
||||||
|
let ind = s:FindPair('\<do\>', '','\<done\>')
|
||||||
|
|
||||||
|
" Back to normal indent after lines ending with '}' or '>}':
|
||||||
|
elseif lline =~ '\(\|>\)}\s*$'
|
||||||
|
let ind = s:FindPair('{', '','}')
|
||||||
|
|
||||||
|
" Back to normal indent after lines ending with ']', '|]' or '>]':
|
||||||
|
elseif lline =~ '\(\||\|>\)\]\s*$'
|
||||||
|
let ind = s:FindPair('\[', '','\]')
|
||||||
|
|
||||||
|
" Back to normal indent after comments:
|
||||||
|
elseif lline =~ '\*)\s*$'
|
||||||
|
call search('\*)', 'bW')
|
||||||
|
let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
|
||||||
|
|
||||||
|
" Back to normal indent after lines ending with ')':
|
||||||
|
elseif lline =~ ')\s*$'
|
||||||
|
let ind = s:FindPair('(', '',')')
|
||||||
|
|
||||||
|
" If this is a multiline comment then align '*':
|
||||||
|
elseif lline =~ '^\s*(\*' && line =~ '^\s*\*'
|
||||||
|
let ind = ind + 1
|
||||||
|
|
||||||
|
else
|
||||||
|
" Don't change indentation of this line
|
||||||
|
" for new lines (indent==0) use indentation of previous line
|
||||||
|
|
||||||
|
" This is for preventing removing indentation of these args:
|
||||||
|
" let f x =
|
||||||
|
" let y = x + 1 in
|
||||||
|
" Printf.printf
|
||||||
|
" "o" << here
|
||||||
|
" "oeuth" << don't touch indentation
|
||||||
|
|
||||||
|
let i = indent(v:lnum)
|
||||||
|
return i == 0 ? ind : i
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ind
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim: sw=4 et sts=4
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -8,6 +8,7 @@ if exists("b:did_indent")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
setlocal autoindent cindent
|
setlocal autoindent cindent
|
||||||
|
setlocal formatoptions+=roq
|
||||||
|
|
||||||
" vim:set sts=2 sw=2 :
|
" vim:set sts=2 sw=2 :
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,18 @@ endif
|
|||||||
if !exists('g:haskell_indent_let')
|
if !exists('g:haskell_indent_let')
|
||||||
" let x = 0 in
|
" let x = 0 in
|
||||||
" >>>>x
|
" >>>>x
|
||||||
|
"
|
||||||
|
" let x = 0
|
||||||
|
" y = 1
|
||||||
let g:haskell_indent_let = 4
|
let g:haskell_indent_let = 4
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:haskell_indent_let_no_in')
|
||||||
|
" let x = 0
|
||||||
|
" x
|
||||||
|
let g:haskell_indent_let_no_in = 4
|
||||||
|
endif
|
||||||
|
|
||||||
if !exists('g:haskell_indent_where')
|
if !exists('g:haskell_indent_where')
|
||||||
" where f :: Int -> Int
|
" where f :: Int -> Int
|
||||||
" >>>>>>f x = x
|
" >>>>>>f x = x
|
||||||
@@ -210,6 +219,9 @@ function! GetHaskellIndent()
|
|||||||
"
|
"
|
||||||
" let x = 1
|
" let x = 1
|
||||||
" >>>>y = 2
|
" >>>>y = 2
|
||||||
|
"
|
||||||
|
" let x = 1
|
||||||
|
" 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\>')
|
let l:s = match(l:prevline, '\C\<let\>')
|
||||||
@@ -221,11 +233,16 @@ function! GetHaskellIndent()
|
|||||||
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
|
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
|
||||||
return l:s + g:haskell_indent_in
|
return l:s + g:haskell_indent_in
|
||||||
endif
|
endif
|
||||||
else
|
elseif l:line =~ '\s=\s'
|
||||||
let l:s = match(l:prevline, '\C\<let\>')
|
let l:s = match(l:prevline, '\C\<let\>')
|
||||||
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
|
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
|
||||||
return l:s + g:haskell_indent_let
|
return l:s + g:haskell_indent_let
|
||||||
endif
|
endif
|
||||||
|
else
|
||||||
|
let l:s = match(l:prevline, '\C\<let\>')
|
||||||
|
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
|
||||||
|
return l:s + g:haskell_indent_let_no_in
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -260,20 +260,28 @@ let s:html_indent_tags = '[a-z_][a-z0-9_.-]*'
|
|||||||
let s:cpo_save = &cpo
|
let s:cpo_save = &cpo
|
||||||
set cpo-=C
|
set cpo-=C
|
||||||
|
|
||||||
" [-- count indent-increasing tags of line a:lnum --]
|
func! <SID>HtmlIndentPatternCount(content, pattern)
|
||||||
fun! <SID>HtmlIndentOpen(lnum, pattern)
|
let s = substitute('x'.a:content, a:pattern, "\1", 'g')
|
||||||
let s = substitute('x'.getline(a:lnum),
|
|
||||||
\ '.\{-}\(\(<\)\('.a:pattern.'\)\>\)', "\1", 'g')
|
|
||||||
let s = substitute(s, "[^\1].*$", '', '')
|
let s = substitute(s, "[^\1].*$", '', '')
|
||||||
return strlen(s)
|
return strlen(s)
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
|
" [-- count indent-increasing tags of line a:lnum --]
|
||||||
|
fun! <SID>HtmlIndentOpen(lnum, pattern)
|
||||||
|
return <SID>HtmlIndentPatternCount(getline(a:lnum),
|
||||||
|
\ '.\{-}\(\(<\)\('.a:pattern.'\)\>\)')
|
||||||
|
endfun
|
||||||
|
|
||||||
" [-- count indent-decreasing tags of line a:lnum --]
|
" [-- count indent-decreasing tags of line a:lnum --]
|
||||||
fun! <SID>HtmlIndentClose(lnum, pattern)
|
fun! <SID>HtmlIndentClose(lnum, pattern)
|
||||||
let s = substitute('x'.getline(a:lnum),
|
return <SID>HtmlIndentPatternCount(getline(a:lnum),
|
||||||
\ '.\{-}\(\(<\)/\('.a:pattern.'\)\>>\)', "\1", 'g')
|
\ '.\{-}\(\(<\)/\('.a:pattern.'\)\>>\)')
|
||||||
let s = substitute(s, "[^\1].*$", '', '')
|
endfun
|
||||||
return strlen(s)
|
|
||||||
|
" [-- count self close tags of line a:lnum --]
|
||||||
|
fun! <SID>HtmlIndentSelfClose(lnum, pattern)
|
||||||
|
return <SID>HtmlIndentPatternCount(getline(a:lnum),
|
||||||
|
\ '.\{-}\(\(<\('.a:pattern.'\).*\)\@<!\/>\)')
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
" [-- count indent-increasing '{' of (java|css) line a:lnum --]
|
" [-- count indent-increasing '{' of (java|css) line a:lnum --]
|
||||||
@@ -292,8 +300,9 @@ fun! <SID>HtmlIndentSum(lnum, style)
|
|||||||
if a:style == match(getline(a:lnum), '^\s*</\<\('.s:html_indent_tags.'\)\>')
|
if a:style == match(getline(a:lnum), '^\s*</\<\('.s:html_indent_tags.'\)\>')
|
||||||
let open = <SID>HtmlIndentOpen(a:lnum, s:html_indent_tags) - <SID>HtmlIndentOpen(a:lnum, s:html_noindent_tags)
|
let open = <SID>HtmlIndentOpen(a:lnum, s:html_indent_tags) - <SID>HtmlIndentOpen(a:lnum, s:html_noindent_tags)
|
||||||
let close = <SID>HtmlIndentClose(a:lnum, s:html_indent_tags) - <SID>HtmlIndentClose(a:lnum, s:html_noindent_tags)
|
let close = <SID>HtmlIndentClose(a:lnum, s:html_indent_tags) - <SID>HtmlIndentClose(a:lnum, s:html_noindent_tags)
|
||||||
if 0 != open || 0 != close
|
let self_close = <SID>HtmlIndentSelfClose(a:lnum, s:html_noindent_tags)
|
||||||
return open - close
|
if 0 != open || 0 != close || 0 != self_close
|
||||||
|
return open - close - self_close
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@@ -310,6 +319,13 @@ fun! <SID>HtmlIndentSum(lnum, style)
|
|||||||
endfun
|
endfun
|
||||||
|
|
||||||
fun! HtmlIndentGet(lnum)
|
fun! HtmlIndentGet(lnum)
|
||||||
|
" Get shiftwidth value.
|
||||||
|
if exists('*shiftwidth')
|
||||||
|
let sw = shiftwidth()
|
||||||
|
else
|
||||||
|
let sw = &sw
|
||||||
|
endif
|
||||||
|
|
||||||
" Find a non-empty line above the current line.
|
" Find a non-empty line above the current line.
|
||||||
let lnum = prevnonblank(a:lnum - 1)
|
let lnum = prevnonblank(a:lnum - 1)
|
||||||
|
|
||||||
@@ -396,7 +412,7 @@ fun! HtmlIndentGet(lnum)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if 0 == match(getline(a:lnum), '^\s*</')
|
if 0 == match(getline(a:lnum), '^\s*</')
|
||||||
return indent(preline) - (1*&sw)
|
return indent(preline) - (1*sw)
|
||||||
else
|
else
|
||||||
return indent(preline)
|
return indent(preline)
|
||||||
endif
|
endif
|
||||||
@@ -417,7 +433,7 @@ fun! HtmlIndentGet(lnum)
|
|||||||
" let tags_exp = '<\(' . join(tags, '\|') . '\)>'
|
" let tags_exp = '<\(' . join(tags, '\|') . '\)>'
|
||||||
" let close_tags_exp = '</\(' . join(tags, '\|') . '\)>'
|
" let close_tags_exp = '</\(' . join(tags, '\|') . '\)>'
|
||||||
" if getline(a:lnum) =~ tags_exp
|
" if getline(a:lnum) =~ tags_exp
|
||||||
" let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S' , 'bnW')
|
" let block_start = search('^'.repeat(' ', lind + (sw * ind - 1)).'\S' , 'bnW')
|
||||||
" let prev_tag = search(tags_exp, 'bW', block_start)
|
" let prev_tag = search(tags_exp, 'bW', block_start)
|
||||||
" let prev_closetag = search(close_tags_exp, 'W', a:lnum)
|
" let prev_closetag = search(close_tags_exp, 'W', a:lnum)
|
||||||
" if prev_tag && !prev_closetag
|
" if prev_tag && !prev_closetag
|
||||||
@@ -426,7 +442,7 @@ fun! HtmlIndentGet(lnum)
|
|||||||
" endif
|
" endif
|
||||||
|
|
||||||
" if getline(a:lnum) =~ '</\w\+>'
|
" if getline(a:lnum) =~ '</\w\+>'
|
||||||
" let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S' , 'bnW')
|
" let block_start = search('^'.repeat(' ', lind + (sw * ind - 1)).'\S' , 'bnW')
|
||||||
" let prev_tag = search(tags_exp, 'bW', block_start)
|
" let prev_tag = search(tags_exp, 'bW', block_start)
|
||||||
" let prev_closetag = search(close_tags_exp, 'W', a:lnum)
|
" let prev_closetag = search(close_tags_exp, 'W', a:lnum)
|
||||||
" if prev_tag && !prev_closetag
|
" if prev_tag && !prev_closetag
|
||||||
@@ -439,7 +455,7 @@ fun! HtmlIndentGet(lnum)
|
|||||||
setlocal noic
|
setlocal noic
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return lind + (&sw * ind)
|
return lind + (sw * ind)
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
let &cpo = s:cpo_save
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
|
|||||||
" Language: Javascript
|
" Language: Javascript
|
||||||
" Maintainer: Chris Paul ( https://github.com/bounceme )
|
" Maintainer: Chris Paul ( https://github.com/bounceme )
|
||||||
" URL: https://github.com/pangloss/vim-javascript
|
" URL: https://github.com/pangloss/vim-javascript
|
||||||
" Last Change: May 16, 2017
|
" Last Change: September 18, 2017
|
||||||
|
|
||||||
" 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')
|
||||||
@@ -12,10 +12,6 @@ if exists('b:did_indent')
|
|||||||
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 autoindent nolisp nosmartindent
|
||||||
@@ -27,13 +23,6 @@ setlocal indentkeys+=0],0)
|
|||||||
|
|
||||||
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
|
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
|
||||||
|
|
||||||
" 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
|
||||||
@@ -42,6 +31,23 @@ endif
|
|||||||
let s:cpo_save = &cpo
|
let s:cpo_save = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
|
" indent correctly if inside <script>
|
||||||
|
" vim/vim@690afe1 for the switch from cindent
|
||||||
|
" overridden with b:html_indent_script1
|
||||||
|
call extend(g:,{'html_indent_script1': 'inc'},'keep')
|
||||||
|
|
||||||
|
" Regex of syntax group names that are or delimit string or are comments.
|
||||||
|
let s:bvars = {
|
||||||
|
\ 'syng_strcom': 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!',
|
||||||
|
\ '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'
|
||||||
|
|
||||||
|
function s:GetVars()
|
||||||
|
call extend(b:,extend(s:bvars,{'js_cache': [0,0,0]}),'keep')
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Get shiftwidth value
|
" Get shiftwidth value
|
||||||
if exists('*shiftwidth')
|
if exists('*shiftwidth')
|
||||||
function s:sw()
|
function s:sw()
|
||||||
@@ -57,343 +63,317 @@ endif
|
|||||||
" matches before pos.
|
" matches before pos.
|
||||||
let s:z = has('patch-7.4.984') ? 'z' : ''
|
let s:z = has('patch-7.4.984') ? 'z' : ''
|
||||||
|
|
||||||
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 = "s:SynAt(line('.'),col('.')) =~? b:syng_strcom"
|
||||||
|
let s:in_comm = s:skip_expr[:-14] . "'comment\\|doc'"
|
||||||
|
|
||||||
|
let s:rel = has('reltime')
|
||||||
" searchpair() wrapper
|
" searchpair() wrapper
|
||||||
if has('reltime')
|
if s:rel
|
||||||
function s:GetPair(start,end,flags,skip,time,...)
|
function s:GetPair(start,end,flags,skip)
|
||||||
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time)
|
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,s:l1,a:skip ==# 's:SkipFunc()' ? 2000 : 200)
|
||||||
endfunction
|
endfunction
|
||||||
else
|
else
|
||||||
function s:GetPair(start,end,flags,skip,...)
|
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)]))
|
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,s:l1)
|
||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function s:syn_at(l,c)
|
function s:SynAt(l,c)
|
||||||
let pos = join([a:l,a:c],',')
|
let byte = line2byte(a:l) + a:c - 1
|
||||||
if has_key(s:synId_cache,pos)
|
let pos = index(s:synid_cache[0], byte)
|
||||||
return s:synId_cache[pos]
|
if pos == -1
|
||||||
|
let s:synid_cache[:] += [[byte], [synIDattr(synID(a:l, a:c, 0), 'name')]]
|
||||||
endif
|
endif
|
||||||
let s:synId_cache[pos] = synIDattr(synID(a:l,a:c,0),'name')
|
return s:synid_cache[1][pos]
|
||||||
return s:synId_cache[pos]
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:parse_cino(f)
|
function s:ParseCino(f)
|
||||||
let [cin, divider, n] = [strridx(&cino,a:f), 0, '']
|
let [divider, n, cstr] = [0] + matchlist(&cino,
|
||||||
if cin == -1
|
\ '\%(.*,\)\=\%(\%d'.char2nr(a:f).'\(-\)\=\([.s0-9]*\)\)\=')[1:2]
|
||||||
return
|
|
||||||
endif
|
|
||||||
let [sign, cstr] = &cino[cin+1] ==# '-' ? [-1, &cino[cin+2:]] : [1, &cino[cin+1:]]
|
|
||||||
for c in split(cstr,'\zs')
|
for c in split(cstr,'\zs')
|
||||||
if c ==# '.' && !divider
|
if c == '.' && !divider
|
||||||
let divider = 1
|
let divider = 1
|
||||||
elseif c ==# 's'
|
elseif c ==# 's'
|
||||||
if n is ''
|
if n !~ '\d'
|
||||||
let n = s:W
|
return n . s:sw() + 0
|
||||||
else
|
|
||||||
let n = str2nr(n) * s:W
|
|
||||||
endif
|
endif
|
||||||
|
let n = str2nr(n) * s:sw()
|
||||||
break
|
break
|
||||||
elseif c =~ '\d'
|
|
||||||
let [n, divider] .= [c, 0]
|
|
||||||
else
|
else
|
||||||
break
|
let [n, divider] .= [c, 0]
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return sign * str2nr(n) / max([str2nr(divider),1])
|
return str2nr(n) / max([str2nr(divider),1])
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Optimized {skip} expr, used only once per GetJavascriptIndent() call
|
" Optimized {skip} expr, only callable from the search loop which
|
||||||
function s:skip_func()
|
" GetJavascriptIndent does to find the containing [[{(] (side-effects)
|
||||||
if s:topCol == 1 || line('.') < s:scriptTag
|
function s:SkipFunc()
|
||||||
return {} " E728, used as limit condition for loops and searchpair()
|
if s:top_col == 1
|
||||||
endif
|
throw 'out of bounds'
|
||||||
let s:topCol = col('.')
|
elseif s:check_in
|
||||||
if getline('.') =~ '\%<'.s:topCol.'c\/.\{-}\/\|\%>'.s:topCol.'c[''"]\|\\$'
|
|
||||||
if eval(s:skip_expr)
|
if eval(s:skip_expr)
|
||||||
let s:topCol = 0
|
return 1
|
||||||
endif
|
endif
|
||||||
return !s:topCol
|
let s:check_in = 0
|
||||||
elseif s:checkIn || search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn)
|
elseif getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$'
|
||||||
let s:checkIn = eval(s:skip_expr)
|
if eval(s:skip_expr)
|
||||||
if s:checkIn
|
return 1
|
||||||
let s:topCol = 0
|
|
||||||
endif
|
endif
|
||||||
|
elseif search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn) && eval(s:skip_expr)
|
||||||
|
let s:check_in = 1
|
||||||
|
return 1
|
||||||
endif
|
endif
|
||||||
let s:looksyn = line('.')
|
let s:synid_cache[:] += [[line2byte('.') + col('.') - 1], ['']]
|
||||||
return s:checkIn
|
let [s:looksyn, s:top_col] = getpos('.')[1:2]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:alternatePair()
|
function s:AlternatePair()
|
||||||
let [l:pos, pat, l:for] = [getpos('.'), '[][(){};]', 3]
|
let [pat, l:for] = ['[][(){};]', 2]
|
||||||
while search('\m'.pat,'bW')
|
while s:SearchLoop(pat,'bW','s:SkipFunc()')
|
||||||
if s:skip_func() | continue | endif
|
if s:LookingAt() == ';'
|
||||||
let idx = stridx('])};',s:looking_at())
|
if !l:for
|
||||||
if idx is 3
|
if s:GetPair('{','}','bW','s:SkipFunc()')
|
||||||
if l:for is 1
|
return
|
||||||
return s:GetPair('{','}','bW','s:skip_func()',2000) > 0 || setpos('.',l:pos)
|
endif
|
||||||
endif
|
|
||||||
let [pat, l:for] = ['[{}();]', l:for - 1]
|
|
||||||
elseif idx + 1
|
|
||||||
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000) < 1
|
|
||||||
break
|
break
|
||||||
|
else
|
||||||
|
let [pat, l:for] = ['[{}();]', l:for - 1]
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
return
|
let idx = stridx('])}',s:LookingAt())
|
||||||
|
if idx == -1
|
||||||
|
return
|
||||||
|
elseif !s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:SkipFunc()')
|
||||||
|
break
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
call setpos('.',l:pos)
|
throw 'out of bounds'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:looking_at()
|
function s:Nat(int)
|
||||||
|
return a:int * (a:int > 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function s:LookingAt()
|
||||||
return getline('.')[col('.')-1]
|
return getline('.')[col('.')-1]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:token()
|
function s:Token()
|
||||||
return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at()
|
return s:LookingAt() =~ '\k' ? expand('<cword>') : s:LookingAt()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:previous_token()
|
function s:PreviousToken(...)
|
||||||
let l:pos = getpos('.')
|
let [l:pos, tok] = [getpos('.'), '']
|
||||||
if search('\m\k\{1,}\|\S','ebW')
|
if search('\m\k\{1,}\|\S','ebW')
|
||||||
if (strpart(getline('.'),col('.')-2,2) == '*/' || line('.') != l:pos[1] &&
|
if getline('.')[col('.')-2:col('.')-1] == '*/'
|
||||||
\ getline('.')[:col('.')-1] =~ '\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com
|
if eval(s:in_comm) && !s:SearchLoop('\S\ze\_s*\/[/*]','bW',s:in_comm)
|
||||||
while search('\m\S\ze\_s*\/[/*]','bW')
|
call setpos('.',l:pos)
|
||||||
if s:syn_at(line('.'),col('.')) !~? s:syng_com
|
else
|
||||||
return s:token()
|
let tok = s:Token()
|
||||||
endif
|
endif
|
||||||
endwhile
|
|
||||||
else
|
else
|
||||||
return s:token()
|
let two = a:0 || line('.') != l:pos[1] ? strridx(getline('.')[:col('.')],'//') + 1 : 0
|
||||||
|
if two && eval(s:in_comm)
|
||||||
|
call cursor(0,two)
|
||||||
|
let tok = s:PreviousToken(1)
|
||||||
|
if tok is ''
|
||||||
|
call setpos('.',l:pos)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let tok = s:Token()
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
call setpos('.',l:pos)
|
|
||||||
endif
|
endif
|
||||||
return ''
|
return tok
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
for s:__ in ['__previous_token','__IsBlock']
|
function s:Pure(f,...)
|
||||||
function s:{s:__}(...)
|
return eval("[call(a:f,a:000),cursor(a:firstline,".col('.').")][0]")
|
||||||
let l:pos = getpos('.')
|
endfunction
|
||||||
try
|
|
||||||
return call('s:'.matchstr(expand('<sfile>'),'.*__\zs\w\+'),a:000)
|
|
||||||
catch
|
|
||||||
finally
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
endtry
|
|
||||||
endfunction
|
|
||||||
endfor
|
|
||||||
|
|
||||||
function s:expr_col()
|
function s:SearchLoop(pat,flags,expr)
|
||||||
|
return s:GetPair(a:pat,'\_$.',a:flags,a:expr)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function s:ExprCol()
|
||||||
if getline('.')[col('.')-2] == ':'
|
if getline('.')[col('.')-2] == ':'
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
let [bal, l:pos] = [0, getpos('.')]
|
let bal = 0
|
||||||
while bal < 1 && search('\m[{}?:;]','bW',s:scriptTag)
|
while s:SearchLoop('[{}?:]','bW',s:skip_expr)
|
||||||
if eval(s:skip_expr)
|
if s:LookingAt() == ':'
|
||||||
continue
|
if getline('.')[col('.')-2] == ':'
|
||||||
elseif s:looking_at() == ':'
|
call cursor(0,col('.')-1)
|
||||||
let bal -= strpart(getline('.'),col('.')-2,3) !~ '::'
|
continue
|
||||||
elseif s:looking_at() == '?'
|
endif
|
||||||
|
let bal -= 1
|
||||||
|
elseif s:LookingAt() == '?'
|
||||||
|
if getline('.')[col('.'):col('.')+1] =~ '^\.\d\@!'
|
||||||
|
continue
|
||||||
|
elseif !bal
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
let bal += 1
|
let bal += 1
|
||||||
elseif s:looking_at() == '{' && getpos('.')[1:2] != b:js_cache[1:] && !s:IsBlock()
|
elseif s:LookingAt() == '{'
|
||||||
let bal = 1
|
return !s:IsBlock()
|
||||||
elseif s:looking_at() != '}' || s:GetPair('{','}','bW',s:skip_expr,200) < 1
|
elseif !s:GetPair('{','}','bW',s:skip_expr)
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
call setpos('.',l:pos)
|
|
||||||
return max([bal,0])
|
|
||||||
endfunction
|
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',
|
let s:opfirst = '^' . get(g:,'javascript_opfirst',
|
||||||
\ '\C\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')
|
\ '\C\%([<>=,.?^%|/&]\|\([-:+]\)\1\@!\|\*\+\|!=\|in\%(stanceof\)\=\>\)')
|
||||||
let s:continuation = get(g:,'javascript_continuation',
|
let s:continuation = get(g:,'javascript_continuation',
|
||||||
\ '\C\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$'
|
\ '\C\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$'
|
||||||
|
|
||||||
function s:continues(ln,con)
|
function s:Continues()
|
||||||
let token = matchstr(a:con[-15:],s:continuation)
|
let tok = matchstr(strpart(getline('.'),col('.')-15,15),s:continuation)
|
||||||
if strlen(token)
|
if tok =~ '[a-z:]'
|
||||||
call cursor(a:ln,strlen(a:con))
|
return tok == ':' ? s:ExprCol() : s:PreviousToken() != '.'
|
||||||
if token =~ '[/>]'
|
elseif tok !~ '[/>]'
|
||||||
return s:syn_at(a:ln,col('.')) !~? (token == '>' ? 'jsflow\|^html' : 'regex')
|
return tok isnot ''
|
||||||
elseif token =~ '\l'
|
|
||||||
return s:previous_token() != '.'
|
|
||||||
elseif token == ':'
|
|
||||||
return s:expr_col()
|
|
||||||
endif
|
|
||||||
return 1
|
|
||||||
endif
|
endif
|
||||||
endfunction
|
return s:SynAt(line('.'),col('.')) !~? (tok == '>' ? 'jsflow\|^html' : 'regex')
|
||||||
|
|
||||||
function s:Trim(ln)
|
|
||||||
let pline = substitute(getline(a:ln),'\s*$','','')
|
|
||||||
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
|
|
||||||
while l:max != -1 && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com
|
|
||||||
let pline = pline[: l:max]
|
|
||||||
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
|
|
||||||
let pline = substitute(pline[:-2],'\s*$','','')
|
|
||||||
endwhile
|
|
||||||
return pline
|
|
||||||
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) =~? 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
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
return l:n
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Check if line 'lnum' has a balanced amount of parentheses.
|
" Check if line 'lnum' has a balanced amount of parentheses.
|
||||||
function s:Balanced(lnum)
|
function s:Balanced(lnum)
|
||||||
let l:open = 0
|
let [l:open, l:line] = [0, getline(a:lnum)]
|
||||||
let l:line = getline(a:lnum)
|
let pos = match(l:line, '[][(){}]')
|
||||||
let pos = match(l:line, '[][(){}]', 0)
|
|
||||||
while pos != -1
|
while pos != -1
|
||||||
if s:syn_at(a:lnum,pos + 1) !~? b:syng_strcom
|
if s:SynAt(a:lnum,pos + 1) !~? b:syng_strcom
|
||||||
let l:open += match(' ' . l:line[pos],'[[({]')
|
let l:open += match(' ' . l:line[pos],'[[({]')
|
||||||
if l:open < 0
|
if l:open < 0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let pos = match(l:line, (l:open ?
|
let pos = match(l:line, !l:open ? '[][(){}]' : '()' =~ l:line[pos] ?
|
||||||
\ '['.matchstr(['][','()','{}'],l:line[pos]).']' :
|
\ '[()]' : '{}' =~ l:line[pos] ? '[{}]' : '[][]', pos + 1)
|
||||||
\ '[][(){}]'), pos + 1)
|
|
||||||
endwhile
|
endwhile
|
||||||
return !l:open
|
return !l:open
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:OneScope(lnum)
|
function s:OneScope()
|
||||||
let pline = s:Trim(a:lnum)
|
if s:LookingAt() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr)
|
||||||
call cursor(a:lnum,strlen(pline))
|
let tok = s:PreviousToken()
|
||||||
let kw = 'else do'
|
return (count(split('for if let while with'),tok) ||
|
||||||
if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
|
\ tok =~# '^await$\|^each$' && s:PreviousToken() ==# 'for') &&
|
||||||
if s:previous_token() =~# '^\%(await\|each\)$'
|
\ s:Pure('s:PreviousToken') != '.' && !(tok == 'while' && s:DoWhile())
|
||||||
call s:previous_token()
|
elseif s:Token() =~# '^else$\|^do$'
|
||||||
let kw = 'for'
|
return s:Pure('s:PreviousToken') != '.'
|
||||||
else
|
|
||||||
let kw = 'for if let while with'
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&
|
return strpart(getline('.'),col('.')-2,2) == '=>'
|
||||||
\ s:__previous_token() != '.' && !s:doWhile()
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:doWhile()
|
function s:DoWhile()
|
||||||
if expand('<cword>') ==# 'while'
|
let cpos = searchpos('\m\<','cbW')
|
||||||
let [bal, l:pos] = [0, getpos('.')]
|
while s:SearchLoop('\C[{}]\|\<\%(do\|while\)\>','bW',s:skip_expr)
|
||||||
call search('\m\<','cbW')
|
if s:LookingAt() =~ '\a'
|
||||||
while bal < 1 && search('\m\C[{}]\|\<\%(do\|while\)\>','bW')
|
if s:Pure('s:IsBlock')
|
||||||
if eval(s:skip_expr)
|
if s:LookingAt() ==# 'd'
|
||||||
continue
|
return 1
|
||||||
elseif s:looking_at() ==# 'd'
|
endif
|
||||||
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
|
break
|
||||||
endif
|
endif
|
||||||
endwhile
|
elseif s:LookingAt() != '}' || !s:GetPair('{','}','bW',s:skip_expr)
|
||||||
call setpos('.',l:pos)
|
|
||||||
return max([bal,0])
|
|
||||||
endif
|
|
||||||
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
|
break
|
||||||
endif
|
endif
|
||||||
let ind = min([ind, indent(l:i)])
|
|
||||||
let l:i = s:PrevCodeLine(l:i - 1)
|
|
||||||
endwhile
|
endwhile
|
||||||
return bL
|
call call('cursor',cpos)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" returns total offset from braceless contexts. 'num' is the lineNr which
|
||||||
|
" encloses the entire context, 'cont' if whether a:firstline is a continued
|
||||||
|
" expression, which could have started in a braceless context
|
||||||
|
function s:IsContOne(cont)
|
||||||
|
let [l:num, b_l] = [b:js_cache[1] + !b:js_cache[1], 0]
|
||||||
|
let pind = b:js_cache[1] ? indent(b:js_cache[1]) + s:sw() : 0
|
||||||
|
let ind = indent('.') + !a:cont
|
||||||
|
while line('.') > l:num && ind > pind || line('.') == l:num
|
||||||
|
if indent('.') < ind && s:OneScope()
|
||||||
|
let b_l += 1
|
||||||
|
elseif !a:cont || b_l || ind < indent(a:firstline)
|
||||||
|
break
|
||||||
|
else
|
||||||
|
call cursor(0,1)
|
||||||
|
endif
|
||||||
|
let ind = min([ind, indent('.')])
|
||||||
|
if s:PreviousToken() is ''
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
return b_l
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function s:IsSwitch()
|
||||||
|
call call('cursor',b:js_cache[1:])
|
||||||
|
return search('\m\C\%#.\_s*\%(\%(\/\/.*\_$\|\/\*\_.\{-}\*\/\)\@>\_s*\)*\%(case\|default\)\>','nWc'.s:z)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
|
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
|
||||||
function s:IsBlock(...)
|
function s:IsBlock()
|
||||||
if a:0 || s:looking_at() == '{'
|
let tok = s:PreviousToken()
|
||||||
let l:n = line('.')
|
if join(s:stack) =~? 'xml\|jsx' && s:SynAt(line('.'),col('.')-1) =~? 'xml\|jsx'
|
||||||
let char = s:previous_token()
|
let s:in_jsx = 1
|
||||||
if match(s:stack,'\cxml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx'
|
return tok != '{'
|
||||||
return char != '{'
|
elseif tok =~ '\k'
|
||||||
elseif char =~ '\k'
|
if tok ==# 'type'
|
||||||
if char ==# 'type'
|
return s:Pure('eval',"s:PreviousToken() !~# '^\\%(im\\|ex\\)port$' || s:PreviousToken() == '.'")
|
||||||
return s:__previous_token() !~# '^\%(im\|ex\)port$'
|
elseif tok ==# 'of'
|
||||||
endif
|
return s:Pure('eval',"!s:GetPair('[[({]','[])}]','bW',s:skip_expr) || s:LookingAt() != '(' ||"
|
||||||
return index(split('return const let import export extends yield default delete var await void typeof throw case new of in instanceof')
|
\ ."s:{s:PreviousToken() ==# 'await' ? 'Previous' : ''}Token() !=# 'for' || s:PreviousToken() == '.'")
|
||||||
\ ,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
|
endif
|
||||||
return char !~ '[=~!<,.?^%|&([]' &&
|
return index(split('return const let import export extends yield default delete var await void typeof throw case new in instanceof')
|
||||||
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
|
\ ,tok) < (line('.') != a:firstline) || s:Pure('s:PreviousToken') == '.'
|
||||||
|
elseif tok == '>'
|
||||||
|
return getline('.')[col('.')-2] == '=' || s:SynAt(line('.'),col('.')) =~? 'jsflow\|^html'
|
||||||
|
elseif tok == '*'
|
||||||
|
return s:Pure('s:PreviousToken') == ':'
|
||||||
|
elseif tok == ':'
|
||||||
|
return s:Pure('eval',"s:PreviousToken() =~ '^\\K\\k*$' && !s:ExprCol()")
|
||||||
|
elseif tok == '/'
|
||||||
|
return s:SynAt(line('.'),col('.')) =~? 'regex'
|
||||||
|
elseif tok !~ '[=~!<,.?^%|&([]'
|
||||||
|
return tok !~ '[-+]' || line('.') != a:firstline && getline('.')[col('.')-2] == tok
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function GetJavascriptIndent()
|
function GetJavascriptIndent()
|
||||||
let b:js_cache = get(b:,'js_cache',[0,0,0])
|
call s:GetVars()
|
||||||
let s:synId_cache = {}
|
let s:synid_cache = [[],[]]
|
||||||
" Get the current line.
|
let l:line = getline(v:lnum)
|
||||||
call cursor(v:lnum,1)
|
|
||||||
let l:line = getline('.')
|
|
||||||
" use synstack as it validates syn state and works in an empty line
|
" use synstack as it validates syn state and works in an empty line
|
||||||
let s:stack = map(synstack(v:lnum,1),"synIDattr(v:val,'name')")
|
let s:stack = [''] + map(synstack(v:lnum,1),"synIDattr(v:val,'name')")
|
||||||
let syns = get(s:stack,-1,'')
|
|
||||||
|
|
||||||
" start with strings,comments,etc.
|
" start with strings,comments,etc.
|
||||||
if syns =~? s:syng_com
|
if s:stack[-1] =~? 'comment\|doc'
|
||||||
if l:line =~ '^\s*\*'
|
if l:line =~ '^\s*\*'
|
||||||
return cindent(v:lnum)
|
return cindent(v:lnum)
|
||||||
elseif l:line !~ '^\s*\/[/*]'
|
elseif l:line !~ '^\s*\/[/*]'
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
elseif syns =~? b:syng_str
|
elseif s:stack[-1] =~? b:syng_str
|
||||||
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
|
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
|
||||||
let b:js_cache[0] = v:lnum
|
let b:js_cache[0] = v:lnum
|
||||||
endif
|
endif
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
let l:lnum = s:PrevCodeLine(v:lnum - 1)
|
|
||||||
if !l:lnum
|
let s:l1 = max([0,prevnonblank(v:lnum) - (s:rel ? 2000 : 1000),
|
||||||
|
\ get(get(b:,'hi_indent',{}),'blocklnr')])
|
||||||
|
call cursor(v:lnum,1)
|
||||||
|
if s:PreviousToken() is ''
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
let [l:lnum, pline] = [line('.'), getline('.')[:col('.')-1]]
|
||||||
|
|
||||||
let l:line = substitute(l:line,'^\s*','','')
|
let l:line = substitute(l:line,'^\s*','','')
|
||||||
|
let l:line_raw = l:line
|
||||||
if l:line[:1] == '/*'
|
if l:line[:1] == '/*'
|
||||||
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')
|
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')
|
||||||
endif
|
endif
|
||||||
@@ -402,57 +382,92 @@ function GetJavascriptIndent()
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" the containing paren, bracket, or curly. Many hacks for performance
|
" the containing paren, bracket, or curly. Many hacks for performance
|
||||||
let [ s:scriptTag, idx ] = [ get(get(b:,'hi_indent',{}),'blocklnr'),
|
call cursor(v:lnum,1)
|
||||||
\ index([']',')','}'],l:line[0]) ]
|
let idx = index([']',')','}'],l:line[0])
|
||||||
if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum &&
|
if b:js_cache[0] > l:lnum && b:js_cache[0] < v:lnum ||
|
||||||
\ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum))
|
\ b:js_cache[0] == l:lnum && s:Balanced(l:lnum)
|
||||||
call call('cursor',b:js_cache[2] ? b:js_cache[1:] : [0,0])
|
call call('cursor',b:js_cache[1:])
|
||||||
else
|
else
|
||||||
let [s:looksyn, s:checkIn, s:topCol] = [v:lnum - 1, 0, 0]
|
let [s:looksyn, s:top_col, s:check_in, s:l1] = [v:lnum - 1,0,0,
|
||||||
if idx + 1
|
\ max([s:l1, &smc ? search('\m^.\{'.&smc.',}','nbW',s:l1 + 1) + 1 : 0])]
|
||||||
call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000)
|
try
|
||||||
elseif getline(v:lnum) !~ '^\S' && syns =~? 'block'
|
if idx != -1
|
||||||
call s:GetPair('{','}','bW','s:skip_func()',2000)
|
call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:SkipFunc()')
|
||||||
else
|
elseif getline(v:lnum) !~ '^\S' && s:stack[-1] =~? 'block\|^jsobject$'
|
||||||
call s:alternatePair()
|
call s:GetPair('{','}','bW','s:SkipFunc()')
|
||||||
endif
|
else
|
||||||
|
call s:AlternatePair()
|
||||||
|
endif
|
||||||
|
catch /^\Cout of bounds$/
|
||||||
|
call cursor(v:lnum,1)
|
||||||
|
endtry
|
||||||
|
let b:js_cache[1:] = line('.') == v:lnum ? [0,0] : getpos('.')[1:2]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [s:scriptTag,0] : getpos('.')[1:2])
|
let [b:js_cache[0], num] = [v:lnum, b:js_cache[1]]
|
||||||
let num = b:js_cache[1]
|
|
||||||
|
|
||||||
let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0]
|
let [num_ind, is_op, b_l, l:switch_offset, s:in_jsx] = [s:Nat(indent(num)),0,0,0,0]
|
||||||
if !b:js_cache[2] || s:IsBlock()
|
if !num || s:LookingAt() == '{' && s:IsBlock()
|
||||||
let ilnum = line('.')
|
let ilnum = line('.')
|
||||||
let pline = s:Trim(l:lnum)
|
if num && !s:in_jsx && s:LookingAt() == ')' && s:GetPair('(',')','bW',s:skip_expr)
|
||||||
if b:js_cache[2] && s:looking_at() == ')' && s:GetPair('(',')','bW',s:skip_expr,100) > 0
|
if ilnum == num
|
||||||
let num = ilnum == num ? line('.') : num
|
let [num, num_ind] = [line('.'), indent('.')]
|
||||||
if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.'
|
endif
|
||||||
let switch_offset = &cino !~ ':' ? s:W : max([-indent(num),s:parse_cino(':')])
|
if idx == -1 && s:PreviousToken() ==# 'switch' && s:IsSwitch()
|
||||||
|
let l:switch_offset = &cino !~ ':' ? s:sw() : s:ParseCino(':')
|
||||||
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
|
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
|
||||||
return indent(num) + switch_offset
|
return s:Nat(num_ind + l:switch_offset)
|
||||||
|
elseif &cino =~ '='
|
||||||
|
let l:case_offset = s:ParseCino('=')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if idx < 0 && pline[-1:] !~ '[{;]'
|
if idx == -1 && pline[-1:] !~ '[{;]'
|
||||||
let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W
|
call cursor(l:lnum, len(pline))
|
||||||
let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp)
|
let sol = matchstr(l:line,s:opfirst)
|
||||||
let bL -= (bL && l:line[0] == '{') * s:W
|
if sol is '' || sol == '/' && s:SynAt(v:lnum,
|
||||||
|
\ 1 + len(getline(v:lnum)) - len(l:line)) =~? 'regex'
|
||||||
|
if s:Continues()
|
||||||
|
let is_op = s:sw()
|
||||||
|
endif
|
||||||
|
elseif num && sol =~# '^\%(in\%(stanceof\)\=\|\*\)$' &&
|
||||||
|
\ s:LookingAt() == '}' && s:GetPair('{','}','bW',s:skip_expr) &&
|
||||||
|
\ s:PreviousToken() == ')' && s:GetPair('(',')','bW',s:skip_expr) &&
|
||||||
|
\ (s:PreviousToken() == ']' || s:LookingAt() =~ '\k' &&
|
||||||
|
\ s:{s:PreviousToken() == '*' ? 'Previous' : ''}Token() !=# 'function')
|
||||||
|
return num_ind + s:sw()
|
||||||
|
else
|
||||||
|
let is_op = s:sw()
|
||||||
|
endif
|
||||||
|
call cursor(l:lnum, len(pline))
|
||||||
|
let b_l = s:Nat(s:IsContOne(is_op) - (!is_op && l:line =~ '^{')) * s:sw()
|
||||||
endif
|
endif
|
||||||
elseif idx < 0 && getline(b:js_cache[1])[b:js_cache[2]-1] == '(' && &cino =~ '('
|
elseif idx.s:LookingAt().&cino =~ '^-1(.*(' && (search('\m\S','nbW',num) || s:ParseCino('U'))
|
||||||
let pval = s:parse_cino('(')
|
let pval = s:ParseCino('(')
|
||||||
return !pval || !search('\m\S','nbW',num) && !s:parse_cino('U') ?
|
if !pval
|
||||||
\ (s:parse_cino('w') ? 0 : -!!search('\m\S','W'.s:z,num)) + virtcol('.') :
|
let [Wval, vcol] = [s:ParseCino('W'), virtcol('.')]
|
||||||
\ max([indent('.') + pval + s:GetPair('(',')','nbrmW',s:skip_expr,100,num) * s:W,0])
|
if search('\m\S','W',num)
|
||||||
|
return s:ParseCino('w') ? vcol : virtcol('.')-1
|
||||||
|
endif
|
||||||
|
return Wval ? s:Nat(num_ind + Wval) : vcol
|
||||||
|
endif
|
||||||
|
return s:Nat(num_ind + pval + searchpair('\m(','','\m)','nbrmW',s:skip_expr,num) * s:sw())
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" main return
|
" main return
|
||||||
if l:line =~ '^[])}]\|^|}'
|
if l:line =~ '^[])}]\|^|}'
|
||||||
return max([indent(num),0])
|
if l:line_raw[0] == ')'
|
||||||
|
if s:ParseCino('M')
|
||||||
|
return indent(l:lnum)
|
||||||
|
elseif num && &cino =~# 'm' && !s:ParseCino('m')
|
||||||
|
return virtcol('.') - 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return num_ind
|
||||||
elseif num
|
elseif num
|
||||||
return indent(num) + s:W + switch_offset + bL + isOp
|
return s:Nat(num_ind + get(l:,'case_offset',s:sw()) + l:switch_offset + b_l + is_op)
|
||||||
endif
|
endif
|
||||||
return bL + isOp
|
return b_l + is_op
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
let &cpo = s:cpo_save
|
||||||
|
|||||||
@@ -3,13 +3,14 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'kotlin') == -1
|
|||||||
" Vim indent file
|
" Vim indent file
|
||||||
" Language: Kotlin
|
" Language: Kotlin
|
||||||
" Maintainer: Alexander Udalov
|
" Maintainer: Alexander Udalov
|
||||||
" Latest Revision: 27 June 2015
|
" Latest Revision: 15 July 2017
|
||||||
|
|
||||||
if exists("b:did_indent")
|
if exists("b:did_indent")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let b:did_indent = 1
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal cinoptions& cinoptions+=j1,L0
|
||||||
setlocal indentexpr=GetKotlinIndent()
|
setlocal indentexpr=GetKotlinIndent()
|
||||||
setlocal indentkeys=0},0),!^F,o,O,e,<CR>
|
setlocal indentkeys=0},0),!^F,o,O,e,<CR>
|
||||||
setlocal autoindent " TODO ?
|
setlocal autoindent " TODO ?
|
||||||
@@ -25,6 +26,21 @@ function! GetKotlinIndent()
|
|||||||
let prev_indent = indent(prev_num)
|
let prev_indent = indent(prev_num)
|
||||||
let cur = getline(v:lnum)
|
let cur = getline(v:lnum)
|
||||||
|
|
||||||
|
if cur =~ '^\s*\*'
|
||||||
|
return cindent(v:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if prev =~ '^\s*\*/'
|
||||||
|
let st = prev
|
||||||
|
while st > 1
|
||||||
|
if getline(st) =~ '^\s*/\*'
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let st = st - 1
|
||||||
|
endwhile
|
||||||
|
return indent(st)
|
||||||
|
endif
|
||||||
|
|
||||||
let prev_open_paren = prev =~ '^.*(\s*$'
|
let prev_open_paren = prev =~ '^.*(\s*$'
|
||||||
let cur_close_paren = cur =~ '^\s*).*$'
|
let cur_close_paren = cur =~ '^\s*).*$'
|
||||||
|
|
||||||
|
|||||||
@@ -24,21 +24,21 @@ endif
|
|||||||
|
|
||||||
" Variables -----------------------------------------------{{{1
|
" Variables -----------------------------------------------{{{1
|
||||||
|
|
||||||
let s:open_patt = '\%(\<\%(function\|if\|repeat\|do\)\>\|(\|{\)'
|
let s:open_patt = '\C\%(\<\%(function\|if\|repeat\|do\)\>\|(\|{\)'
|
||||||
let s:middle_patt = '\<\%(else\|elseif\)\>'
|
let s:middle_patt = '\C\<\%(else\|elseif\)\>'
|
||||||
let s:close_patt = '\%(\<\%(end\|until\)\>\|)\|}\)'
|
let s:close_patt = '\C\%(\<\%(end\|until\)\>\|)\|}\)'
|
||||||
|
|
||||||
let s:anon_func_start = '\S\+\s*[({].*\<function\s*(.*)\s*$'
|
let s:anon_func_start = '\S\+\s*[({].*\<function\s*(.*)\s*$'
|
||||||
let s:anon_func_end = '\<end\%(\s*[)}]\)\+'
|
let s:anon_func_end = '\<end\%(\s*[)}]\)\+'
|
||||||
|
|
||||||
" 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('.'),1),'name') =~ 'luaComment\\|luaString'"
|
let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~# 'luaComment\\|luaString'"
|
||||||
|
|
||||||
" Auxiliary Functions -------------------------------------{{{1
|
" Auxiliary Functions -------------------------------------{{{1
|
||||||
|
|
||||||
function s:IsInCommentOrString(lnum, col)
|
function s:IsInCommentOrString(lnum, col)
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ 'luaCommentLong\|luaStringLong'
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# 'luaCommentLong\|luaStringLong'
|
||||||
\ && !(getline(a:lnum) =~ '^\s*\%(--\)\?\[=*\[') " opening tag is not considered 'in'
|
\ && !(getline(a:lnum) =~# '^\s*\%(--\)\?\[=*\[') " opening tag is not considered 'in'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Find line above 'lnum' that isn't blank, in a comment or string.
|
" Find line above 'lnum' that isn't blank, in a comment or string.
|
||||||
@@ -74,48 +74,42 @@ function GetLuaIndent()
|
|||||||
|
|
||||||
let original_cursor_pos = getpos(".")
|
let original_cursor_pos = getpos(".")
|
||||||
|
|
||||||
let i = 0
|
" count how many blocks the previous line opens
|
||||||
|
|
||||||
" check if the previous line opens blocks
|
|
||||||
call cursor(v:lnum, 1)
|
call cursor(v:lnum, 1)
|
||||||
let num_pairs = searchpair(s:open_patt, s:middle_patt, s:close_patt,
|
let num_prev_opens = searchpair(s:open_patt, s:middle_patt, s:close_patt,
|
||||||
\ 'mrb', s:skip_expr, prev_line)
|
\ 'mrb', s:skip_expr, prev_line)
|
||||||
if num_pairs > 0
|
|
||||||
let i += num_pairs
|
|
||||||
endif
|
|
||||||
|
|
||||||
" special case: call(with, {anon = function() -- should indent only once
|
" count how many blocks the current line closes
|
||||||
if num_pairs > 1 && contents_prev =~ s:anon_func_start
|
|
||||||
let i = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" check if current line closes blocks
|
|
||||||
call cursor(prev_line, col([prev_line,'$']))
|
call cursor(prev_line, col([prev_line,'$']))
|
||||||
let num_pairs = searchpair(s:open_patt, s:middle_patt, s:close_patt,
|
let num_cur_closes = searchpair(s:open_patt, s:middle_patt, s:close_patt,
|
||||||
\ 'mr', s:skip_expr, v:lnum)
|
\ 'mr', s:skip_expr, v:lnum)
|
||||||
if num_pairs > 0
|
|
||||||
let i -= num_pairs
|
|
||||||
endif
|
|
||||||
|
|
||||||
" special case: end}) -- end of call with anon func should unindent once
|
let i = num_prev_opens - num_cur_closes
|
||||||
if num_pairs > 1 && contents_cur =~ s:anon_func_end
|
|
||||||
let i = -1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" if the previous line closed a paren, unindent (except with anon funcs)
|
" if the previous line closed a paren, outdent (except with anon funcs)
|
||||||
call cursor(prev_line - 1, col([prev_line - 1, '$']))
|
call cursor(prev_line - 1, col([prev_line - 1, '$']))
|
||||||
let num_pairs = searchpair('(', '', ')', 'mr', s:skip_expr, prev_line)
|
let num_prev_closed_parens = searchpair('(', '', ')', 'mr', s:skip_expr, prev_line)
|
||||||
if num_pairs > 0 && contents_prev !~ s:anon_func_end
|
if num_prev_closed_parens > 0 && contents_prev !~# s:anon_func_end
|
||||||
let i -= 1
|
let i -= 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" if this line closed a paren, indent (except with anon funcs)
|
" if this line closed a paren, indent (except with anon funcs)
|
||||||
call cursor(prev_line, col([prev_line, '$']))
|
call cursor(prev_line, col([prev_line, '$']))
|
||||||
let num_pairs = searchpair('(', '', ')', 'mr', s:skip_expr, v:lnum)
|
let num_cur_closed_parens = searchpair('(', '', ')', 'mr', s:skip_expr, v:lnum)
|
||||||
if num_pairs > 0 && contents_cur !~ s:anon_func_end
|
if num_cur_closed_parens > 0 && contents_cur !~# s:anon_func_end
|
||||||
let i += 1
|
let i += 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" special case: call(with, {anon = function() -- should indent only once
|
||||||
|
if i > 1 && contents_prev =~# s:anon_func_start
|
||||||
|
let i = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" special case: end}) -- end of call w/ anon func should outdent only once
|
||||||
|
if i < -1 && contents_cur =~# s:anon_func_end
|
||||||
|
let i = -1
|
||||||
|
endif
|
||||||
|
|
||||||
" restore cursor
|
" restore cursor
|
||||||
call setpos(".", original_cursor_pos)
|
call setpos(".", original_cursor_pos)
|
||||||
|
|
||||||
|
|||||||
@@ -44,8 +44,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mako') == -1
|
|||||||
" 0.1 - 06 June 2009
|
" 0.1 - 06 June 2009
|
||||||
" - Initial public release of mako indent file
|
" - Initial public release of mako indent file
|
||||||
|
|
||||||
let sw=2 " default shiftwidth of 2 spaces
|
|
||||||
|
|
||||||
if exists("b:did_indent")
|
if exists("b:did_indent")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
@@ -55,6 +53,9 @@ setlocal nosmartindent
|
|||||||
setlocal noautoindent
|
setlocal noautoindent
|
||||||
setlocal nocindent
|
setlocal nocindent
|
||||||
setlocal nolisp
|
setlocal nolisp
|
||||||
|
setlocal expandtab
|
||||||
|
setlocal softtabstop=2
|
||||||
|
setlocal shiftwidth=2
|
||||||
|
|
||||||
setlocal indentexpr=GetMakoIndent()
|
setlocal indentexpr=GetMakoIndent()
|
||||||
setlocal indentkeys+=*<Return>,<>>,<bs>,end,:
|
setlocal indentkeys+=*<Return>,<>>,<bs>,end,:
|
||||||
|
|||||||
86
indent/nix.vim
Normal file
86
indent/nix.vim
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: Nix
|
||||||
|
" Maintainer: Daiderd Jordan <daiderd@gmail.com>
|
||||||
|
" URL: https://github.com/LnL7/vim-nix
|
||||||
|
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal indentexpr=GetNixIndent()
|
||||||
|
setlocal indentkeys+=0=then,0=else,0=inherit,*<Return>
|
||||||
|
|
||||||
|
if exists("*GetNixIndent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let s:skip_syntax = '\%(Comment\|String\)$'
|
||||||
|
let s:block_open = '\%({\|[\)'
|
||||||
|
let s:block_close = '\%(}\|]\)'
|
||||||
|
|
||||||
|
function! GetNixIndent()
|
||||||
|
let lnum = prevnonblank(v:lnum - 1)
|
||||||
|
let ind = indent(lnum)
|
||||||
|
|
||||||
|
" At the start of the file use zero indent.
|
||||||
|
if lnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if synIDattr(synID(v:lnum, 1, 1), "name") !~ s:skip_syntax
|
||||||
|
let current_line = getline(v:lnum)
|
||||||
|
let last_line = getline(lnum)
|
||||||
|
|
||||||
|
if last_line =~ s:block_open . '\s*$'
|
||||||
|
let ind += &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
if current_line =~ '^\s*' . s:block_close
|
||||||
|
let ind -= &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
if last_line =~ '\<let\s*$'
|
||||||
|
let ind += &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
if getline(v:lnum - 1) =~ '^\<in\s*$'
|
||||||
|
let ind += &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
if current_line =~ '^\s*in\>'
|
||||||
|
let ind -= &sw
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if synIDattr(synID(v:lnum, 1, 1), "name") =~ '^nixString'
|
||||||
|
let current_line = getline(v:lnum)
|
||||||
|
|
||||||
|
let ind = indent(v:lnum)
|
||||||
|
let bslnum = searchpair('''''', '', '''''', 'bnW',
|
||||||
|
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "InterpolationSpecial$"')
|
||||||
|
|
||||||
|
if ind <= indent(bslnum)
|
||||||
|
let ind = indent(bslnum) + &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
if current_line =~ '^\s*''''[^''\$]'
|
||||||
|
let ind = indent(bslnum)
|
||||||
|
endif
|
||||||
|
if current_line =~ '^\s*''''$'
|
||||||
|
let ind = indent(bslnum)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ind
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -136,9 +136,9 @@ function! GetPerlIndent()
|
|||||||
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
|
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
|
||||||
let brace = strpart(line, bracepos, 1)
|
let brace = strpart(line, bracepos, 1)
|
||||||
if brace == '(' || brace == '{' || brace == '['
|
if brace == '(' || brace == '{' || brace == '['
|
||||||
let ind = ind + &sw
|
let ind = ind + shiftwidth()
|
||||||
else
|
else
|
||||||
let ind = ind - &sw
|
let ind = ind - shiftwidth()
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let bracepos = match(line, braceclass, bracepos + 1)
|
let bracepos = match(line, braceclass, bracepos + 1)
|
||||||
@@ -151,25 +151,25 @@ function! GetPerlIndent()
|
|||||||
\ || synid == "perlBraces"
|
\ || synid == "perlBraces"
|
||||||
\ || synid == "perlStatementIndirObj"
|
\ || synid == "perlStatementIndirObj"
|
||||||
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
|
\ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
|
||||||
let ind = ind - &sw
|
let ind = ind - shiftwidth()
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
|
if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
|
||||||
let ind = ind + &sw
|
let ind = ind + shiftwidth()
|
||||||
endif
|
endif
|
||||||
if cline =~ '^\s*[])}]'
|
if cline =~ '^\s*[])}]'
|
||||||
let ind = ind - &sw
|
let ind = ind - shiftwidth()
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Indent lines that begin with 'or' or 'and'
|
" Indent lines that begin with 'or' or 'and'
|
||||||
if cline =~ '^\s*\(or\|and\)\>'
|
if cline =~ '^\s*\(or\|and\)\>'
|
||||||
if line !~ '^\s*\(or\|and\)\>'
|
if line !~ '^\s*\(or\|and\)\>'
|
||||||
let ind = ind + &sw
|
let ind = ind + shiftwidth()
|
||||||
endif
|
endif
|
||||||
elseif line =~ '^\s*\(or\|and\)\>'
|
elseif line =~ '^\s*\(or\|and\)\>'
|
||||||
let ind = ind - &sw
|
let ind = ind - shiftwidth()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ind
|
return ind
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ let s:incIndent =
|
|||||||
\ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' .
|
\ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' .
|
||||||
\ '^\s*title\s*$\|' .
|
\ '^\s*title\s*$\|' .
|
||||||
\ '^\s*skinparam\>.*{\s*$\|' .
|
\ '^\s*skinparam\>.*{\s*$\|' .
|
||||||
\ '^\s*\%(state\|class\|partition\|rectangle\|enum\|interface\|namespace\)\>.*{'
|
\ '^\s*\%(state\|class\|partition\|rectangle\|enum\|interface\|namespace\|object\)\>.*{'
|
||||||
|
|
||||||
let s:decIndent = '^\s*\%(end\|else\|}\)'
|
let s:decIndent = '^\s*\%(end\|else\|}\)'
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ let b:did_indent = 1
|
|||||||
" smartindent is good enough for powershell
|
" smartindent is good enough for powershell
|
||||||
setlocal smartindent
|
setlocal smartindent
|
||||||
" disable the indent removal for # marks
|
" disable the indent removal for # marks
|
||||||
inoremap # X#
|
inoremap <buffer> # X#
|
||||||
|
|
||||||
let b:undo_indent = "setl si<"
|
let b:undo_indent = "setl si<"
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,16 @@ if !exists('g:purescript_indent_let')
|
|||||||
let g:purescript_indent_let = 4
|
let g:purescript_indent_let = 4
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:purescript_indent_in')
|
||||||
|
" let x = 0
|
||||||
|
" >in
|
||||||
|
let g:purescript_indent_in = 1
|
||||||
|
endif
|
||||||
|
|
||||||
if !exists('g:purescript_indent_where')
|
if !exists('g:purescript_indent_where')
|
||||||
" where f :: Int -> Int
|
" where
|
||||||
" >>>>>>f x = x
|
" >>f :: Int -> Int
|
||||||
|
" >>f x = x
|
||||||
let g:purescript_indent_where = 6
|
let g:purescript_indent_where = 6
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -49,16 +56,29 @@ if !exists('g:purescript_indent_do')
|
|||||||
let g:purescript_indent_do = 3
|
let g:purescript_indent_do = 3
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:purescript_indent_dot')
|
||||||
|
" f
|
||||||
|
" :: forall a
|
||||||
|
" >. String
|
||||||
|
" -> String
|
||||||
|
let g:purescript_indent_dot = 1
|
||||||
|
endif
|
||||||
|
|
||||||
setlocal indentexpr=GetPurescriptIndent()
|
setlocal indentexpr=GetPurescriptIndent()
|
||||||
setlocal indentkeys=!^F,o,O,},=where,=in
|
setlocal indentkeys=!^F,o,O,},=where,=in,=::,=->,=→,==>,=⇒
|
||||||
|
|
||||||
|
function! s:GetSynStack(lnum, col)
|
||||||
|
return map(synstack(a:lnum, a:col), { key, val -> synIDattr(val, "name") })
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! GetPurescriptIndent()
|
function! GetPurescriptIndent()
|
||||||
|
let ppline = getline(v:lnum - 2)
|
||||||
let prevline = getline(v:lnum - 1)
|
let prevline = getline(v:lnum - 1)
|
||||||
let line = getline(v:lnum)
|
let line = getline(v:lnum)
|
||||||
|
|
||||||
if line =~ '^\s*\<where\>'
|
if line =~ '^\s*\<where\>'
|
||||||
let s = match(prevline, '\S')
|
let s = indent(v:lnum - 1)
|
||||||
return s + 2
|
return max([s, &l:shiftwidth])
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if line =~ '^\s*\<in\>'
|
if line =~ '^\s*\<in\>'
|
||||||
@@ -67,72 +87,191 @@ function! GetPurescriptIndent()
|
|||||||
|
|
||||||
while s <= 0 && n > 0
|
while s <= 0 && n > 0
|
||||||
let n = n - 1
|
let n = n - 1
|
||||||
let s = match(getline(n),'\<let\>')
|
let s = match(getline(n), '\<let\>')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') != -1
|
||||||
|
let s = -1
|
||||||
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
return s + 1
|
return s + g:purescript_indent_in
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '[!#$%&*+./<>?@\\^|~-]\s*$'
|
let s = match(prevline, '^\s*\zs\(--\|import\)')
|
||||||
|
if s >= 0
|
||||||
|
" comments
|
||||||
|
" imports
|
||||||
|
return s
|
||||||
|
endif
|
||||||
|
|
||||||
|
if prevline =~ '^\S.*::' && line !~ '^\s*\(\.\|->\|→\|=>\|⇒\)' && !~ '^instance'
|
||||||
|
" f :: String
|
||||||
|
" -> String
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '[[:alnum:][:blank:]]\@<=|[[:alnum:][:blank:]$]')
|
||||||
|
if s >= 0 && prevline !~ '^class\>' && index(s:GetSynStack(v:lnum - 1, s), "purescriptFunctionDecl") == -1
|
||||||
|
" ident pattern guards but not if we are in a type declaration
|
||||||
|
" what we detect using syntax groups
|
||||||
|
if prevline =~ '|\s*otherwise\>'
|
||||||
|
return indent(search('^\s*\k', 'bnW'))
|
||||||
|
" somehow this pattern does not work :/
|
||||||
|
" return indent(search('^\(\s*|\)\@!', 'bnW'))
|
||||||
|
else
|
||||||
|
return s
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(line, '\%(\\.\{-}\)\@<=->')
|
||||||
|
if s >= 0
|
||||||
|
" inline lambda
|
||||||
|
return indent(v:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" indent rules for -> (lambdas and case expressions)
|
||||||
|
let s = match(line, '->')
|
||||||
|
let p = match(prevline, '\\')
|
||||||
|
" protect that we are not in a type signature
|
||||||
|
" and not in a case expression
|
||||||
|
if s >= 0 && index(s:GetSynStack(s == 0 ? v:lnum - 1 : v:lnum, max([1, s])), "purescriptFunctionDecl") == -1
|
||||||
|
\ && p >= 0 && index(s:GetSynStack(v:lnum - 1, p), "purescriptString") == -1
|
||||||
|
return p
|
||||||
|
endif
|
||||||
|
|
||||||
|
if prevline =~ '^\S'
|
||||||
|
" start typing signature, function body, data & newtype on next line
|
||||||
|
return &l:shiftwidth
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ppline =~ '^\S' && prevline =~ '^\s*$'
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if line =~ '^\s*\%(::\|∷\)'
|
||||||
|
return match(prevline, '\S') + &l:shiftwidth
|
||||||
|
endif
|
||||||
|
|
||||||
|
if prevline =~ '^\s*\(::\|∷\)\s*forall'
|
||||||
|
return match(prevline, '\S') + g:purescript_indent_dot
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '^\s*\zs\%(::\|∷\|=>\|⇒\|->\|→\)')
|
||||||
|
let r = match(prevline, '^\s*\zs\.')
|
||||||
|
if s >= 0 || r >= 0
|
||||||
|
if s >= 0
|
||||||
|
if line !~ '^\s*\%(::\|∷\|=>\|⇒\|->\|→\)' && line !~ '^\s*$'
|
||||||
|
return s - 2
|
||||||
|
else
|
||||||
|
return s
|
||||||
|
endif
|
||||||
|
elseif r >= 0
|
||||||
|
if line !~ '^\s\%(::\|∷\|=>\|⇒\|->\|→\)'
|
||||||
|
return r - g:purescript_indent_dot
|
||||||
|
else
|
||||||
|
return r
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if prevline =~ '[!#$%&*+./<>?@\\^~-]\s*$'
|
||||||
let s = match(prevline, '=')
|
let s = match(prevline, '=')
|
||||||
if s > 0
|
if s > 0
|
||||||
return s + 2
|
return s + &l:shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s = match(prevline, ':')
|
let s = match(prevline, '\<:\>')
|
||||||
if s > 0
|
if s > 0
|
||||||
return s + 3
|
return s + &l:shiftwidth
|
||||||
else
|
else
|
||||||
return match(prevline, '\S')
|
return match(prevline, '\S') + &l:shiftwidth
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '[{([][^})\]]\+$'
|
if prevline =~ '[{([][^})\]]\+$'
|
||||||
|
echom "return 1"
|
||||||
return match(prevline, '[{([]')
|
return match(prevline, '[{([]')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '\<let\>\s\+.\+\(\<in\>\)\?\s*$'
|
let s = match(prevline, '\<let\>\s\+\zs\S')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return s
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '\<let\>\s*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return s + g:purescript_indent_let
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '\<let\>\s\+.\+\(\<in\>\)\?\s*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
return match(prevline, '\<let\>') + g:purescript_indent_let
|
return match(prevline, '\<let\>') + g:purescript_indent_let
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline !~ '\<else\>'
|
let s = searchpairpos('\%(--.\{-}\)\@<!\<if\>', '\<then\>', '\<else\>.*\zs$', 'bnrc')[0]
|
||||||
let s = match(prevline, '\<if\>.*\&.*\zs\<then\>')
|
if s > 0
|
||||||
if s > 0
|
" this rule ensures that using `=` in visual mode will correctly indent
|
||||||
return s
|
" `if then else`, but it does not handle lines after `then` and `else`
|
||||||
endif
|
if line =~ '\<\%(then\|else\)\>'
|
||||||
|
return match(getline(s), '\<if\>') + &l:shiftwidth
|
||||||
let s = match(prevline, '\<if\>')
|
|
||||||
if s > 0
|
|
||||||
return s + g:purescript_indent_if
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '\(\<where\>\|\<do\>\|=\|[{([]\)\s*$'
|
let p = match(prevline, '\<if\>\%(.\{-}\<then\>.\{-}\<else\>\)\@!')
|
||||||
return match(prevline, '\S') + &shiftwidth
|
if p > 0
|
||||||
|
return p + &l:shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '\<where\>\s\+\S\+.*$'
|
let s = match(prevline, '=\s*$')
|
||||||
return match(prevline, '\<where\>') + g:purescript_indent_where
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return match(prevline, '\S') + &l:shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '\<do\>\s\+\S\+.*$'
|
let s = match(prevline, '[{([]\s*$')
|
||||||
return match(prevline, '\<do\>') + g:purescript_indent_do
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return match(prevline, '\S') + (line !~ '^\s*[})]]' ? 0 : &l:shiftwidth)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '^\s*\<data\>\s\+[^=]\+\s\+=\s\+\S\+.*$'
|
if prevline =~ '^class'
|
||||||
|
return &l:shiftwidth
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '\<where\>\s*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return match(prevline, '\S') + g:purescript_indent_where
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '\<where\>\s\+\zs\S\+.*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return s
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '\<do\>\s*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return match(prevline, '\S') + g:purescript_indent_do
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '\<do\>\s\+\zs\S\+.*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return s
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s = match(prevline, '^\s*\<data\>\s\+[^=]\+\s\+=\s\+\S\+.*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
return match(prevline, '=')
|
return match(prevline, '=')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '\<case\>\s\+.\+\<of\>\s*$'
|
let s = match(prevline, '\<case\>\s\+.\+\<of\>\s*$')
|
||||||
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
return match(prevline, '\<case\>') + g:purescript_indent_case
|
return match(prevline, '\<case\>') + g:purescript_indent_case
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '^\s*\<\data\>\s\+\S\+\s*$'
|
if prevline =~ '^\s*\<\data\>\s\+\S\+\s*$'
|
||||||
return match(prevline, '\<data\>') + &shiftwidth
|
return match(prevline, '\<data\>') + &l:shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (line =~ '^\s*}\s*' && prevline !~ '^\s*;')
|
let s = match(prevline, '^\s*[}\]]')
|
||||||
return match(prevline, '\S') - &shiftwidth
|
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
|
||||||
|
return match(prevline, '\S') - &l:shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return match(prevline, '\S')
|
return match(prevline, '\S')
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'qml') == -1
|
|||||||
" Language: QML
|
" Language: QML
|
||||||
" Author: Robert Kieffer
|
" Author: Robert Kieffer
|
||||||
" URL:
|
" URL:
|
||||||
" Last Change: 2010-03-27 (Happy Birthday, Dash!)
|
" Last Change: 2017-10-27
|
||||||
"
|
"
|
||||||
" Improved JavaScript indent script.
|
" Improved JavaScript indent script.
|
||||||
|
|
||||||
@@ -22,10 +22,10 @@ if exists("*GetJsIndent")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Clean up a line of code by removing trailing '//' comments, and trimming
|
" Clean up a line of code by removing trailing '//' and '/* */' comments, and trimming
|
||||||
" whitespace
|
" whitespace
|
||||||
function! Trim(line)
|
function! Trim(line)
|
||||||
return substitute(substitute(a:line, '// .*', '', ''), '^\s*\|\s*$', '', 'g')
|
return substitute(substitute(substitute(a:line, '// .*', '', ''), '/\* .* \*/', '', ''), '^\s*\|\s*$', '', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! GetJsIndent()
|
function! GetJsIndent()
|
||||||
|
|||||||
16
indent/racket.vim
Normal file
16
indent/racket.vim
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
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
|
||||||
@@ -3,11 +3,12 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
|||||||
" Vim indent file
|
" Vim indent file
|
||||||
" Language: Rust
|
" Language: Rust
|
||||||
" Author: Chris Morgan <me@chrismorgan.info>
|
" Author: Chris Morgan <me@chrismorgan.info>
|
||||||
" Last Change: 2016 Jul 15
|
" Last Change: 2017 Mar 21
|
||||||
|
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||||
|
|
||||||
" 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
|
||||||
|
|
||||||
@@ -15,7 +16,7 @@ setlocal cindent
|
|||||||
setlocal cinoptions=L0,(0,Ws,J1,j1
|
setlocal cinoptions=L0,(0,Ws,J1,j1
|
||||||
setlocal cinkeys=0{,0},!^F,o,O,0[,0]
|
setlocal cinkeys=0{,0},!^F,o,O,0[,0]
|
||||||
" Don't think cinwords will actually do anything at all... never mind
|
" Don't think cinwords will actually do anything at all... never mind
|
||||||
setlocal cinwords=for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern
|
setlocal cinwords=for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern,macro
|
||||||
|
|
||||||
" Some preliminary settings
|
" Some preliminary settings
|
||||||
setlocal nolisp " Make sure lisp indenting doesn't supersede us
|
setlocal nolisp " Make sure lisp indenting doesn't supersede us
|
||||||
@@ -27,9 +28,12 @@ setlocal indentexpr=GetRustIndent(v:lnum)
|
|||||||
|
|
||||||
" Only define the function once.
|
" Only define the function once.
|
||||||
if exists("*GetRustIndent")
|
if exists("*GetRustIndent")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
" Come here when loading the script the first time.
|
" Come here when loading the script the first time.
|
||||||
|
|
||||||
function! s:get_line_trimmed(lnum)
|
function! s:get_line_trimmed(lnum)
|
||||||
@@ -207,4 +211,7 @@ function GetRustIndent(lnum)
|
|||||||
return cindent(a:lnum)
|
return cindent(a:lnum)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ endfunction
|
|||||||
|
|
||||||
function! s:IsCommentLine(lnum)
|
function! s:IsCommentLine(lnum)
|
||||||
return synIDattr(synID(a:lnum,
|
return synIDattr(synID(a:lnum,
|
||||||
\ match(getline(a:lnum), "\S") + 1, 0), "name")
|
\ match(getline(a:lnum), "\\S") + 1, 0), "name")
|
||||||
\ ==# "swiftComment"
|
\ ==# "swiftComment"
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -227,8 +227,8 @@ function! SwiftIndent(...)
|
|||||||
if numOpenParens > 0
|
if numOpenParens > 0
|
||||||
let savePosition = getcurpos()
|
let savePosition = getcurpos()
|
||||||
" Must be at EOL because open paren has to be above (left of) the cursor
|
" Must be at EOL because open paren has to be above (left of) the cursor
|
||||||
call cursor(previousNum, col("$"))
|
call cursor(previousNum, [previousNum, col("$")])
|
||||||
let previousParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
let previousParen = searchpair("(", "", ")", "cbWn", "s:IsExcludedFromIndent()")
|
||||||
call setpos(".", savePosition)
|
call setpos(".", savePosition)
|
||||||
return indent(previousParen) + shiftwidth()
|
return indent(previousParen) + shiftwidth()
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ function! TerraformIndent(lnum)
|
|||||||
let thisindent = previndent
|
let thisindent = previndent
|
||||||
|
|
||||||
" block open?
|
" block open?
|
||||||
if prevline =~ '[\[{]\s*$'
|
if prevline =~ '[\[{\(]\s*$'
|
||||||
let thisindent += &sw
|
let thisindent += &sw
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ function! TerraformIndent(lnum)
|
|||||||
let thisline = substitute(getline(a:lnum), '//.*$', '', '')
|
let thisline = substitute(getline(a:lnum), '//.*$', '', '')
|
||||||
|
|
||||||
" block close?
|
" block close?
|
||||||
if thisline =~ '^\s*[\]}]'
|
if thisline =~ '^\s*[\)\]}]'
|
||||||
let thisindent -= &sw
|
let thisindent -= &sw
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -25,10 +25,10 @@ let s:languages = [
|
|||||||
\ { 'name': 'javascript', 'pairs': ['<script', '</script>'] },
|
\ { 'name': 'javascript', 'pairs': ['<script', '</script>'] },
|
||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
for language in s:languages
|
for s:language in s:languages
|
||||||
" Set 'indentexpr' if the user has an indent file installed for the language
|
" Set 'indentexpr' if the user has an indent file installed for the language
|
||||||
if strlen(globpath(&rtp, 'indent/'. language.name .'.vim'))
|
if strlen(globpath(&rtp, 'indent/'. s:language.name .'.vim'))
|
||||||
let language.indentexpr = s:get_indentexpr(language.name)
|
let s:language.indentexpr = s:get_indentexpr(s:language.name)
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
|||||||
27
syntax/Jenkinsfile.vim
Normal file
27
syntax/Jenkinsfile.vim
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jenkins') == -1
|
||||||
|
|
||||||
|
runtime syntax/groovy.vim
|
||||||
|
syn keyword jenkinsfileBuiltInVariable currentBuild
|
||||||
|
|
||||||
|
syn keyword jenkinsfileCoreStep checkout
|
||||||
|
syn keyword jenkinsfileCoreStep node
|
||||||
|
syn keyword jenkinsfileCoreStep scm
|
||||||
|
syn keyword jenkinsfileCoreStep sh
|
||||||
|
syn keyword jenkinsfileCoreStep stage
|
||||||
|
syn keyword jenkinsfileCoreStep step
|
||||||
|
syn keyword jenkinsfileCoreStep tool
|
||||||
|
|
||||||
|
syn keyword jenkinsfilePluginStep docker
|
||||||
|
syn keyword jenkinsfilePluginStep emailext
|
||||||
|
syn keyword jenkinsfilePluginStep exwsAllocate
|
||||||
|
syn keyword jenkinsfilePluginStep exws
|
||||||
|
syn keyword jenkinsfilePluginStep httpRequest
|
||||||
|
syn keyword jenkinsfilePluginStep junit
|
||||||
|
|
||||||
|
hi link jenkinsfileCoreStep Function
|
||||||
|
hi link jenkinsfilePluginStep Include
|
||||||
|
hi link jenkinsfileBuiltInVariable Identifier
|
||||||
|
|
||||||
|
let b:current_syntax = "Jenkinsfile"
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -47,6 +47,58 @@ highlight link yamlFlowString NONE
|
|||||||
" but it does make sense we visualize quotes easily
|
" but it does make sense we visualize quotes easily
|
||||||
highlight link yamlFlowStringDelimiter Delimiter
|
highlight link yamlFlowStringDelimiter Delimiter
|
||||||
|
|
||||||
|
fun! s:normal_keywords_highlight(name)
|
||||||
|
if a:name == 'Comment'
|
||||||
|
highlight link ansible_normal_keywords Comment
|
||||||
|
elseif a:name == 'Constant'
|
||||||
|
highlight link ansible_normal_keywords Constant
|
||||||
|
elseif a:name == 'Identifier'
|
||||||
|
highlight link ansible_normal_keywords Identifier
|
||||||
|
elseif a:name == 'Statement'
|
||||||
|
highlight link ansible_normal_keywords Statement
|
||||||
|
elseif a:name == 'PreProc'
|
||||||
|
highlight link ansible_normal_keywords PreProc
|
||||||
|
elseif a:name == 'Type'
|
||||||
|
highlight link ansible_normal_keywords Type
|
||||||
|
elseif a:name == 'Special'
|
||||||
|
highlight link ansible_normal_keywords Special
|
||||||
|
elseif a:name == 'Underlined'
|
||||||
|
highlight link ansible_normal_keywords Underlined
|
||||||
|
elseif a:name == 'Ignore'
|
||||||
|
highlight link ansible_normal_keywords Ignore
|
||||||
|
elseif a:name == 'Error'
|
||||||
|
highlight link ansible_normal_keywords Error
|
||||||
|
elseif a:name == 'Todo'
|
||||||
|
highlight link ansible_normal_keywords Todo
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! s:with_keywords_highlight(name)
|
||||||
|
if a:name == 'Comment'
|
||||||
|
highlight link ansible_with_keywords Comment
|
||||||
|
elseif a:name == 'Constant'
|
||||||
|
highlight link ansible_with_keywords Constant
|
||||||
|
elseif a:name == 'Identifier'
|
||||||
|
highlight link ansible_with_keywords Identifier
|
||||||
|
elseif a:name == 'Statement'
|
||||||
|
highlight link ansible_with_keywords Statement
|
||||||
|
elseif a:name == 'PreProc'
|
||||||
|
highlight link ansible_with_keywords PreProc
|
||||||
|
elseif a:name == 'Type'
|
||||||
|
highlight link ansible_with_keywords Type
|
||||||
|
elseif a:name == 'Special'
|
||||||
|
highlight link ansible_with_keywords Special
|
||||||
|
elseif a:name == 'Underlined'
|
||||||
|
highlight link ansible_with_keywords Underlined
|
||||||
|
elseif a:name == 'Ignore'
|
||||||
|
highlight link ansible_with_keywords Ignore
|
||||||
|
elseif a:name == 'Error'
|
||||||
|
highlight link ansible_with_keywords Error
|
||||||
|
elseif a:name == 'Todo'
|
||||||
|
highlight link ansible_with_keywords Todo
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
fun! s:attribute_highlight(attributes)
|
fun! s:attribute_highlight(attributes)
|
||||||
if a:attributes =~ 'a'
|
if a:attributes =~ 'a'
|
||||||
syn match ansible_attributes "\v\w+\=" containedin=yamlPlainScalar
|
syn match ansible_attributes "\v\w+\=" containedin=yamlPlainScalar
|
||||||
@@ -85,11 +137,19 @@ if exists("g:ansible_extra_keywords_highlight")
|
|||||||
highlight link ansible_extra_special_keywords Statement
|
highlight link ansible_extra_special_keywords Statement
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syn keyword ansible_special_keywords include until retries delay when only_if become become_user block rescue always notify containedin=yamlBlockMappingKey contained
|
syn keyword ansible_normal_keywords include include_tasks import_tasks until retries delay when only_if become become_user block rescue always notify containedin=yamlBlockMappingKey contained
|
||||||
highlight link ansible_special_keywords Statement
|
if exists("g:ansible_normal_keywords_highlight")
|
||||||
|
call s:normal_keywords_highlight(g:ansible_normal_keywords_highlight)
|
||||||
|
else
|
||||||
|
highlight link ansible_normal_keywords Statement
|
||||||
|
endif
|
||||||
|
|
||||||
syn match ansible_with_keywords "\vwith_.+" containedin=yamlBlockMappingKey contained
|
syn match ansible_with_keywords "\vwith_.+" containedin=yamlBlockMappingKey contained
|
||||||
highlight link ansible_with_keywords Statement
|
if exists("g:ansible_with_keywords_highlight")
|
||||||
|
call s:with_keywords_highlight(g:ansible_with_keywords_highlight)
|
||||||
|
else
|
||||||
|
highlight link ansible_with_keywords Statement
|
||||||
|
endif
|
||||||
|
|
||||||
let b:current_syntax = "ansible"
|
let b:current_syntax = "ansible"
|
||||||
|
|
||||||
|
|||||||
481
syntax/cmake.vim
Normal file
481
syntax/cmake.vim
Normal file
File diff suppressed because one or more lines are too long
@@ -4,7 +4,6 @@ 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
|
|
||||||
|
|
||||||
" quit when a syntax file was already loaded
|
" quit when a syntax file was already loaded
|
||||||
if exists("b:current_syntax")
|
if exists("b:current_syntax")
|
||||||
@@ -50,7 +49,7 @@ endif
|
|||||||
if !exists("cpp_no_cpp14")
|
if !exists("cpp_no_cpp14")
|
||||||
syn case ignore
|
syn case ignore
|
||||||
syn match cppNumber display "\<0b[01]\('\=[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 "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" contains=cFloat
|
||||||
syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
|
syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
|
||||||
syn case match
|
syn case match
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -11,17 +11,17 @@ endif
|
|||||||
|
|
||||||
syn cluster crystalNotTop contains=@crystalExtendedStringSpecial,@crystalRegexpSpecial,@crystalDeclaration,crystalConditional,crystalExceptional,crystalMethodExceptional,crystalTodo,crystalLinkAttr
|
syn cluster crystalNotTop contains=@crystalExtendedStringSpecial,@crystalRegexpSpecial,@crystalDeclaration,crystalConditional,crystalExceptional,crystalMethodExceptional,crystalTodo,crystalLinkAttr
|
||||||
|
|
||||||
if exists('crystal_space_errors')
|
if exists('g:crystal_space_errors')
|
||||||
if !exists('crystal_no_trail_space_error')
|
if !exists('g:crystal_no_trail_space_error')
|
||||||
syn match crystalSpaceError display excludenl "\s\+$"
|
syn match crystalSpaceError display excludenl "\s\+$"
|
||||||
endif
|
endif
|
||||||
if !exists('crystal_no_tab_space_error')
|
if !exists('g:crystal_no_tab_space_error')
|
||||||
syn match crystalSpaceError display " \+\t"me=e-1
|
syn match crystalSpaceError display " \+\t"me=e-1
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Operators
|
" Operators
|
||||||
if exists('crystal_operators')
|
if exists('g:crystal_operators')
|
||||||
syn match crystalOperator "[~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::"
|
syn match crystalOperator "[~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::"
|
||||||
syn match crystalOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
|
syn match crystalOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
|
||||||
syn region crystalBracketOperator matchgroup=crystalOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@crystalNotTop
|
syn region crystalBracketOperator matchgroup=crystalOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@crystalNotTop
|
||||||
@@ -170,39 +170,39 @@ syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<
|
|||||||
syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=crystalStringDelimiter end=+^\s*\zs\z1$+ contains=crystalHeredocStart fold keepend
|
syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=crystalStringDelimiter end=+^\s*\zs\z1$+ contains=crystalHeredocStart fold keepend
|
||||||
syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=crystalStringDelimiter end=+^\s*\zs\z1$+ contains=crystalHeredocStart,@crystalStringSpecial fold keepend
|
syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=crystalStringDelimiter end=+^\s*\zs\z1$+ contains=crystalHeredocStart,@crystalStringSpecial fold keepend
|
||||||
|
|
||||||
if exists('main_syntax') && g:main_syntax ==# 'ecrystal'
|
if exists('g:main_syntax') && g:main_syntax ==# 'ecrystal'
|
||||||
let b:crystal_no_expensive = 1
|
let b:crystal_no_expensive = 1
|
||||||
end
|
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
|
||||||
syn match crystalStructDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator
|
syn match crystalStructDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator
|
||||||
syn match crystalLibDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator
|
syn match crystalLibDeclaration "[^[:space:];#<]\+" contained contains=crystalConstant,crystalOperator
|
||||||
syn match crystalMacroDeclaration "[^[:space:];#<\"]\+" contained contains=crystalConstant,crystalOperator
|
syn match crystalMacroDeclaration "[^[:space:];#<\"]\+" contained contains=crystalConstant,crystalOperator
|
||||||
syn match crystalEnumDeclaration "[^[:space:];#<\"]\+" contained contains=crystalConstant
|
syn match crystalEnumDeclaration "[^[:space:];#<\"]\+" contained contains=crystalConstant
|
||||||
syn match crystalFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=crystalMethodDeclaration,crystalFunctionDeclaration
|
syn match crystalFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=crystalMethodDeclaration,crystalFunctionDeclaration
|
||||||
syn match crystalFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2
|
syn match crystalFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2
|
||||||
syn match crystalFunction "\%([[:space:].]\|^\)\@<=\%(\[\][=?]\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration
|
syn match crystalFunction "\%([[:space:].]\|^\)\@<=\%(\[\][=?]\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration
|
||||||
|
|
||||||
syn cluster crystalDeclaration contains=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration,crystalModuleDeclaration,crystalClassDeclaration,crystalStructDeclaration,crystalLibDeclaration,crystalMacroDeclaration,crystalFunction,crystalBlockParameter,crystalTypeDeclaration,crystalEnumDeclaration
|
syn cluster crystalDeclaration contains=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration,crystalModuleDeclaration,crystalClassDeclaration,crystalStructDeclaration,crystalLibDeclaration,crystalMacroDeclaration,crystalFunction,crystalBlockParameter,crystalTypeDeclaration,crystalEnumDeclaration
|
||||||
|
|
||||||
" Keywords
|
" Keywords
|
||||||
" Note: the following keywords have already been defined:
|
" Note: the following keywords have already been defined:
|
||||||
" begin case class def do end for if module unless until while
|
" begin case class def do end for if module unless until while
|
||||||
syn match crystalControl "\<\%(break\|in\|next\|rescue\|return\)\>[?!]\@!"
|
syn match crystalControl "\<\%(break\|in\|next\|rescue\|return\)\>[?!]\@!"
|
||||||
syn match crystalOperator "\<defined?" display
|
syn match crystalOperator "\<defined?" display
|
||||||
syn match crystalKeyword "\<\%(super\|previous_def\|yield\|as\|of\|with\)\>[?!]\@!"
|
syn match crystalKeyword "\<\%(super\|previous_def\|yield\|of\|with\|uninitialized\|union\)\>[?!]\@!"
|
||||||
syn match crystalBoolean "\<\%(true\|false\)\>[?!]\@!"
|
syn match crystalBoolean "\<\%(true\|false\)\>[?!]\@!"
|
||||||
syn match crystalPseudoVariable "\<\%(nil\|self\|__DIR__\|__FILE__\|__LINE__\)\>[?!]\@!" " TODO: reorganise
|
syn match crystalPseudoVariable "\<\%(nil\|self\|__DIR__\|__FILE__\|__LINE__\|__END_LINE__\)\>[?!]\@!" " TODO: reorganise
|
||||||
|
|
||||||
" Expensive Mode - match 'end' with the appropriate opening keyword for syntax
|
" Expensive Mode - match 'end' with the appropriate opening keyword for syntax
|
||||||
" based folding and special highlighting of module/class/method definitions
|
" based folding and special highlighting of module/class/method definitions
|
||||||
if !exists('b:crystal_no_expensive') && !exists('crystal_no_expensive')
|
if !exists('b:crystal_no_expensive') && !exists('g:crystal_no_expensive')
|
||||||
syn match crystalDefine "\<alias\>" nextgroup=crystalAliasDeclaration skipwhite skipnl
|
syn match crystalDefine "\<alias\>" nextgroup=crystalAliasDeclaration skipwhite skipnl
|
||||||
syn match crystalDefine "\<def\>" nextgroup=crystalMethodDeclaration skipwhite skipnl
|
syn match crystalDefine "\<def\>" nextgroup=crystalMethodDeclaration skipwhite skipnl
|
||||||
syn match crystalDefine "\<fun\>" nextgroup=crystalFunctionDeclaration skipwhite skipnl
|
syn match crystalDefine "\<fun\>" nextgroup=crystalFunctionDeclaration skipwhite skipnl
|
||||||
@@ -246,10 +246,10 @@ if !exists('b:crystal_no_expensive') && !exists('crystal_no_expensive')
|
|||||||
syn region crystalOptionalDoLine matchgroup=crystalRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=crystalOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@crystalNotTop
|
syn region crystalOptionalDoLine matchgroup=crystalRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=crystalOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@crystalNotTop
|
||||||
syn region crystalRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=crystalRepeat end="\<end\>" contains=ALLBUT,@crystalNotTop nextgroup=crystalOptionalDoLine fold
|
syn region crystalRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=crystalRepeat end="\<end\>" contains=ALLBUT,@crystalNotTop nextgroup=crystalOptionalDoLine fold
|
||||||
|
|
||||||
if !exists('crystal_minlines')
|
if !exists('g:crystal_minlines')
|
||||||
let crystal_minlines = 500
|
let g:crystal_minlines = 500
|
||||||
endif
|
endif
|
||||||
exec 'syn sync minlines=' . crystal_minlines
|
exec 'syn sync minlines=' . g:crystal_minlines
|
||||||
|
|
||||||
else
|
else
|
||||||
syn match crystalControl "\<def\>[?!]\@!" nextgroup=crystalMethodDeclaration skipwhite skipnl
|
syn match crystalControl "\<def\>[?!]\@!" nextgroup=crystalMethodDeclaration skipwhite skipnl
|
||||||
@@ -271,7 +271,7 @@ syn match crystalLinkAttr "@\[" contained containedin=crystalLinkAttrRegion disp
|
|||||||
syn match crystalLinkAttr "]" contained containedin=crystalLinkAttrRegion display
|
syn match crystalLinkAttr "]" contained containedin=crystalLinkAttrRegion display
|
||||||
|
|
||||||
" Special Methods
|
" Special Methods
|
||||||
if !exists('crystal_no_special_methods')
|
if !exists('g:crystal_no_special_methods')
|
||||||
syn keyword crystalAccess protected private
|
syn keyword crystalAccess protected private
|
||||||
" attr is a common variable name
|
" attr is a common variable name
|
||||||
syn keyword crystalAttribute getter setter property abstract
|
syn keyword crystalAttribute getter setter property abstract
|
||||||
@@ -293,7 +293,7 @@ syn match crystalMacro "\%({%\|%}\|{{\|}}\)" nextgroup=crystalMacroRegion skipwh
|
|||||||
syn match crystalSharpBang "\%^#!.*" display
|
syn match crystalSharpBang "\%^#!.*" display
|
||||||
syn keyword crystalTodo FIXME NOTE TODO OPTIMIZE XXX todo contained
|
syn keyword crystalTodo FIXME NOTE TODO OPTIMIZE XXX todo contained
|
||||||
syn match crystalComment "#.*" contains=crystalSharpBang,crystalSpaceError,crystalTodo,@Spell
|
syn match crystalComment "#.*" contains=crystalSharpBang,crystalSpaceError,crystalTodo,@Spell
|
||||||
if !exists('crystal_no_comment_fold')
|
if !exists('g:crystal_no_comment_fold')
|
||||||
syn region crystalMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=crystalComment transparent fold keepend
|
syn region crystalMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=crystalComment transparent fold keepend
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -307,7 +307,7 @@ syn match crystalKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)
|
|||||||
syn match crystalKeywordAsMethod "\<\%(if\|ifdef\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
|
syn match crystalKeywordAsMethod "\<\%(if\|ifdef\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
|
||||||
|
|
||||||
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|caller\|exit\)\>" transparent contains=NONE
|
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|caller\|exit\)\>" transparent contains=NONE
|
||||||
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fork\|include\)\>" transparent contains=NONE
|
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fork\|include\|asm\)\>" transparent contains=NONE
|
||||||
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(loop\|private\|protected\)\>" transparent contains=NONE
|
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(loop\|private\|protected\)\>" transparent contains=NONE
|
||||||
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(require\|raise\)\>" transparent contains=NONE
|
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(require\|raise\)\>" transparent contains=NONE
|
||||||
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(typeof\|pointerof\|sizeof\|instance_sizeof\|\)\>" transparent contains=NONE
|
syn match crystalKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(typeof\|pointerof\|sizeof\|instance_sizeof\|\)\>" transparent contains=NONE
|
||||||
@@ -335,7 +335,7 @@ hi def link crystalASCIICode Character
|
|||||||
hi def link crystalFloat Float
|
hi def link crystalFloat Float
|
||||||
hi def link crystalBoolean Boolean
|
hi def link crystalBoolean Boolean
|
||||||
hi def link crystalException Exception
|
hi def link crystalException Exception
|
||||||
if !exists('crystal_no_identifiers')
|
if !exists('g:crystal_no_identifiers')
|
||||||
hi def link crystalIdentifier Identifier
|
hi def link crystalIdentifier Identifier
|
||||||
else
|
else
|
||||||
hi def link crystalIdentifier NONE
|
hi def link crystalIdentifier NONE
|
||||||
|
|||||||
669
syntax/css.vim
669
syntax/css.vim
@@ -1,669 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'css') == -1
|
|
||||||
|
|
||||||
" Vim syntax file
|
|
||||||
" Language: Cascading Style Sheets
|
|
||||||
" Previous Contributor List:
|
|
||||||
" Claudio Fleiner <claudio@fleiner.com> (Maintainer)
|
|
||||||
" Yeti (Add full CSS2, HTML4 support)
|
|
||||||
" Nikolai Weibull (Add CSS2 support)
|
|
||||||
" Maintainer: Jules Wang <w.jq0722@gmail.com>
|
|
||||||
" URL: https://github.com/JulesWang/css.vim
|
|
||||||
" Last Change: 2015 Aug.25
|
|
||||||
|
|
||||||
" For version 5.x: Clear all syntax items
|
|
||||||
" For version 6.x: Quit when a syntax file was already loaded
|
|
||||||
if !exists("main_syntax")
|
|
||||||
if version < 600
|
|
||||||
syntax clear
|
|
||||||
elseif exists("b:current_syntax")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let main_syntax = 'css'
|
|
||||||
elseif exists("b:current_syntax") && b:current_syntax == "css"
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
let s:cpo_save = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
syn case ignore
|
|
||||||
|
|
||||||
" HTML4 tags
|
|
||||||
syn keyword cssTagName abbr address area a b base
|
|
||||||
syn keyword cssTagName bdo blockquote body br button
|
|
||||||
syn keyword cssTagName caption cite code col colgroup dd del
|
|
||||||
syn keyword cssTagName dfn div dl dt em fieldset form
|
|
||||||
syn keyword cssTagName h1 h2 h3 h4 h5 h6 head hr html img i
|
|
||||||
syn keyword cssTagName iframe input ins isindex kbd label legend li
|
|
||||||
syn keyword cssTagName link map menu meta noscript ol optgroup
|
|
||||||
syn keyword cssTagName option p param pre q s samp script small
|
|
||||||
syn keyword cssTagName span strong sub sup tbody td
|
|
||||||
syn keyword cssTagName textarea tfoot th thead title tr ul u var
|
|
||||||
syn keyword cssTagName object svg
|
|
||||||
syn match cssTagName /\<select\>\|\<style\>\|\<table\>/
|
|
||||||
|
|
||||||
" 34 HTML5 tags
|
|
||||||
syn keyword cssTagName article aside audio bdi canvas command data
|
|
||||||
syn keyword cssTagName datalist details dialog embed figcaption figure footer
|
|
||||||
syn keyword cssTagName header hgroup keygen main mark menuitem meter nav
|
|
||||||
syn keyword cssTagName output progress rt rp ruby section
|
|
||||||
syn keyword cssTagName source summary time track video wbr
|
|
||||||
|
|
||||||
" Tags not supported in HTML5
|
|
||||||
" acronym applet basefont big center dir
|
|
||||||
" font frame frameset noframes strike tt
|
|
||||||
|
|
||||||
syn match cssTagName "\*"
|
|
||||||
|
|
||||||
" selectors
|
|
||||||
syn match cssSelectorOp "[,>+~]"
|
|
||||||
syn match cssSelectorOp2 "[~|^$*]\?=" contained
|
|
||||||
syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
|
|
||||||
|
|
||||||
" .class and #id
|
|
||||||
syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+" contains=cssClassNameDot
|
|
||||||
syn match cssClassNameDot contained '\.'
|
|
||||||
|
|
||||||
try
|
|
||||||
syn match cssIdentifier "#[A-Za-z<>-<2D>_@][A-Za-z<>-<2D>0-9_@-]*"
|
|
||||||
catch /^.*/
|
|
||||||
syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*"
|
|
||||||
endtry
|
|
||||||
|
|
||||||
" digits and units
|
|
||||||
syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\=%\=" contains=cssUnitDecorators
|
|
||||||
syn match cssValue contained transparent "[-+]\=\d\+\(\.\d*\)\=\([a-z]\+\)\=\>" contains=cssUnitDecorators,cssValueNumber
|
|
||||||
|
|
||||||
syn match cssIncludeKeyword /@\(-[a-z]\+-\)\=\(media\|keyframes\|import\|charset\|namespace\|page\)/ contained
|
|
||||||
" @media
|
|
||||||
syn region cssInclude start=/@media\>/ end=/\ze{/ skipwhite skipnl contains=cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType,cssIncludeKeyword,cssMediaComma,cssComment nextgroup=cssMediaBlock
|
|
||||||
syn keyword cssMediaType contained screen print aural braille embossed handheld projection tty tv speech all contained skipwhite skipnl
|
|
||||||
syn keyword cssMediaKeyword only not and contained
|
|
||||||
syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssTagName,cssClassName,cssIdentifier,cssPseudoClass,cssSelectorOp,cssSelectorOp2,cssAttributeSelector fold
|
|
||||||
syn match cssMediaComma "," skipwhite skipnl contained
|
|
||||||
|
|
||||||
" Reference: http://www.w3.org/TR/css3-mediaqueries/
|
|
||||||
syn keyword cssMediaProp contained width height orientation scan grid
|
|
||||||
syn match cssMediaProp contained /\(\(max\|min\)-\)\=\(\(device\)-\)\=aspect-ratio/
|
|
||||||
syn match cssMediaProp contained /\(\(max\|min\)-\)\=device-pixel-ratio/
|
|
||||||
syn match cssMediaProp contained /\(\(max\|min\)-\)\=device-\(height\|width\)/
|
|
||||||
syn match cssMediaProp contained /\(\(max\|min\)-\)\=\(height\|width\|resolution\|monochrome\|color\(-index\)\=\)/
|
|
||||||
syn keyword cssMediaAttr contained portrait landscape progressive interlace
|
|
||||||
|
|
||||||
" @page
|
|
||||||
" http://www.w3.org/TR/css3-page/
|
|
||||||
syn match cssPage "@page\>[^{]*{\@=" contains=cssPagePseudo,cssIncludeKeyword nextgroup=cssPageWrap transparent skipwhite skipnl
|
|
||||||
syn match cssPagePseudo /:\(left\|right\|first\|blank\)/ contained skipwhite skipnl
|
|
||||||
syn region cssPageWrap contained transparent matchgroup=cssBraces start="{" end="}" contains=cssPageMargin,cssPageProp,cssAttrRegion,css.*Prop,cssComment,cssValue,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssHacks
|
|
||||||
syn match cssPageMargin /@\(\(top\|left\|right\|bottom\)-\(left\|center\|right\|middle\|bottom\)\)\(-corner\)\=/ contained nextgroup=cssDefinition skipwhite skipnl
|
|
||||||
syn keyword cssPageProp contained content size
|
|
||||||
" http://www.w3.org/TR/CSS2/page.html#break-inside
|
|
||||||
syn keyword cssPageProp contained orphans widows
|
|
||||||
|
|
||||||
" @keyframe
|
|
||||||
" http://www.w3.org/TR/css3-animations/#keyframes
|
|
||||||
syn match cssKeyFrame "@\(-[a-z]\+-\)\=keyframes\>[^{]*{\@=" nextgroup=cssKeyFrameWrap contains=cssVendor,cssIncludeKeyword skipwhite skipnl transparent
|
|
||||||
syn region cssKeyFrameWrap contained transparent matchgroup=cssBraces start="{" end="}" contains=cssKeyFrameSelector
|
|
||||||
syn match cssKeyFrameSelector /\([-+]\=\d\+\(\.\d*\)\=%\|from\|to\)\=/ contained skipwhite skipnl nextgroup=cssDefinition
|
|
||||||
|
|
||||||
" @import
|
|
||||||
syn region cssInclude start=/@import\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword,cssURL,cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType
|
|
||||||
syn region cssInclude start=/@charset\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
|
|
||||||
syn region cssInclude start=/@namespace\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
|
|
||||||
|
|
||||||
" @font-face
|
|
||||||
" http://www.w3.org/TR/css3-fonts/#at-font-face-rule
|
|
||||||
syn match cssFontDescriptor "@font-face\>" nextgroup=cssFontDescriptorBlock skipwhite skipnl
|
|
||||||
syn region cssFontDescriptorBlock contained transparent matchgroup=cssBraces start="{" end="}" contains=cssComment,cssError,cssUnicodeEscape,cssCommonAttr,cssFontDescriptorProp,cssValue,cssFontDescriptorFunction,cssFontDescriptorAttr,cssNoise
|
|
||||||
|
|
||||||
syn match cssFontDescriptorProp contained "\<font-family\>"
|
|
||||||
syn keyword cssFontDescriptorProp contained src
|
|
||||||
syn match cssFontDescriptorProp contained "\<font-\(style\|weight\|stretch\)\>"
|
|
||||||
syn match cssFontDescriptorProp contained "\<unicode-range\>"
|
|
||||||
syn match cssFontDescriptorProp contained "\<font-\(variant\|feature-settings\)\>"
|
|
||||||
|
|
||||||
" src functions
|
|
||||||
syn region cssFontDescriptorFunction contained matchgroup=cssFunctionName start="\<\(uri\|url\|local\|format\)\s*(" end=")" contains=cssStringQ,cssStringQQ oneline keepend
|
|
||||||
" font-sytle and font-weight attributes
|
|
||||||
syn keyword cssFontDescriptorAttr contained normal italic oblique bold
|
|
||||||
" font-stretch attributes
|
|
||||||
syn match cssFontDescriptorAttr contained "\<\(\(ultra\|extra\|semi\)-\)\=\(condensed\|expanded\)\>"
|
|
||||||
" unicode-range attributes
|
|
||||||
syn match cssFontDescriptorAttr contained "U+[0-9A-Fa-f?]\+"
|
|
||||||
syn match cssFontDescriptorAttr contained "U+\x\+-\x\+"
|
|
||||||
" font-feature-settings attributes
|
|
||||||
syn keyword cssFontDescriptorAttr contained on off
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
" The 16 basic color names
|
|
||||||
syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow
|
|
||||||
|
|
||||||
" 130 more color names
|
|
||||||
syn keyword cssColor contained aliceblue antiquewhite aquamarine azure
|
|
||||||
syn keyword cssColor contained beige bisque blanchedalmond blueviolet brown burlywood
|
|
||||||
syn keyword cssColor contained cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan
|
|
||||||
syn match cssColor contained /\<dark\(blue\|cyan\|goldenrod\|gray\|green\|grey\|khaki\)\>/
|
|
||||||
syn match cssColor contained /\<dark\(magenta\|olivegreen\|orange\|orchid\|red\|salmon\|seagreen\)\>/
|
|
||||||
syn match cssColor contained /\<darkslate\(blue\|gray\|grey\)\>/
|
|
||||||
syn match cssColor contained /\<dark\(turquoise\|violet\)\>/
|
|
||||||
syn keyword cssColor contained deeppink deepskyblue dimgray dimgrey dodgerblue firebrick
|
|
||||||
syn keyword cssColor contained floralwhite forestgreen gainsboro ghostwhite gold
|
|
||||||
syn keyword cssColor contained goldenrod greenyellow grey honeydew hotpink
|
|
||||||
syn keyword cssColor contained indianred indigo ivory khaki lavender lavenderblush lawngreen
|
|
||||||
syn keyword cssColor contained lemonchiffon limegreen linen magenta
|
|
||||||
syn match cssColor contained /\<light\(blue\|coral\|cyan\|goldenrodyellow\|gray\|green\)\>/
|
|
||||||
syn match cssColor contained /\<light\(grey\|pink\|salmon\|seagreen\|skyblue\|yellow\)\>/
|
|
||||||
syn match cssColor contained /\<light\(slategray\|slategrey\|steelblue\)\>/
|
|
||||||
syn match cssColor contained /\<medium\(aquamarine\|blue\|orchid\|purple\|seagreen\)\>/
|
|
||||||
syn match cssColor contained /\<medium\(slateblue\|springgreen\|turquoise\|violetred\)\>/
|
|
||||||
syn keyword cssColor contained midnightblue mintcream mistyrose moccasin navajowhite
|
|
||||||
syn keyword cssColor contained oldlace olivedrab orange orangered orchid
|
|
||||||
syn match cssColor contained /\<pale\(goldenrod\|green\|turquoise\|violetred\)\>/
|
|
||||||
syn keyword cssColor contained papayawhip peachpuff peru pink plum powderblue
|
|
||||||
syn keyword cssColor contained rosybrown royalblue rebeccapurple saddlebrown salmon
|
|
||||||
syn keyword cssColor contained sandybrown seagreen seashell sienna skyblue slateblue
|
|
||||||
syn keyword cssColor contained slategray slategrey snow springgreen steelblue tan
|
|
||||||
syn keyword cssColor contained thistle tomato turquoise violet wheat
|
|
||||||
syn keyword cssColor contained whitesmoke yellowgreen
|
|
||||||
|
|
||||||
" FIXME: These are actually case-insensitive too, but (a) specs recommend using
|
|
||||||
" mixed-case (b) it's hard to highlight the word `Background' correctly in
|
|
||||||
" all situations
|
|
||||||
syn case match
|
|
||||||
syn keyword cssColor contained ActiveBorder ActiveCaption AppWorkspace ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText Background
|
|
||||||
syn case ignore
|
|
||||||
|
|
||||||
syn match cssImportant contained "!\s*important\>"
|
|
||||||
|
|
||||||
syn match cssColor contained "\<transparent\>"
|
|
||||||
syn match cssColor contained "\<currentColor\>"
|
|
||||||
syn match cssColor contained "\<white\>"
|
|
||||||
syn match cssColor contained "#[0-9A-Fa-f]\{3\}\>" contains=cssUnitDecorators
|
|
||||||
syn match cssColor contained "#[0-9A-Fa-f]\{6\}\>" contains=cssUnitDecorators
|
|
||||||
|
|
||||||
syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" contains=cssStringQ,cssStringQQ oneline
|
|
||||||
syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\|steps\)\s*(" end=")" oneline contains=cssValue,cssFunctionComma
|
|
||||||
syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\|color-stop\|from\|to\)\s*(" end=")" oneline contains=cssColor,cssValue,cssFunctionComma,cssFunction
|
|
||||||
syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear-\|radial-\)\=\gradient\s*(" end=")" oneline contains=cssColor,cssValue,cssFunction,cssGradientAttr,cssFunctionComma
|
|
||||||
syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y\|Z\)\=\|translate\(3d\|X\|Y\|Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y\|Z\)\=\|perspective\)\s*(" end=")" oneline contains=cssValueInteger,cssValue,cssFunctionComma
|
|
||||||
syn keyword cssGradientAttr contained top bottom left right cover center middle ellipse at
|
|
||||||
syn match cssFunctionComma contained ","
|
|
||||||
|
|
||||||
" Common Prop and Attr
|
|
||||||
syn keyword cssCommonAttr contained auto none inherit all default normal
|
|
||||||
syn keyword cssCommonAttr contained top bottom center stretch hidden visible
|
|
||||||
"------------------------------------------------
|
|
||||||
" CSS Animations
|
|
||||||
" http://www.w3.org/TR/css3-animations/
|
|
||||||
syn match cssAnimationProp contained "\<animation\(-\(delay\|direction\|duration\|fill-mode\|name\|play-state\|timing-function\|iteration-count\)\)\=\>"
|
|
||||||
|
|
||||||
" animation-direction attributes
|
|
||||||
syn keyword cssAnimationAttr contained alternate reverse
|
|
||||||
syn match cssAnimationAttr contained "\<alternate-reverse\>"
|
|
||||||
|
|
||||||
" animation-fill-mode attributes
|
|
||||||
syn keyword cssAnimationAttr contained forwards backwards both
|
|
||||||
|
|
||||||
" animation-play-state attributes
|
|
||||||
syn keyword cssAnimationAttr contained running paused
|
|
||||||
|
|
||||||
" animation-iteration-count attributes
|
|
||||||
syn keyword cssAnimationAttr contained infinite
|
|
||||||
"------------------------------------------------
|
|
||||||
" CSS Backgrounds and Borders Module Level 3
|
|
||||||
" http://www.w3.org/TR/css3-background/
|
|
||||||
syn match cssBackgroundProp contained "\<background\(-\(attachment\|clip\|color\|image\|origin\|position\|repeat\|size\)\)\=\>"
|
|
||||||
" background-attachment attributes
|
|
||||||
syn keyword cssBackgroundAttr contained scroll fixed local
|
|
||||||
|
|
||||||
" background-position attributes
|
|
||||||
syn keyword cssBackgroundAttr contained left center right top bottom
|
|
||||||
|
|
||||||
" background-repeat attributes
|
|
||||||
syn match cssBackgroundAttr contained "\<no-repeat\>"
|
|
||||||
syn match cssBackgroundAttr contained "\<repeat\(-[xy]\)\=\>"
|
|
||||||
|
|
||||||
" background-size attributes
|
|
||||||
syn keyword cssBackgroundAttr contained cover contain
|
|
||||||
|
|
||||||
syn match cssBorderProp contained "\<border\(-\(top\|right\|bottom\|left\)\)\=\(-\(width\|color\|style\)\)\=\>"
|
|
||||||
syn match cssBorderProp contained "\<border\(-\(top\|bottom\)-\(left\|right\)\)\=-radius\>"
|
|
||||||
syn match cssBorderProp contained "\<border-image\(-\(outset\|repeat\|slice\|source\|width\)\)\=\>"
|
|
||||||
syn match cssBorderProp contained "\<box-decoration-break\>"
|
|
||||||
syn match cssBorderProp contained "\<box-shadow\>"
|
|
||||||
|
|
||||||
" border-image attributes
|
|
||||||
syn keyword cssBorderAttr contained stretch round fill
|
|
||||||
|
|
||||||
" border-style attributes
|
|
||||||
syn keyword cssBorderAttr contained dotted dashed solid double groove ridge inset outset
|
|
||||||
|
|
||||||
" border-width attributes
|
|
||||||
syn keyword cssBorderAttr contained thin thick medium
|
|
||||||
|
|
||||||
" box-decoration-break attributes
|
|
||||||
syn keyword cssBorderAttr contained clone slice
|
|
||||||
"------------------------------------------------
|
|
||||||
|
|
||||||
syn match cssBoxProp contained "\<padding\(-\(top\|right\|bottom\|left\)\)\=\>"
|
|
||||||
syn match cssBoxProp contained "\<margin\(-\(top\|right\|bottom\|left\)\)\=\>"
|
|
||||||
syn match cssBoxProp contained "\<overflow\(-\(x\|y\|style\)\)\=\>"
|
|
||||||
syn match cssBoxProp contained "\<rotation\(-point\)\=\>"
|
|
||||||
syn keyword cssBoxAttr contained visible hidden scroll auto
|
|
||||||
syn match cssBoxAttr contained "\<no-\(display\|content\)\>"
|
|
||||||
|
|
||||||
syn keyword cssColorProp contained opacity
|
|
||||||
syn match cssColorProp contained "\<color-profile\>"
|
|
||||||
syn match cssColorProp contained "\<rendering-intent\>"
|
|
||||||
|
|
||||||
|
|
||||||
syn match cssDimensionProp contained "\<\(min\|max\)-\(width\|height\)\>"
|
|
||||||
syn keyword cssDimensionProp contained height
|
|
||||||
syn keyword cssDimensionProp contained width
|
|
||||||
|
|
||||||
" CSS Flexible Box Layout Module Level 1
|
|
||||||
" http://www.w3.org/TR/css3-flexbox/
|
|
||||||
" CSS Box Alignment Module Level 3
|
|
||||||
" http://www.w3.org/TR/css-align-3/
|
|
||||||
syn match cssFlexibleBoxProp contained "\<flex\(-\(direction\|wrap\|flow\|grow\|shrink\|basis\)\)\=\>"
|
|
||||||
syn match cssFlexibleBoxProp contained "\<\(align\|justify\)\(-\(items\|self\|content\)\)\=\>"
|
|
||||||
syn keyword cssFlexibleBoxProp contained order
|
|
||||||
|
|
||||||
syn match cssFlexibleBoxAttr contained "\<\(row\|column\|wrap\)\(-reverse\)\=\>"
|
|
||||||
syn keyword cssFlexibleBoxAttr contained nowrap stretch baseline center
|
|
||||||
syn match cssFlexibleBoxAttr contained "\<flex\(-\(start\|end\)\)\=\>"
|
|
||||||
syn match cssFlexibleBoxAttr contained "\<space\(-\(between\|around\)\)\=\>"
|
|
||||||
|
|
||||||
" CSS Fonts Module Level 3
|
|
||||||
" http://www.w3.org/TR/css-fonts-3/
|
|
||||||
syn match cssFontProp contained "\<font\(-\(family\|\|feature-settings\|kerning\|language-override\|size\(-adjust\)\=\|stretch\|style\|synthesis\|variant\(-\(alternates\|caps\|east-asian\|ligatures\|numeric\|position\)\)\=\|weight\)\)\=\>"
|
|
||||||
|
|
||||||
" font attributes
|
|
||||||
syn keyword cssFontAttr contained icon menu caption
|
|
||||||
syn match cssFontAttr contained "\<small-\(caps\|caption\)\>"
|
|
||||||
syn match cssFontAttr contained "\<message-box\>"
|
|
||||||
syn match cssFontAttr contained "\<status-bar\>"
|
|
||||||
syn keyword cssFontAttr contained larger smaller
|
|
||||||
syn match cssFontAttr contained "\<\(x\{1,2\}-\)\=\(large\|small\)\>"
|
|
||||||
" font-family attributes
|
|
||||||
syn match cssFontAttr contained "\<\(sans-\)\=serif\>"
|
|
||||||
syn keyword cssFontAttr contained Antiqua Arial Black Book Charcoal Comic Courier Dingbats Gadget Geneva Georgia Grande Helvetica Impact Linotype Lucida MS Monaco Neue New Palatino Roboto Roman Symbol Tahoma Times Trebuchet Verdana Webdings Wingdings York Zapf
|
|
||||||
syn keyword cssFontAttr contained cursive fantasy monospace
|
|
||||||
" font-feature-settings attributes
|
|
||||||
syn keyword cssFontAttr contained on off
|
|
||||||
" font-stretch attributes
|
|
||||||
syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\)-\)\=\(condensed\|expanded\)\>"
|
|
||||||
" font-style attributes
|
|
||||||
syn keyword cssFontAttr contained italic oblique
|
|
||||||
" font-synthesis attributes
|
|
||||||
syn keyword cssFontAttr contained weight style
|
|
||||||
" font-weight attributes
|
|
||||||
syn keyword cssFontAttr contained bold bolder lighter
|
|
||||||
" TODO: font-variant-* attributes
|
|
||||||
"------------------------------------------------
|
|
||||||
|
|
||||||
" Webkit specific property/attributes
|
|
||||||
syn match cssFontProp contained "\<font-smooth\>"
|
|
||||||
syn match cssFontAttr contained "\<\(subpixel-\)\=\antialiased\>"
|
|
||||||
|
|
||||||
|
|
||||||
" CSS Multi-column Layout Module
|
|
||||||
" http://www.w3.org/TR/css3-multicol/
|
|
||||||
syn match cssMultiColumnProp contained "\<break-\(after\|before\|inside\)\>"
|
|
||||||
syn match cssMultiColumnProp contained "\<column-\(count\|fill\|gap\|rule\(-\(color\|style\|width\)\)\=\|span\|width\)\>"
|
|
||||||
syn keyword cssMultiColumnProp contained columns
|
|
||||||
syn keyword cssMultiColumnAttr contained balance medium
|
|
||||||
syn keyword cssMultiColumnAttr contained always left right page column
|
|
||||||
syn match cssMultiColumnAttr contained "\<avoid\(-\(page\|column\)\)\=\>"
|
|
||||||
|
|
||||||
" http://www.w3.org/TR/css3-break/#page-break
|
|
||||||
syn match cssMultiColumnProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
|
|
||||||
|
|
||||||
" http://www.w3.org/TR/SVG11/interact.html
|
|
||||||
syn match cssInteractProp contained "\<pointer-events\>"
|
|
||||||
syn match cssInteractAttr contained "\<\(visible\)\=\(Painted\|Fill\|Stroke\)\=\>"
|
|
||||||
|
|
||||||
" TODO find following items in w3c docs.
|
|
||||||
syn keyword cssGeneratedContentProp contained quotes crop
|
|
||||||
syn match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
|
|
||||||
syn match cssGeneratedContentProp contained "\<move-to\>"
|
|
||||||
syn match cssGeneratedContentProp contained "\<page-policy\>"
|
|
||||||
syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>"
|
|
||||||
|
|
||||||
syn match cssGridProp contained "\<grid-\(columns\|rows\)\>"
|
|
||||||
|
|
||||||
syn match cssHyerlinkProp contained "\<target\(-\(name\|new\|position\)\)\=\>"
|
|
||||||
|
|
||||||
syn match cssListProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
|
|
||||||
syn match cssListAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
|
|
||||||
syn match cssListAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
|
|
||||||
syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
|
|
||||||
syn keyword cssListAttr contained disc circle square hebrew armenian georgian
|
|
||||||
syn keyword cssListAttr contained inside outside
|
|
||||||
|
|
||||||
syn keyword cssPositioningProp contained bottom clear clip display float left
|
|
||||||
syn keyword cssPositioningProp contained position right top visibility
|
|
||||||
syn match cssPositioningProp contained "\<z-index\>"
|
|
||||||
syn keyword cssPositioningAttr contained block compact
|
|
||||||
syn match cssPositioningAttr contained "\<table\(-\(row-group\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
|
|
||||||
syn keyword cssPositioningAttr contained left right both
|
|
||||||
syn match cssPositioningAttr contained "\<list-item\>"
|
|
||||||
syn match cssPositioningAttr contained "\<inline\(-\(block\|box\|table\)\)\=\>"
|
|
||||||
syn keyword cssPositioningAttr contained static relative absolute fixed
|
|
||||||
|
|
||||||
syn keyword cssPrintAttr contained landscape portrait crop cross always
|
|
||||||
|
|
||||||
syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>"
|
|
||||||
syn keyword cssTableAttr contained fixed collapse separate show hide once always
|
|
||||||
|
|
||||||
|
|
||||||
syn keyword cssTextProp contained color direction
|
|
||||||
syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
|
|
||||||
syn match cssTextProp contained "\<text-\(justify\|outline\|warp\|align-last\|size-adjust\|rendering\|stroke\|indent\)\>"
|
|
||||||
syn match cssTextProp contained "\<word-\(break\|\wrap\)\>"
|
|
||||||
syn match cssTextProp contained "\<white-space\>"
|
|
||||||
syn match cssTextProp contained "\<hanging-punctuation\>"
|
|
||||||
syn match cssTextProp contained "\<punctuation-trim\>"
|
|
||||||
syn match cssTextAttr contained "\<line-through\>"
|
|
||||||
syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
|
|
||||||
syn keyword cssTextAttr contained ltr rtl embed nowrap
|
|
||||||
syn keyword cssTextAttr contained underline overline blink sub super middle
|
|
||||||
syn keyword cssTextAttr contained capitalize uppercase lowercase
|
|
||||||
syn keyword cssTextAttr contained justify baseline sub super
|
|
||||||
syn keyword cssTextAttr contained optimizeLegibility optimizeSpeed
|
|
||||||
syn match cssTextAttr contained "\<pre\(-\(line\|wrap\)\)\=\>"
|
|
||||||
syn match cssTextAttr contained "\<\(allow\|force\)-end\>"
|
|
||||||
syn keyword cssTextAttr contained start end adjacent
|
|
||||||
syn match cssTextAttr contained "\<inter-\(word\|ideographic\|cluster\)\>"
|
|
||||||
syn keyword cssTextAttr contained distribute kashida first last
|
|
||||||
syn keyword cssTextAttr contained clip ellipsis unrestricted suppress
|
|
||||||
syn match cssTextAttr contained "\<break-all\>"
|
|
||||||
syn match cssTextAttr contained "\<break-word\>"
|
|
||||||
syn keyword cssTextAttr contained hyphenate
|
|
||||||
syn match cssTextAttr contained "\<bidi-override\>"
|
|
||||||
|
|
||||||
syn match cssTransformProp contained "\<transform\(-\(origin\|style\)\)\=\>"
|
|
||||||
syn match cssTransformProp contained "\<perspective\(-origin\)\=\>"
|
|
||||||
syn match cssTransformProp contained "\<backface-visibility\>"
|
|
||||||
|
|
||||||
" CSS Transitions
|
|
||||||
" http://www.w3.org/TR/css3-transitions/
|
|
||||||
syn match cssTransitionProp contained "\<transition\(-\(delay\|duration\|property\|timing-function\)\)\=\>"
|
|
||||||
|
|
||||||
" transition-time-function attributes
|
|
||||||
syn match cssTransitionAttr contained "\<linear\(-gradient\)\@!\>"
|
|
||||||
syn match cssTransitionAttr contained "\<ease\(-\(in-out\|out\|in\)\)\=\>"
|
|
||||||
syn match cssTransitionAttr contained "\<step\(-start\|-end\)\=\>"
|
|
||||||
"------------------------------------------------
|
|
||||||
" CSS Basic User Interface Module Level 3 (CSS3 UI)
|
|
||||||
" http://www.w3.org/TR/css3-ui/
|
|
||||||
syn match cssUIProp contained "\<box-sizing\>"
|
|
||||||
syn match cssUIAttr contained "\<\(content\|padding\|border\)\(-box\)\=\>"
|
|
||||||
|
|
||||||
syn keyword cssUIProp contained cursor
|
|
||||||
syn match cssUIAttr contained "\<\(\([ns]\=[ew]\=\)\|col\|row\|nesw\|nwse\)-resize\>"
|
|
||||||
syn keyword cssUIAttr contained crosshair help move pointer alias copy
|
|
||||||
syn keyword cssUIAttr contained progress wait text cell move
|
|
||||||
syn match cssUIAttr contained "\<context-menu\>"
|
|
||||||
syn match cssUIAttr contained "\<no-drop\>"
|
|
||||||
syn match cssUIAttr contained "\<not-allowed\>"
|
|
||||||
syn match cssUIAttr contained "\<all-scroll\>"
|
|
||||||
syn match cssUIAttr contained "\<\(vertical-\)\=text\>"
|
|
||||||
syn match cssUIAttr contained "\<zoom\(-in\|-out\)\=\>"
|
|
||||||
|
|
||||||
syn match cssUIProp contained "\<ime-mode\>"
|
|
||||||
syn keyword cssUIAttr contained active inactive disabled
|
|
||||||
|
|
||||||
syn match cssUIProp contained "\<nav-\(down\|index\|left\|right\|up\)\=\>"
|
|
||||||
syn match cssUIProp contained "\<outline\(-\(width\|style\|color\|offset\)\)\=\>"
|
|
||||||
syn keyword cssUIAttr contained invert
|
|
||||||
|
|
||||||
syn keyword cssUIProp contained icon resize
|
|
||||||
syn keyword cssUIAttr contained both horizontal vertical
|
|
||||||
|
|
||||||
syn match cssUIProp contained "\<text-overflow\>"
|
|
||||||
syn keyword cssUIAttr contained clip ellipsis
|
|
||||||
|
|
||||||
syn match cssUIProp contained "\<image-rendering\>"
|
|
||||||
syn keyword cssUIAttr contained pixellated
|
|
||||||
syn match cssUIAttr contained "\<crisp-edges\>"
|
|
||||||
|
|
||||||
" Already highlighted Props: font content
|
|
||||||
"------------------------------------------------
|
|
||||||
" Webkit/iOS specific attributes
|
|
||||||
syn match cssUIAttr contained '\(preserve-3d\)'
|
|
||||||
" IE specific attributes
|
|
||||||
syn match cssIEUIAttr contained '\(bicubic\)'
|
|
||||||
|
|
||||||
" Webkit/iOS specific properties
|
|
||||||
syn match cssUIProp contained '\(tap-highlight-color\|user-select\|touch-callout\)'
|
|
||||||
" IE specific properties
|
|
||||||
syn match cssIEUIProp contained '\(interpolation-mode\|zoom\|filter\)'
|
|
||||||
|
|
||||||
" Webkit/Firebox specific properties/attributes
|
|
||||||
syn keyword cssUIProp contained appearance
|
|
||||||
syn keyword cssUIAttr contained window button field icon document menu
|
|
||||||
|
|
||||||
|
|
||||||
syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>"
|
|
||||||
syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numeral\|header\)\)\=\)\>"
|
|
||||||
syn keyword cssAuralProp contained volume during azimuth elevation stress richness
|
|
||||||
syn match cssAuralAttr contained "\<\(x-\)\=\(soft\|loud\)\>"
|
|
||||||
syn keyword cssAuralAttr contained silent
|
|
||||||
syn match cssAuralAttr contained "\<spell-out\>"
|
|
||||||
syn keyword cssAuralAttr contained non mix
|
|
||||||
syn match cssAuralAttr contained "\<\(left\|right\)-side\>"
|
|
||||||
syn match cssAuralAttr contained "\<\(far\|center\)-\(left\|center\|right\)\>"
|
|
||||||
syn keyword cssAuralAttr contained leftwards rightwards behind
|
|
||||||
syn keyword cssAuralAttr contained below level above lower higher
|
|
||||||
syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\|low\|high\)\>"
|
|
||||||
syn keyword cssAuralAttr contained faster slower
|
|
||||||
syn keyword cssAuralAttr contained male female child code digits continuous
|
|
||||||
|
|
||||||
" mobile text
|
|
||||||
syn match cssMobileTextProp contained "\<text-size-adjust\>"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
syn match cssBraces contained "[{}]"
|
|
||||||
syn match cssError contained "{@<>"
|
|
||||||
syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=cssAttrRegion,css.*Prop,cssComment,cssValue,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssHacks,cssNoise fold
|
|
||||||
syn match cssBraceError "}"
|
|
||||||
syn match cssAttrComma ","
|
|
||||||
|
|
||||||
" Pseudo class
|
|
||||||
" http://www.w3.org/TR/css3-selectors/
|
|
||||||
syn match cssPseudoClass ":[A-Za-z0-9_-]*" contains=cssNoise,cssPseudoClassId,cssUnicodeEscape,cssVendor,cssPseudoClassFn
|
|
||||||
syn keyword cssPseudoClassId contained link visited active hover before after left right
|
|
||||||
syn keyword cssPseudoClassId contained root empty target enable disabled checked invalid
|
|
||||||
syn match cssPseudoClassId contained "\<first-\(line\|letter\)\>"
|
|
||||||
syn match cssPseudoClassId contained "\<\(first\|last\|only\)-\(of-type\|child\)\>"
|
|
||||||
syn region cssPseudoClassFn contained matchgroup=cssFunctionName start="\<\(not\|lang\|\(nth\|nth-last\)-\(of-type\|child\)\)(" end=")"
|
|
||||||
" ------------------------------------
|
|
||||||
" Vendor specific properties
|
|
||||||
syn match cssPseudoClassId contained "\<selection\>"
|
|
||||||
syn match cssPseudoClassId contained "\<focus\(-inner\)\=\>"
|
|
||||||
syn match cssPseudoClassId contained "\<\(input-\)\=placeholder\>"
|
|
||||||
|
|
||||||
" Misc highlight groups
|
|
||||||
syntax match cssUnitDecorators /\(#\|-\|+\|%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|ch\|rem\|vh\|vw\|vmin\|vmax\|dpi\|dppx\|dpcm\|Hz\|kHz\|s\|ms\|deg\|grad\|rad\)/ contained
|
|
||||||
syntax match cssNoise contained /\(:\|;\|\/\)/
|
|
||||||
|
|
||||||
" Comment
|
|
||||||
syn region cssComment start="/\*" end="\*/" contains=@Spell fold
|
|
||||||
|
|
||||||
syn match cssUnicodeEscape "\\\x\{1,6}\s\?"
|
|
||||||
syn match cssSpecialCharQQ +\\\\\|\\"+ contained
|
|
||||||
syn match cssSpecialCharQ +\\\\\|\\'+ contained
|
|
||||||
syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ
|
|
||||||
syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ
|
|
||||||
|
|
||||||
" Vendor Prefix
|
|
||||||
syn match cssVendor contained "\(-\(webkit\|moz\|o\|ms\)-\)"
|
|
||||||
|
|
||||||
" Various CSS Hack characters
|
|
||||||
" In earlier versions of IE (6 and 7), one can prefix property names
|
|
||||||
" with a _ or * to isolate those definitions to particular versions of IE
|
|
||||||
" This is purely decorative and therefore we assign to the same highlight
|
|
||||||
" group to cssVendor, for more information:
|
|
||||||
" http://www.paulirish.com/2009/browser-specific-css-hacks/
|
|
||||||
syn match cssHacks contained /\(_\|*\)/
|
|
||||||
|
|
||||||
" Attr Enhance
|
|
||||||
" Some keywords are both Prop and Attr, so we have to handle them
|
|
||||||
syn region cssAttrRegion start=/:/ end=/\ze\(;\|)\|}\)/ contained contains=css.*Attr,cssColor,cssImportant,cssValue,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise
|
|
||||||
|
|
||||||
" Hack for transition
|
|
||||||
" 'transition' has Props after ':'.
|
|
||||||
syn region cssAttrRegion start=/transition\s*:/ end=/\ze\(;\|)\|}\)/ contained contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise
|
|
||||||
|
|
||||||
|
|
||||||
if main_syntax == "css"
|
|
||||||
syn sync minlines=10
|
|
||||||
endif
|
|
||||||
|
|
||||||
" 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_css_syn_inits")
|
|
||||||
if version < 508
|
|
||||||
let did_css_syn_inits = 1
|
|
||||||
command -nargs=+ HiLink hi link <args>
|
|
||||||
else
|
|
||||||
command -nargs=+ HiLink hi def link <args>
|
|
||||||
endif
|
|
||||||
|
|
||||||
HiLink cssComment Comment
|
|
||||||
HiLink cssVendor Comment
|
|
||||||
HiLink cssHacks Comment
|
|
||||||
HiLink cssTagName Statement
|
|
||||||
HiLink cssDeprecated Error
|
|
||||||
HiLink cssSelectorOp Special
|
|
||||||
HiLink cssSelectorOp2 Special
|
|
||||||
HiLink cssAttrComma Special
|
|
||||||
|
|
||||||
HiLink cssAnimationProp cssProp
|
|
||||||
HiLink cssAuralProp cssProp
|
|
||||||
HiLink cssBackgroundProp cssProp
|
|
||||||
HiLink cssBorderProp cssProp
|
|
||||||
HiLink cssBoxProp cssProp
|
|
||||||
HiLink cssColorProp cssProp
|
|
||||||
HiLink cssContentForPagedMediaProp cssProp
|
|
||||||
HiLink cssDimensionProp cssProp
|
|
||||||
HiLink cssFlexibleBoxProp cssProp
|
|
||||||
HiLink cssFontProp cssProp
|
|
||||||
HiLink cssGeneratedContentProp cssProp
|
|
||||||
HiLink cssGridProp cssProp
|
|
||||||
HiLink cssHyerlinkProp cssProp
|
|
||||||
HiLink cssIEUIProp cssProp
|
|
||||||
HiLink cssInteractProp cssProp
|
|
||||||
HiLink cssLineboxProp cssProp
|
|
||||||
HiLink cssListProp cssProp
|
|
||||||
HiLink cssMarqueeProp cssProp
|
|
||||||
HiLink cssMobileTextProp cssProp
|
|
||||||
HiLink cssMultiColumnProp cssProp
|
|
||||||
HiLink cssPagedMediaProp cssProp
|
|
||||||
HiLink cssPositioningProp cssProp
|
|
||||||
HiLink cssPrintProp cssProp
|
|
||||||
HiLink cssRenderProp cssProp
|
|
||||||
HiLink cssRubyProp cssProp
|
|
||||||
HiLink cssSpeechProp cssProp
|
|
||||||
HiLink cssTableProp cssProp
|
|
||||||
HiLink cssTextProp cssProp
|
|
||||||
HiLink cssTransformProp cssProp
|
|
||||||
HiLink cssTransitionProp cssProp
|
|
||||||
HiLink cssUIProp cssProp
|
|
||||||
|
|
||||||
HiLink cssAnimationAttr cssAttr
|
|
||||||
HiLink cssAuralAttr cssAttr
|
|
||||||
HiLink cssBackgroundAttr cssAttr
|
|
||||||
HiLink cssBorderAttr cssAttr
|
|
||||||
HiLink cssBoxAttr cssAttr
|
|
||||||
HiLink cssContentForPagedMediaAttr cssAttr
|
|
||||||
HiLink cssCommonAttr cssAttr
|
|
||||||
HiLink cssDimensionAttr cssAttr
|
|
||||||
HiLink cssFlexibleBoxAttr cssAttr
|
|
||||||
HiLink cssFontAttr cssAttr
|
|
||||||
HiLink cssGeneratedContentAttr cssAttr
|
|
||||||
HiLink cssGridAttr cssAttr
|
|
||||||
HiLink cssHyerlinkAttr cssAttr
|
|
||||||
HiLink cssIEUIAttr cssAttr
|
|
||||||
HiLink cssInteractAttr cssAttr
|
|
||||||
HiLink cssLineboxAttr cssAttr
|
|
||||||
HiLink cssListAttr cssAttr
|
|
||||||
HiLink cssMarginAttr cssAttr
|
|
||||||
HiLink cssMarqueeAttr cssAttr
|
|
||||||
HiLink cssMultiColumnAttr cssAttr
|
|
||||||
HiLink cssPaddingAttr cssAttr
|
|
||||||
HiLink cssPagedMediaAttr cssAttr
|
|
||||||
HiLink cssPositioningAttr cssAttr
|
|
||||||
HiLink cssGradientAttr cssAttr
|
|
||||||
HiLink cssPrintAttr cssAttr
|
|
||||||
HiLink cssRenderAttr cssAttr
|
|
||||||
HiLink cssRubyAttr cssAttr
|
|
||||||
HiLink cssSpeechAttr cssAttr
|
|
||||||
HiLink cssTableAttr cssAttr
|
|
||||||
HiLink cssTextAttr cssAttr
|
|
||||||
HiLink cssTransformAttr cssAttr
|
|
||||||
HiLink cssTransitionAttr cssAttr
|
|
||||||
HiLink cssUIAttr cssAttr
|
|
||||||
|
|
||||||
HiLink cssPseudoClassId PreProc
|
|
||||||
HiLink cssPseudoClassLang Constant
|
|
||||||
HiLink cssValueNumber Number
|
|
||||||
HiLink cssFunction Constant
|
|
||||||
HiLink cssURL String
|
|
||||||
HiLink cssFunctionName Function
|
|
||||||
HiLink cssFunctionComma Function
|
|
||||||
HiLink cssColor Constant
|
|
||||||
HiLink cssIdentifier Function
|
|
||||||
HiLink cssInclude Include
|
|
||||||
HiLink cssIncludeKeyword atKeyword
|
|
||||||
HiLink cssImportant Special
|
|
||||||
HiLink cssBraces Function
|
|
||||||
HiLink cssBraceError Error
|
|
||||||
HiLink cssError Error
|
|
||||||
HiLink cssUnicodeEscape Special
|
|
||||||
HiLink cssStringQQ String
|
|
||||||
HiLink cssStringQ String
|
|
||||||
HiLink cssAttributeSelector String
|
|
||||||
HiLink cssMedia atKeyword
|
|
||||||
HiLink cssMediaType Special
|
|
||||||
HiLink cssMediaComma Normal
|
|
||||||
HiLink cssMediaKeyword Statement
|
|
||||||
HiLink cssMediaProp cssProp
|
|
||||||
HiLink cssMediaAttr cssAttr
|
|
||||||
HiLink cssPage atKeyword
|
|
||||||
HiLink cssPagePseudo PreProc
|
|
||||||
HiLink cssPageMargin atKeyword
|
|
||||||
HiLink cssPageProp cssProp
|
|
||||||
HiLink cssKeyFrame atKeyword
|
|
||||||
HiLink cssKeyFrameSelector Constant
|
|
||||||
HiLink cssFontDescriptor Special
|
|
||||||
HiLink cssFontDescriptorFunction Constant
|
|
||||||
HiLink cssFontDescriptorProp cssProp
|
|
||||||
HiLink cssFontDescriptorAttr cssAttr
|
|
||||||
HiLink cssUnicodeRange Constant
|
|
||||||
HiLink cssClassName Function
|
|
||||||
HiLink cssClassNameDot Function
|
|
||||||
HiLink cssProp StorageClass
|
|
||||||
HiLink cssAttr Constant
|
|
||||||
HiLink cssUnitDecorators Number
|
|
||||||
HiLink cssNoise Noise
|
|
||||||
HiLink atKeyword PreProc
|
|
||||||
delcommand HiLink
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:current_syntax = "css"
|
|
||||||
|
|
||||||
if main_syntax == 'css'
|
|
||||||
unlet main_syntax
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
|
||||||
unlet s:cpo_save
|
|
||||||
" vim: ts=8
|
|
||||||
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -18,6 +18,8 @@ endif
|
|||||||
" Ensure long multiline strings are highlighted.
|
" Ensure long multiline strings are highlighted.
|
||||||
syntax sync fromstart
|
syntax sync fromstart
|
||||||
|
|
||||||
|
syntax case match
|
||||||
|
|
||||||
" keyword definitions
|
" keyword definitions
|
||||||
syntax keyword dartConditional if else switch
|
syntax keyword dartConditional if else switch
|
||||||
syntax keyword dartRepeat do while for
|
syntax keyword dartRepeat do while for
|
||||||
@@ -26,14 +28,14 @@ syntax keyword dartConstant null
|
|||||||
syntax keyword dartTypedef this super class typedef enum
|
syntax keyword dartTypedef this super class typedef enum
|
||||||
syntax keyword dartOperator new is as in
|
syntax keyword dartOperator new is as in
|
||||||
syntax match dartOperator "+=\=\|-=\=\|*=\=\|/=\=\|%=\=\|\~/=\=\|<<=\=\|>>=\=\|[<>]=\=\|===\=\|\!==\=\|&=\=\|\^=\=\||=\=\|||\|&&\|\[\]=\=\|=>\|!\|\~\|?\|:"
|
syntax match dartOperator "+=\=\|-=\=\|*=\=\|/=\=\|%=\=\|\~/=\=\|<<=\=\|>>=\=\|[<>]=\=\|===\=\|\!==\=\|&=\=\|\^=\=\||=\=\|||\|&&\|\[\]=\=\|=>\|!\|\~\|?\|:"
|
||||||
syntax keyword dartType void var bool int double num dynamic
|
syntax keyword dartType void var bool int double num dynamic covariant
|
||||||
syntax keyword dartStatement return
|
syntax keyword dartStatement return
|
||||||
syntax keyword dartStorageClass static abstract final const factory
|
syntax keyword dartStorageClass static abstract final const factory
|
||||||
syntax keyword dartExceptions throw rethrow try on catch finally
|
syntax keyword dartExceptions throw rethrow try on catch finally
|
||||||
syntax keyword dartAssert assert
|
syntax keyword dartAssert assert
|
||||||
syntax keyword dartClassDecl extends with implements
|
syntax keyword dartClassDecl extends with implements
|
||||||
syntax keyword dartBranch break continue nextgroup=dartUserLabelRef skipwhite
|
syntax keyword dartBranch break continue nextgroup=dartUserLabelRef skipwhite
|
||||||
syntax keyword dartKeyword get set operator call external async await yield sync
|
syntax keyword dartKeyword get set operator call external async await yield sync native
|
||||||
syntax match dartUserLabelRef "\k\+" contained
|
syntax match dartUserLabelRef "\k\+" contained
|
||||||
|
|
||||||
syntax region dartLabelRegion transparent matchgroup=dartLabel start="\<case\>" matchgroup=NONE end=":"
|
syntax region dartLabelRegion transparent matchgroup=dartLabel start="\<case\>" matchgroup=NONE end=":"
|
||||||
@@ -47,29 +49,45 @@ syntax match dartLibrary "^\(library\|part of\|part\)\>"
|
|||||||
|
|
||||||
syntax match dartMetadata "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
|
syntax match dartMetadata "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
|
||||||
|
|
||||||
|
" Numbers
|
||||||
|
syntax match dartNumber "\<\d\+\(\.\d\+\)\=\>"
|
||||||
|
|
||||||
|
" Core libraries
|
||||||
|
if !exists('dart_corelib_highlight') || dart_corelib_highlight
|
||||||
|
syntax keyword dartCoreClasses BidirectionalIterator Comparable DateTime
|
||||||
|
\ Duration Expando Function Invocation Iterable Iterator List Map Match
|
||||||
|
\ Object Pattern RegExp RuneIterator Runes Set StackTrace Stopwatch String
|
||||||
|
\ StringBuffer StringSink Symbol Type
|
||||||
|
syntax keyword dartCoreTypedefs Comparator
|
||||||
|
syntax keyword dartCoreExceptions AbstractClassInstantiationError
|
||||||
|
\ ArgumentError AssertionError CastError ConcurrentModificationError
|
||||||
|
\ Error Exception FallThroughError FormatException
|
||||||
|
\ IntegerDivisionByZeroException NoSuchMethodError NullThrownError
|
||||||
|
\ OutOfMemoryError RangeError RuntimeError StackOverflowError StateError
|
||||||
|
\ TypeError UnimplementedError UnsupportedError
|
||||||
|
endif
|
||||||
|
|
||||||
" Comments
|
" Comments
|
||||||
syntax keyword dartTodo contained TODO FIXME XXX
|
syntax keyword dartTodo contained TODO FIXME XXX
|
||||||
syntax region dartComment start="/\*" end="\*/" contains=dartComment,dartTodo,dartDocLink,@Spell
|
syntax region dartComment start="/\*" end="\*/" contains=dartComment,dartTodo,dartDocLink,@Spell
|
||||||
syntax match dartLineComment "//.*" contains=dartTodo,@Spell
|
syntax match dartLineComment "//.*" contains=dartTodo,@Spell
|
||||||
syntax match dartLineDocComment "///.*" contains=dartTodo,dartDocLink,@Spell
|
syntax match dartLineDocComment "///.*" contains=dartTodo,dartDocLink,@Spell
|
||||||
|
syntax match dartShebangLine /^\%1l#!.*/
|
||||||
syntax region dartDocLink oneline contained start=+\[+ end=+\]+
|
syntax region dartDocLink oneline contained start=+\[+ end=+\]+
|
||||||
|
|
||||||
" Strings
|
" Strings
|
||||||
syntax region dartString start=+\z(["']\)+ end=+\z1+ contains=@Spell,dartInterpolation,dartSpecialChar
|
syntax cluster dartRawStringContains contains=@Spell
|
||||||
syntax region dartRawString start=+r\z(["']\)+ end=+\z1+ contains=@Spell
|
if exists('dart_html_in_strings') && dart_html_in_strings
|
||||||
syntax region dartMultilineString start=+\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@Spell,dartInterpolation,dartSpecialChar
|
syntax include @HTML syntax/html.vim
|
||||||
syntax region dartRawMultilineString start=+r\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@Spell
|
syntax cluster dartRawStringContains add=@HTML
|
||||||
syntax match dartInterpolation contained "\$\(\w\+\|{[^}]\+}\)"
|
endif
|
||||||
syntax match dartSpecialChar contained "\\\(u\x\{4\}\|u{\x\+}\|x\x\x\|x{\x\+}\|.\)"
|
syntax cluster dartStringContains contains=@dartRawStringContains,dartInterpolation,dartSpecialChar
|
||||||
|
syntax region dartString oneline start=+\z(["']\)+ end=+\z1+ contains=@dartStringContains keepend
|
||||||
" Numbers
|
syntax region dartRawString oneline start=+r\z(["']\)+ end=+\z1+ contains=@dartRawStringContains keepend
|
||||||
syntax match dartNumber "\<\d\+\(\.\d\+\)\=\>"
|
syntax region dartMultilineString start=+\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@dartStringContains
|
||||||
|
syntax region dartRawMultilineString start=+r\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@dartSRawtringContains
|
||||||
" TODO(antonm): consider conditional highlighting of corelib classes.
|
syntax match dartInterpolation contained "\$\(\w\+\|{[^}]\+}\)" extend
|
||||||
syntax keyword dartCoreClasses BidirectionalIterator Comparable DateTime Duration Expando Function Invocation Iterable Iterator List Map Match Object Pattern RegExp RuneIterator Runes Set StackTrace Stopwatch String StringBuffer StringSink Symbol Type
|
syntax match dartSpecialChar contained "\\\(u\x\{4\}\|u{\x\+}\|x\x\x\|x{\x\+}\|.\)" extend
|
||||||
syntax keyword dartCoreTypedefs Comparator
|
|
||||||
syntax keyword dartCoreExceptions AbstractClassInstantiationError ArgumentError AssertionError CastError ConcurrentModificationError Error Exception FallThroughError FormatException IntegerDivisionByZeroException NoSuchMethodError NullThrownError OutOfMemoryError RangeError RuntimeError StackOverflowError StateError TypeError UnimplementedError UnsupportedError
|
|
||||||
|
|
||||||
|
|
||||||
" The default highlighting.
|
" The default highlighting.
|
||||||
highlight default link dartBranch Conditional
|
highlight default link dartBranch Conditional
|
||||||
@@ -93,6 +111,7 @@ highlight default link dartOperator Operator
|
|||||||
highlight default link dartComment Comment
|
highlight default link dartComment Comment
|
||||||
highlight default link dartLineComment Comment
|
highlight default link dartLineComment Comment
|
||||||
highlight default link dartLineDocComment Comment
|
highlight default link dartLineDocComment Comment
|
||||||
|
highlight default link dartShebangLine Comment
|
||||||
highlight default link dartConstant Constant
|
highlight default link dartConstant Constant
|
||||||
highlight default link dartTypedef Typedef
|
highlight default link dartTypedef Typedef
|
||||||
highlight default link dartTodo Todo
|
highlight default link dartTodo Todo
|
||||||
|
|||||||
@@ -18,26 +18,27 @@ syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDec
|
|||||||
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 match elixirId '\<[_a-zA-Z]\w*[!?]\?\>' contains=elixirUnusedVariable,elixirKernelFunction
|
||||||
|
|
||||||
syn match elixirKeyword '\(\.\)\@<!\<\(for\|case\|when\|with\|cond\|if\|unless\|try\|receive\|send\)\>'
|
syn match elixirKeyword '\(\.\)\@<!\<\(for\|case\|when\|with\|cond\|if\|unless\|try\|receive\|send\)\>'
|
||||||
syn match elixirKeyword '\(\.\)\@<!\<\(exit\|raise\|throw\|after\|rescue\|catch\|else\)\>'
|
syn match elixirKeyword '\(\.\)\@<!\<\(exit\|raise\|throw\|after\|rescue\|catch\|else\)\>'
|
||||||
syn match elixirKeyword '\(\.\)\@<!\<\(quote\|unquote\|super\|spawn\|spawn_link\|spawn_monitor\)\>'
|
syn match elixirKeyword '\(\.\)\@<!\<\(quote\|unquote\|super\|spawn\|spawn_link\|spawn_monitor\)\>'
|
||||||
|
|
||||||
" Kernel functions
|
" Kernel functions
|
||||||
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 elixirKernelFunction contained is_atom is_binary is_bitstring is_boolean is_float
|
||||||
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 elixirKernelFunction contained is_function is_integer is_list is_map is_nil
|
||||||
|
syn keyword elixirKernelFunction contained is_number is_pid is_port is_reference is_tuple
|
||||||
syn match elixirGuard '.*when.*' contains=ALLBUT,@elixirNotTop
|
syn keyword elixirKernelFunction contained abs binary_part bit_size byte_size div elem hd length
|
||||||
|
syn keyword elixirKernelFunction contained map_size node rem round tl trunc tuple_size
|
||||||
|
|
||||||
syn keyword elixirInclude import require alias use
|
syn keyword elixirInclude import require alias use
|
||||||
|
|
||||||
syn keyword elixirSelf self
|
syn keyword elixirSelf self
|
||||||
|
|
||||||
" This unfortunately also matches function names in function calls
|
" This unfortunately also matches function names in function calls
|
||||||
syn match elixirUnusedVariable contained '\<_\w*\>'
|
syn match elixirUnusedVariable contained '\v%(^|[^.])@<=<_\w*>'
|
||||||
|
|
||||||
syn keyword elixirOperator and not or in
|
syn match elixirOperator '\v\.@<!<%(and|or|in|not)>'
|
||||||
syn match elixirOperator '!==\|!=\|!'
|
syn match elixirOperator '!==\|!=\|!'
|
||||||
syn match elixirOperator '=\~\|===\|==\|='
|
syn match elixirOperator '=\~\|===\|==\|='
|
||||||
syn match elixirOperator '<<<\|<<\|<=\|<-\|<'
|
syn match elixirOperator '<<<\|<<\|<=\|<-\|<'
|
||||||
@@ -54,8 +55,6 @@ 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]\)\@<![A-Z]\w*'
|
syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*'
|
||||||
|
|
||||||
syn keyword elixirBoolean true false nil
|
syn keyword elixirBoolean true false nil
|
||||||
@@ -84,10 +83,10 @@ syn region elixirStruct matchgroup=elixirStructDelimiter start="%\(\w\+{\)\@=" e
|
|||||||
|
|
||||||
syn region elixirMap matchgroup=elixirMapDelimiter start="%{" end="}" contains=ALLBUT,@elixirNotTop
|
syn region elixirMap matchgroup=elixirMapDelimiter start="%{" end="}" contains=ALLBUT,@elixirNotTop
|
||||||
|
|
||||||
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirStringContained
|
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@Spell,@elixirStringContained
|
||||||
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirStringContained
|
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@Spell,@elixirStringContained
|
||||||
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('''\)+ end=+^\s*\z1+ contains=@elixirStringContained
|
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('''\)+ end=+^\s*\z1+ contains=@Spell,@elixirStringContained
|
||||||
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("""\)+ end=+^\s*\z1+ contains=@elixirStringContained
|
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("""\)+ end=+^\s*\z1+ contains=@Spell,@elixirStringContained
|
||||||
syn region elixirInterpolation matchgroup=elixirInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,elixirKernelFunction,elixirComment,@elixirNotTop
|
syn region elixirInterpolation matchgroup=elixirInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,elixirKernelFunction,elixirComment,@elixirNotTop
|
||||||
|
|
||||||
syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString
|
syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString
|
||||||
@@ -97,7 +96,7 @@ syn region elixirBlock matchgroup=elixirBlockDefinition start="\<do
|
|||||||
syn region elixirElseBlock matchgroup=elixirBlockDefinition start="\<else\>:\@!" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@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,elixirKernelFunction,@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,elixirSigil,elixirAnonymousFunction
|
||||||
|
|
||||||
syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE
|
syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE
|
||||||
|
|
||||||
@@ -121,10 +120,10 @@ syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z('''\)+ end=
|
|||||||
" Documentation
|
" Documentation
|
||||||
if exists('g:elixir_use_markdown_for_docs') && g:elixir_use_markdown_for_docs
|
if exists('g:elixir_use_markdown_for_docs') && g:elixir_use_markdown_for_docs
|
||||||
syn include @markdown syntax/markdown.vim
|
syn include @markdown syntax/markdown.vim
|
||||||
syn cluster elixirDocStringContained contains=@markdown,@Spell
|
syn cluster elixirDocStringContained contains=@markdown,@Spell,elixirInterpolation
|
||||||
else
|
else
|
||||||
let g:elixir_use_markdown_for_docs = 0
|
let g:elixir_use_markdown_for_docs = 0
|
||||||
syn cluster elixirDocStringContained contains=elixirDocTest,elixirTodo,@Spell
|
syn cluster elixirDocStringContained contains=elixirDocTest,elixirTodo,@Spell,elixirInterpolation
|
||||||
|
|
||||||
" doctests
|
" doctests
|
||||||
syn region elixirDocTest start="^\s*\%(iex\|\.\.\.\)\%((\d*)\)\?>\s" end="^\s*$" contained
|
syn region elixirDocTest start="^\s*\%(iex\|\.\.\.\)\%((\d*)\)\?>\s" end="^\s*$" contained
|
||||||
@@ -174,7 +173,6 @@ syn match elixirExUnitMacro "\(^\s*\)\@<=\<\(test\|describe\|setup\|setup_all\|
|
|||||||
syn match elixirExUnitAssert "\(^\s*\)\@<=\<\(assert\|assert_in_delta\|assert_raise\|assert_receive\|assert_received\|catch_error\)\>"
|
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\)\>"
|
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
|
||||||
|
|||||||
124
syntax/elm.vim
124
syntax/elm.vim
@@ -1,81 +1,73 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
||||||
|
|
||||||
" Vim syntax file
|
" syntax highlighting for Elm (http://elm-lang.org/)
|
||||||
" Language: Elm (http://elm-lang.org/)
|
|
||||||
" Maintainer: Alexander Noriega
|
|
||||||
" Latest Revision: 19 April 2015
|
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
if exists('b:current_syntax')
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Keywords
|
" Keywords
|
||||||
syn keyword elmKeyword alias as case else exposing if import in let module of port then type where
|
syn keyword elmConditional case else if of then
|
||||||
|
syn keyword elmAlias alias
|
||||||
|
syn keyword elmTypedef type port let in
|
||||||
|
syn keyword elmImport exposing as import module where
|
||||||
|
|
||||||
" Builtin operators
|
" Operators
|
||||||
syn match elmBuiltinOp "\~"
|
syn match elmOperator "\([-!#$%`&\*\+./<=>\?@\\^|~:]\|\<_\>\)"
|
||||||
syn match elmBuiltinOp "||"
|
|
||||||
syn match elmBuiltinOp "|>"
|
|
||||||
syn match elmBuiltinOp "|"
|
|
||||||
syn match elmBuiltinOp "`"
|
|
||||||
syn match elmBuiltinOp "\^"
|
|
||||||
syn match elmBuiltinOp "\\"
|
|
||||||
syn match elmBuiltinOp ">>"
|
|
||||||
syn match elmBuiltinOp ">="
|
|
||||||
syn match elmBuiltinOp ">"
|
|
||||||
syn match elmBuiltinOp "=="
|
|
||||||
syn match elmBuiltinOp "="
|
|
||||||
syn match elmBuiltinOp "<\~"
|
|
||||||
syn match elmBuiltinOp "<|"
|
|
||||||
syn match elmBuiltinOp "<="
|
|
||||||
syn match elmBuiltinOp "<<"
|
|
||||||
syn match elmBuiltinOp "<-"
|
|
||||||
syn match elmBuiltinOp "<"
|
|
||||||
syn match elmBuiltinOp "::"
|
|
||||||
syn match elmBuiltinOp ":"
|
|
||||||
syn match elmBuiltinOp "/="
|
|
||||||
syn match elmBuiltinOp "//"
|
|
||||||
syn match elmBuiltinOp "/"
|
|
||||||
syn match elmBuiltinOp "\.\."
|
|
||||||
syn match elmBuiltinOp "\."
|
|
||||||
syn match elmBuiltinOp "->"
|
|
||||||
syn match elmBuiltinOp "-"
|
|
||||||
syn match elmBuiltinOp "++"
|
|
||||||
syn match elmBuiltinOp "+"
|
|
||||||
syn match elmBuiltinOp "*"
|
|
||||||
syn match elmBuiltinOp "&&"
|
|
||||||
syn match elmBuiltinOp "%"
|
|
||||||
|
|
||||||
" Special names
|
|
||||||
syntax match specialName "^main "
|
|
||||||
|
|
||||||
" Comments
|
|
||||||
syn match elmTodo "[tT][oO][dD][oO]\|FIXME\|XXX" contained
|
|
||||||
syn match elmLineComment "--.*" contains=elmTodo,@spell
|
|
||||||
syn region elmComment matchgroup=elmComment start="{-|\=" end="-}" contains=elmTodo,elmComment,@spell
|
|
||||||
|
|
||||||
" String literals
|
|
||||||
syn region elmString start="\"" skip="\\\"" end="\"" contains=elmStringEscape
|
|
||||||
syn match elmStringEscape "\\u[0-9a-fA-F]\{4}" contained
|
|
||||||
syn match elmStringEscape "\\[nrfvbt\\\"]" contained
|
|
||||||
|
|
||||||
" Number literals
|
|
||||||
syn match elmNumber "\(\<\d\+\>\)"
|
|
||||||
syn match elmNumber "\(\<\d\+\.\d\+\>\)"
|
|
||||||
|
|
||||||
" Types
|
" Types
|
||||||
syn match elmType "\<[A-Z][0-9A-Za-z_'-]*"
|
syn match elmType "\<[A-Z][0-9A-Za-z_'-]*"
|
||||||
|
syn keyword elmNumberType number
|
||||||
|
|
||||||
let b:current_syntax = "elm"
|
" Delimiters
|
||||||
|
syn match elmDelimiter "[,;]"
|
||||||
|
syn match elmBraces "[()[\]{}]"
|
||||||
|
|
||||||
hi def link elmKeyword Keyword
|
" Functions
|
||||||
hi def link elmBuiltinOp Special
|
syn match elmTupleFunction "\((,\+)\)"
|
||||||
hi def link elmType Type
|
|
||||||
hi def link elmTodo Todo
|
" Comments
|
||||||
hi def link elmLineComment Comment
|
syn keyword elmTodo TODO FIXME XXX contained
|
||||||
hi def link elmComment Comment
|
syn match elmLineComment "--.*" contains=elmTodo,@spell
|
||||||
hi def link elmString String
|
syn region elmComment matchgroup=elmComment start="{-|\=" end="-}" contains=elmTodo,elmComment,@spell
|
||||||
hi def link elmNumber Number
|
|
||||||
hi def link specialName Special
|
" Strings
|
||||||
|
syn match elmStringEscape "\\u[0-9a-fA-F]\{4}" contained
|
||||||
|
syn match elmStringEscape "\\[nrfvbt\\\"]" contained
|
||||||
|
syn region elmString start="\"" skip="\\\"" end="\"" contains=elmStringEscape,@spell
|
||||||
|
syn region elmTripleString start="\"\"\"" skip="\\\"" end="\"\"\"" contains=elmStringEscape,@spell
|
||||||
|
syn match elmChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'"
|
||||||
|
|
||||||
|
" Numbers
|
||||||
|
syn match elmInt "-\?\<\d\+\>\|0[xX][0-9a-fA-F]\+\>"
|
||||||
|
syn match elmFloat "\(\<\d\+\.\d\+\>\)"
|
||||||
|
|
||||||
|
" Identifiers
|
||||||
|
syn match elmTopLevelDecl "^\s*[a-zA-Z][a-zA-z0-9_]*\('\)*\s\+:\s\+" contains=elmOperator
|
||||||
|
|
||||||
|
hi def link elmTopLevelDecl Function
|
||||||
|
hi def link elmTupleFunction Normal
|
||||||
|
hi def link elmTodo Todo
|
||||||
|
hi def link elmComment Comment
|
||||||
|
hi def link elmLineComment Comment
|
||||||
|
hi def link elmString String
|
||||||
|
hi def link elmTripleString String
|
||||||
|
hi def link elmChar String
|
||||||
|
hi def link elmStringEscape Special
|
||||||
|
hi def link elmInt Number
|
||||||
|
hi def link elmFloat Float
|
||||||
|
hi def link elmDelimiter Delimiter
|
||||||
|
hi def link elmBraces Delimiter
|
||||||
|
hi def link elmTypedef TypeDef
|
||||||
|
hi def link elmImport Include
|
||||||
|
hi def link elmConditional Conditional
|
||||||
|
hi def link elmAlias Delimiter
|
||||||
|
hi def link elmOperator Operator
|
||||||
|
hi def link elmType Identifier
|
||||||
|
hi def link elmNumberType Identifier
|
||||||
|
|
||||||
|
syn sync minlines=500
|
||||||
|
|
||||||
|
let b:current_syntax = 'elm'
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -118,14 +118,14 @@ syn keyword erlangBIF garbage_collect get get_keys group_leader contained
|
|||||||
syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
|
syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
|
||||||
syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
|
syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
|
||||||
syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
|
syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
|
||||||
syn keyword erlangBIF is_float is_function is_integer is_list contained
|
syn keyword erlangBIF is_float is_function is_integer is_list is_map contained
|
||||||
syn keyword erlangBIF is_number is_pid is_port is_process_alive contained
|
syn keyword erlangBIF is_number is_pid is_port is_process_alive contained
|
||||||
syn keyword erlangBIF is_record is_reference is_tuple length link contained
|
syn keyword erlangBIF is_record is_reference is_tuple length link contained
|
||||||
syn keyword erlangBIF list_to_atom list_to_binary contained
|
syn keyword erlangBIF list_to_atom list_to_binary contained
|
||||||
syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
|
syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
|
||||||
syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
|
syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
|
||||||
syn keyword erlangBIF list_to_tuple load_module make_ref max min contained
|
syn keyword erlangBIF list_to_tuple load_module make_ref map_size max contained
|
||||||
syn keyword erlangBIF module_loaded monitor monitor_node node contained
|
syn keyword erlangBIF min module_loaded monitor monitor_node node contained
|
||||||
syn keyword erlangBIF nodes now open_port pid_to_list port_close contained
|
syn keyword erlangBIF nodes now open_port pid_to_list port_close contained
|
||||||
syn keyword erlangBIF port_command port_connect pre_loaded contained
|
syn keyword erlangBIF port_command port_connect pre_loaded contained
|
||||||
syn keyword erlangBIF process_flag process_flag process_info contained
|
syn keyword erlangBIF process_flag process_flag process_info contained
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
|
|||||||
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
|
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
|
||||||
let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
|
let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
|
||||||
if b:eruby_subtype == ''
|
if b:eruby_subtype == ''
|
||||||
let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
|
let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
|
||||||
endif
|
endif
|
||||||
if b:eruby_subtype == 'rhtml'
|
if b:eruby_subtype == 'rhtml'
|
||||||
let b:eruby_subtype = 'html'
|
let b:eruby_subtype = 'html'
|
||||||
@@ -49,7 +49,7 @@ if !b:eruby_nest_level
|
|||||||
let b:eruby_nest_level = 1
|
let b:eruby_nest_level = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists("b:eruby_subtype") && b:eruby_subtype != ''
|
if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
|
||||||
exe "runtime! syntax/".b:eruby_subtype.".vim"
|
exe "runtime! syntax/".b:eruby_subtype.".vim"
|
||||||
unlet! b:current_syntax
|
unlet! b:current_syntax
|
||||||
endif
|
endif
|
||||||
|
|||||||
269
syntax/fsharp.vim
Normal file
269
syntax/fsharp.vim
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: F#
|
||||||
|
" Last Change: Sun 19 Oct 2014 11:11:44 PM CEST
|
||||||
|
" Maintainer: Gregor Uhlenheuer <kongo2002@googlemail.com>
|
||||||
|
"
|
||||||
|
" Note: This syntax file is a complete rewrite of the original version
|
||||||
|
" of fs.vim from Choy Rim <choy.rim@gmail.com> and a slight
|
||||||
|
" modified version from Thomas Schank <ThomasSchank@gmail.com>
|
||||||
|
|
||||||
|
if version < 600
|
||||||
|
syntax clear
|
||||||
|
elseif exists('b:current_syntax')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" F# is case sensitive.
|
||||||
|
syn case match
|
||||||
|
|
||||||
|
" reset 'iskeyword' setting
|
||||||
|
setl isk&vim
|
||||||
|
|
||||||
|
" Scripting/preprocessor directives
|
||||||
|
syn match fsharpSScript "^\s*#\S\+" transparent contains=fsharpScript,fsharpRegion,fsharpPreCondit
|
||||||
|
|
||||||
|
syn match fsharpScript contained "#"
|
||||||
|
syn keyword fsharpScript contained quitlabels warnings directory cd load use
|
||||||
|
syn keyword fsharpScript contained install_printer remove_printer requirethread
|
||||||
|
syn keyword fsharpScript contained trace untrace untrace_all print_depth
|
||||||
|
syn keyword fsharpScript contained print_length define undef if elif else endif
|
||||||
|
syn keyword fsharpScript contained line error warning light nowarn
|
||||||
|
|
||||||
|
|
||||||
|
" comments
|
||||||
|
syn match fsharpSingleLineComment "//.*$" contains=fsharpTodo,@Spell
|
||||||
|
syn region fsharpDocComment start="///" end="$" contains=fsharpTodo,fsharpXml,@Spell keepend oneline
|
||||||
|
syn region fsharpXml matchgroup=fsharpXmlDoc start="<[^>]\+>" end="</[^>]\+>" contained contains=fsharpXml
|
||||||
|
|
||||||
|
" Double-backtick identifiers
|
||||||
|
syn region fsharpDoubleBacktick start="``" end="``" keepend oneline
|
||||||
|
|
||||||
|
|
||||||
|
" symbol names
|
||||||
|
syn match fsharpSymbol "\%(let\|use\|mutable\|rec\|and\|private\)\@<=!\=\s\+\zs\w\+\ze\s*[^=:]*[=:]"
|
||||||
|
syn match fsharpSymbol "\%(member\)\@<=\s\+\w\+\.\zs\w\+"
|
||||||
|
|
||||||
|
|
||||||
|
" types
|
||||||
|
syn match fsharpTypeName "\%(\<type\s\+\)\@<=\w\+"
|
||||||
|
|
||||||
|
|
||||||
|
" errors
|
||||||
|
syn match fsharpBraceErr "}"
|
||||||
|
syn match fsharpBrackErr "\]"
|
||||||
|
syn match fsharpParenErr ")"
|
||||||
|
syn match fsharpArrErr "|]"
|
||||||
|
syn match fsharpCommentErr "\*)"
|
||||||
|
|
||||||
|
|
||||||
|
" enclosing delimiters
|
||||||
|
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="(" matchgroup=fsharpKeyword end=")" contains=ALLBUT,fsharpParenErr,fsharpScript
|
||||||
|
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="{" matchgroup=fsharpKeyword end="}" contains=ALLBUT,fsharpBraceErr,fsharpScript
|
||||||
|
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="\[" matchgroup=fsharpKeyword end="\]" contains=ALLBUT,fsharpBrackErr,fsharpScript
|
||||||
|
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="\[|" matchgroup=fsharpKeyword end="|\]" contains=ALLBUT,fsharpArrErr,fsharpScript
|
||||||
|
|
||||||
|
|
||||||
|
" comments
|
||||||
|
syn region fsharpMultiLineComment start="(\*" end="\*)" contains=fsharpTodo
|
||||||
|
syn keyword fsharpTodo contained TODO FIXME XXX NOTE
|
||||||
|
|
||||||
|
" keywords
|
||||||
|
syn keyword fsharpKeyword abstract as assert base begin class default delegate
|
||||||
|
syn keyword fsharpKeyword do done downcast downto elif else end exception
|
||||||
|
syn keyword fsharpKeyword extern for fun function global if in inherit inline
|
||||||
|
syn keyword fsharpKeyword interface lazy let match member module mutable
|
||||||
|
syn keyword fsharpKeyword namespace new of override rec static struct then
|
||||||
|
syn keyword fsharpKeyword to type upcast use val void when while with
|
||||||
|
|
||||||
|
syn keyword fsharpKeyword async atomic break checked component const constraint
|
||||||
|
syn keyword fsharpKeyword constructor continue decimal eager event external
|
||||||
|
syn keyword fsharpKeyword fixed functor include method mixin object parallel
|
||||||
|
syn keyword fsharpKeyword process pure return seq tailcall trait
|
||||||
|
|
||||||
|
" additional operator keywords (Microsoft.FSharp.Core.Operators)
|
||||||
|
syn keyword fsharpKeyword box hash sizeof typeof typedefof unbox ref fst snd
|
||||||
|
syn keyword fsharpKeyword stdin stdout stderr
|
||||||
|
|
||||||
|
" math operators (Microsoft.FSharp.Core.Operators)
|
||||||
|
syn keyword fsharpKeyword abs acos asin atan atan2 ceil cos cosh exp floor log
|
||||||
|
syn keyword fsharpKeyword log10 pown round sign sin sinh sqrt tan tanh
|
||||||
|
|
||||||
|
syn keyword fsharpOCaml asr land lor lsl lsr lxor mod sig
|
||||||
|
|
||||||
|
if !exists('g:fsharp_no_linq') || g:fsharp_no_linq == 0
|
||||||
|
syn keyword fsharpLinq orderBy select where yield
|
||||||
|
endif
|
||||||
|
|
||||||
|
" open
|
||||||
|
syn keyword fsharpOpen open
|
||||||
|
|
||||||
|
" exceptions
|
||||||
|
syn keyword fsharpException try failwith failwithf finally invalid_arg raise
|
||||||
|
syn keyword fsharpException rethrow
|
||||||
|
|
||||||
|
" modifiers
|
||||||
|
syn keyword fsharpModifier abstract const extern internal override private
|
||||||
|
syn keyword fsharpModifier protected public readonly sealed static virtual
|
||||||
|
syn keyword fsharpModifier volatile
|
||||||
|
|
||||||
|
" constants
|
||||||
|
syn keyword fsharpConstant null
|
||||||
|
syn keyword fsharpBoolean false true
|
||||||
|
|
||||||
|
" types
|
||||||
|
syn keyword fsharpType array bool byte char decimal double enum exn float
|
||||||
|
syn keyword fsharpType float32 int int16 int32 int64 lazy_t list nativeint
|
||||||
|
syn keyword fsharpType obj option sbyte single string uint uint32 uint64
|
||||||
|
syn keyword fsharpType uint16 unativeint unit
|
||||||
|
|
||||||
|
" core classes
|
||||||
|
syn match fsharpCore "\u\a*\." transparent contains=fsharpCoreClass
|
||||||
|
|
||||||
|
syn keyword fsharpCoreClass Array Async Directory File List Option Path Map Set contained
|
||||||
|
syn keyword fsharpCoreClass String Seq Tuple contained
|
||||||
|
|
||||||
|
syn keyword fsharpCoreMethod printf printfn sprintf eprintf eprintfn fprintf
|
||||||
|
syn keyword fsharpCoreMethod fprintfn
|
||||||
|
|
||||||
|
" options
|
||||||
|
syn keyword fsharpOption Some None
|
||||||
|
|
||||||
|
" operators
|
||||||
|
syn keyword fsharpOperator not and or
|
||||||
|
|
||||||
|
syn match fsharpFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bscdiuxXoEefFgGMOAat]\|\[\^\=.[^]]*\]\)" contained
|
||||||
|
|
||||||
|
syn match fsharpCharacter "'\\\d\d\d'\|'\\[\'ntbr]'\|'.'"
|
||||||
|
syn match fsharpCharErr "'\\\d\d'\|'\\\d'"
|
||||||
|
syn match fsharpCharErr "'\\[^\'ntbr]'"
|
||||||
|
syn region fsharpString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=fsharpFormat
|
||||||
|
syn region fsharpString start=+"""+ skip=+\\\\\|\\"+ end=+"""+ contains=fsharpFormat
|
||||||
|
syn region fsharpString start=+@"+ skip=+""+ end=+"+ contains=fsharpFormat
|
||||||
|
|
||||||
|
syn match fsharpFunDef "->"
|
||||||
|
syn match fsharpRefAssign ":="
|
||||||
|
syn match fsharpTopStop ";;"
|
||||||
|
syn match fsharpOperator "\^"
|
||||||
|
syn match fsharpOperator "::"
|
||||||
|
|
||||||
|
syn match fsharpLabel "\<_\>"
|
||||||
|
|
||||||
|
syn match fsharpOperator "&&"
|
||||||
|
syn match fsharpOperator "<"
|
||||||
|
syn match fsharpOperator ">"
|
||||||
|
syn match fsharpOperator "|>"
|
||||||
|
syn match fsharpOperator ":>"
|
||||||
|
syn match fsharpOperator ":?>"
|
||||||
|
syn match fsharpOperator "&&&"
|
||||||
|
syn match fsharpOperator "|||"
|
||||||
|
syn match fsharpOperator "\.\."
|
||||||
|
|
||||||
|
syn match fsharpKeyChar "|[^\]]"me=e-1
|
||||||
|
syn match fsharpKeyChar ";"
|
||||||
|
syn match fsharpKeyChar "\~"
|
||||||
|
syn match fsharpKeyChar "?"
|
||||||
|
syn match fsharpKeyChar "\*"
|
||||||
|
syn match fsharpKeyChar "+"
|
||||||
|
syn match fsharpKeyChar "="
|
||||||
|
syn match fsharpKeyChar "|"
|
||||||
|
syn match fsharpKeyChar "(\*)"
|
||||||
|
|
||||||
|
syn match fsharpOperator "<-"
|
||||||
|
|
||||||
|
syn match fsharpNumber "\<\d\+"
|
||||||
|
syn match fsharpNumber "\<-\=\d\(_\|\d\)*\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||||
|
syn match fsharpNumber "\<-\=0[x|X]\(\x\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||||
|
syn match fsharpNumber "\<-\=0[o|O]\(\o\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||||
|
syn match fsharpNumber "\<-\=0[b|B]\([01]\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||||
|
syn match fsharpFloat "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
|
||||||
|
syn match fsharpFloat "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
|
||||||
|
syn match fsharpFloat "\<\d\+\.\d*"
|
||||||
|
|
||||||
|
" modules
|
||||||
|
syn match fsharpModule "\%(\<open\s\+\)\@<=[a-zA-Z.]\+"
|
||||||
|
|
||||||
|
" attributes
|
||||||
|
syn region fsharpAttrib matchgroup=fsharpAttribute start="\[<" end=">]"
|
||||||
|
|
||||||
|
" regions
|
||||||
|
syn region fsharpRegion matchgroup=fsharpPreCondit start="\%(end\)\@<!region.*$"
|
||||||
|
\ end="endregion" fold contains=ALL contained
|
||||||
|
|
||||||
|
if version >= 508 || !exists("did_fs_syntax_inits")
|
||||||
|
if version < 508
|
||||||
|
let did_fs_syntax_inits = 1
|
||||||
|
command -nargs=+ HiLink hi link <args>
|
||||||
|
else
|
||||||
|
command -nargs=+ HiLink hi def link <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
HiLink fsharpBraceErr Error
|
||||||
|
HiLink fsharpBrackErr Error
|
||||||
|
HiLink fsharpParenErr Error
|
||||||
|
HiLink fsharpArrErr Error
|
||||||
|
HiLink fsharpCommentErr Error
|
||||||
|
|
||||||
|
HiLink fsharpSingleLineComment Comment
|
||||||
|
HiLink fsharpMultiLineComment Comment
|
||||||
|
HiLink fsharpDocComment Comment
|
||||||
|
HiLink fsharpXml Comment
|
||||||
|
HiLink fsharpDoubleBacktick String
|
||||||
|
|
||||||
|
HiLink fsharpOpen Include
|
||||||
|
HiLink fsharpModPath Include
|
||||||
|
HiLink fsharpScript Include
|
||||||
|
HiLink fsharpPreCondit Include
|
||||||
|
|
||||||
|
HiLink fsharpKeyword Keyword
|
||||||
|
HiLink fsharpCoreMethod Keyword
|
||||||
|
|
||||||
|
HiLink fsharpOCaml Statement
|
||||||
|
HiLink fsharpLinq Statement
|
||||||
|
|
||||||
|
HiLink fsharpSymbol Function
|
||||||
|
|
||||||
|
HiLink fsharpFunDef Operator
|
||||||
|
HiLink fsharpRefAssign Operator
|
||||||
|
HiLink fsharpTopStop Operator
|
||||||
|
HiLink fsharpKeyChar Operator
|
||||||
|
HiLink fsharpOperator Operator
|
||||||
|
|
||||||
|
HiLink fsharpBoolean Boolean
|
||||||
|
HiLink fsharpConstant Constant
|
||||||
|
HiLink fsharpCharacter Character
|
||||||
|
HiLink fsharpNumber Number
|
||||||
|
HiLink fsharpFloat Float
|
||||||
|
|
||||||
|
HiLink fsharpString String
|
||||||
|
HiLink fsharpFormat Special
|
||||||
|
|
||||||
|
HiLink fsharpModifier StorageClass
|
||||||
|
|
||||||
|
HiLink fsharpException Exception
|
||||||
|
|
||||||
|
HiLink fsharpLabel Identifier
|
||||||
|
HiLink fsharpOption Identifier
|
||||||
|
HiLink fsharpTypeName Identifier
|
||||||
|
HiLink fsharpModule Identifier
|
||||||
|
|
||||||
|
HiLink fsharpType Type
|
||||||
|
|
||||||
|
HiLink fsharpCoreClass Typedef
|
||||||
|
HiLink fsharpAttrib Typedef
|
||||||
|
HiLink fsharpXmlDoc Typedef
|
||||||
|
|
||||||
|
HiLink fsharpTodo Todo
|
||||||
|
|
||||||
|
HiLink fsharpEncl Delimiter
|
||||||
|
HiLink fsharpAttribute Delimiter
|
||||||
|
|
||||||
|
delcommand HiLink
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:current_syntax = 'fsharp'
|
||||||
|
|
||||||
|
" vim: sw=4 et sts=4
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -15,7 +15,7 @@ syn sync minlines=50
|
|||||||
syn include @gitDiff syntax/diff.vim
|
syn include @gitDiff syntax/diff.vim
|
||||||
|
|
||||||
syn region gitHead start=/\%^/ end=/^$/
|
syn region gitHead start=/\%^/ end=/^$/
|
||||||
syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
|
syn region gitHead start=/\%(^commit\%( \x\{40\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
|
||||||
|
|
||||||
" For git reflog and git show ...^{tree}, avoid sync issues
|
" For git reflog and git show ...^{tree}, avoid sync issues
|
||||||
syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/
|
syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ syn keyword glslRepeat for while do
|
|||||||
syn keyword glslStatement discard return break continue
|
syn keyword glslStatement discard return break continue
|
||||||
|
|
||||||
" Comments
|
" Comments
|
||||||
syn keyword glslTodo contained TODO FIXME XXX
|
syn keyword glslTodo contained TODO FIXME XXX NOTE
|
||||||
syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell
|
syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell
|
||||||
syn region glslComment matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell
|
syn region glslComment matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell
|
||||||
|
|
||||||
@@ -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*\)[uU]\?"
|
||||||
syn match glslOctalInt display "0\o\+[uU]\?"
|
syn match glslOctalInt display "\<0\o\+[uU]\?"
|
||||||
syn match glslHexInt display "0[xX]\x\+[uU]\?"
|
syn match glslHexInt display "\<0[xX]\x\+[uU]\?"
|
||||||
|
|
||||||
" Float Numbers
|
" Float Numbers
|
||||||
syn match glslFloat display "\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
|
syn match glslFloat display "\<\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
|
||||||
syn match glslFloat display "\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
|
syn match glslFloat display "\<\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
|
||||||
syn match glslFloat display "\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\="
|
syn match glslFloat display "\<\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\="
|
||||||
syn match glslFloat display "\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
|
syn match glslFloat display "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
|
||||||
|
|
||||||
" Swizzles
|
" Swizzles
|
||||||
syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/
|
syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/
|
||||||
@@ -44,10 +44,9 @@ syn match glslSwizzle display /\.[rgba]\{1,4\}\>/
|
|||||||
syn match glslSwizzle display /\.[stpq]\{1,4\}\>/
|
syn match glslSwizzle display /\.[stpq]\{1,4\}\>/
|
||||||
|
|
||||||
" Structure
|
" Structure
|
||||||
syn keyword glslStructure struct
|
syn keyword glslStructure struct nextgroup=glslIdentifier skipwhite skipempty
|
||||||
|
|
||||||
" This prevents numbers at ends of identifies from being highlighted as numbers
|
syn match glslIdentifier contains=glslIdentifierPrime "\%([a-zA-Z_]\)\%([a-zA-Z0-9_]\)*" display contained
|
||||||
syn match glslIdentifier display "\I\i*"
|
|
||||||
|
|
||||||
" Types
|
" Types
|
||||||
syn keyword glslType atomic_uint
|
syn keyword glslType atomic_uint
|
||||||
@@ -171,6 +170,7 @@ syn keyword glslType vec4
|
|||||||
syn keyword glslType void
|
syn keyword glslType void
|
||||||
|
|
||||||
" Qualifiers
|
" Qualifiers
|
||||||
|
syn keyword glslQualifier align
|
||||||
syn keyword glslQualifier attribute
|
syn keyword glslQualifier attribute
|
||||||
syn keyword glslQualifier binding
|
syn keyword glslQualifier binding
|
||||||
syn keyword glslQualifier buffer
|
syn keyword glslQualifier buffer
|
||||||
@@ -276,16 +276,22 @@ syn keyword glslQualifier varying
|
|||||||
syn keyword glslQualifier vertices
|
syn keyword glslQualifier vertices
|
||||||
syn keyword glslQualifier volatile
|
syn keyword glslQualifier volatile
|
||||||
syn keyword glslQualifier writeonly
|
syn keyword glslQualifier writeonly
|
||||||
|
syn keyword glslQualifier xfb_buffer
|
||||||
|
syn keyword glslQualifier xfb_stride
|
||||||
|
syn keyword glslQualifier xfb_offset
|
||||||
|
|
||||||
" Built-in Constants
|
" Built-in Constants
|
||||||
|
syn keyword glslBuiltinConstant gl_CullDistance
|
||||||
syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings
|
syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings
|
||||||
syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize
|
syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize
|
||||||
syn keyword glslBuiltinConstant gl_MaxClipDistances
|
syn keyword glslBuiltinConstant gl_MaxClipDistances
|
||||||
syn keyword glslBuiltinConstant gl_MaxClipPlanes
|
syn keyword glslBuiltinConstant gl_MaxClipPlanes
|
||||||
syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers
|
syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers
|
||||||
syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters
|
syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters
|
||||||
|
syn keyword glslBuiltinConstant gl_MaxCombinedClipAndCullDistances
|
||||||
syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms
|
syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms
|
||||||
syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs
|
syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs
|
||||||
|
syn keyword glslBuiltinConstant gl_MaxCombinedShaderOutputResources
|
||||||
syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits
|
syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits
|
||||||
syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers
|
syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers
|
||||||
syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters
|
syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters
|
||||||
@@ -294,6 +300,7 @@ syn keyword glslBuiltinConstant gl_MaxComputeTextureImageUnits
|
|||||||
syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents
|
syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents
|
||||||
syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount
|
syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount
|
||||||
syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize
|
syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize
|
||||||
|
syn keyword glslBuiltinConstant gl_MaxCullDistances
|
||||||
syn keyword glslBuiltinConstant gl_MaxDrawBuffers
|
syn keyword glslBuiltinConstant gl_MaxDrawBuffers
|
||||||
syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers
|
syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers
|
||||||
syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters
|
syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters
|
||||||
@@ -317,6 +324,7 @@ syn keyword glslBuiltinConstant gl_MaxImageUnits
|
|||||||
syn keyword glslBuiltinConstant gl_MaxLights
|
syn keyword glslBuiltinConstant gl_MaxLights
|
||||||
syn keyword glslBuiltinConstant gl_MaxPatchVertices
|
syn keyword glslBuiltinConstant gl_MaxPatchVertices
|
||||||
syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset
|
syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset
|
||||||
|
syn keyword glslBuiltinConstant gl_MaxSamples
|
||||||
syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers
|
syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers
|
||||||
syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters
|
syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters
|
||||||
syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms
|
syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms
|
||||||
@@ -337,6 +345,8 @@ syn keyword glslBuiltinConstant gl_MaxTessPatchComponents
|
|||||||
syn keyword glslBuiltinConstant gl_MaxTextureCoords
|
syn keyword glslBuiltinConstant gl_MaxTextureCoords
|
||||||
syn keyword glslBuiltinConstant gl_MaxTextureImageUnits
|
syn keyword glslBuiltinConstant gl_MaxTextureImageUnits
|
||||||
syn keyword glslBuiltinConstant gl_MaxTextureUnits
|
syn keyword glslBuiltinConstant gl_MaxTextureUnits
|
||||||
|
syn keyword glslBuiltinConstant gl_MaxTransformFeedbackBuffers
|
||||||
|
syn keyword glslBuiltinConstant gl_MaxTransformFeedbackInterleavedComponents
|
||||||
syn keyword glslBuiltinConstant gl_MaxVaryingComponents
|
syn keyword glslBuiltinConstant gl_MaxVaryingComponents
|
||||||
syn keyword glslBuiltinConstant gl_MaxVaryingFloats
|
syn keyword glslBuiltinConstant gl_MaxVaryingFloats
|
||||||
syn keyword glslBuiltinConstant gl_MaxVaryingVectors
|
syn keyword glslBuiltinConstant gl_MaxVaryingVectors
|
||||||
@@ -382,6 +392,7 @@ syn keyword glslBuiltinVariable gl_FrontLightProduct
|
|||||||
syn keyword glslBuiltinVariable gl_FrontMaterial
|
syn keyword glslBuiltinVariable gl_FrontMaterial
|
||||||
syn keyword glslBuiltinVariable gl_FrontSecondaryColor
|
syn keyword glslBuiltinVariable gl_FrontSecondaryColor
|
||||||
syn keyword glslBuiltinVariable gl_GlobalInvocationID
|
syn keyword glslBuiltinVariable gl_GlobalInvocationID
|
||||||
|
syn keyword glslBuiltinVariable gl_HelperInvocation
|
||||||
syn keyword glslBuiltinVariable gl_InstanceID
|
syn keyword glslBuiltinVariable gl_InstanceID
|
||||||
syn keyword glslBuiltinVariable gl_InvocationID
|
syn keyword glslBuiltinVariable gl_InvocationID
|
||||||
syn keyword glslBuiltinVariable gl_Layer
|
syn keyword glslBuiltinVariable gl_Layer
|
||||||
@@ -483,7 +494,11 @@ syn keyword glslBuiltinFunction cos
|
|||||||
syn keyword glslBuiltinFunction cosh
|
syn keyword glslBuiltinFunction cosh
|
||||||
syn keyword glslBuiltinFunction cross
|
syn keyword glslBuiltinFunction cross
|
||||||
syn keyword glslBuiltinFunction dFdx
|
syn keyword glslBuiltinFunction dFdx
|
||||||
|
syn keyword glslBuiltinFunction dFdxCoarse
|
||||||
|
syn keyword glslBuiltinFunction dFdxFine
|
||||||
syn keyword glslBuiltinFunction dFdy
|
syn keyword glslBuiltinFunction dFdy
|
||||||
|
syn keyword glslBuiltinFunction dFdyCoarse
|
||||||
|
syn keyword glslBuiltinFunction dFdyFine
|
||||||
syn keyword glslBuiltinFunction degrees
|
syn keyword glslBuiltinFunction degrees
|
||||||
syn keyword glslBuiltinFunction determinant
|
syn keyword glslBuiltinFunction determinant
|
||||||
syn keyword glslBuiltinFunction distance
|
syn keyword glslBuiltinFunction distance
|
||||||
@@ -502,6 +517,8 @@ syn keyword glslBuiltinFunction fract
|
|||||||
syn keyword glslBuiltinFunction frexp
|
syn keyword glslBuiltinFunction frexp
|
||||||
syn keyword glslBuiltinFunction ftransform
|
syn keyword glslBuiltinFunction ftransform
|
||||||
syn keyword glslBuiltinFunction fwidth
|
syn keyword glslBuiltinFunction fwidth
|
||||||
|
syn keyword glslBuiltinFunction fwidthCoarse
|
||||||
|
syn keyword glslBuiltinFunction fwidthFine
|
||||||
syn keyword glslBuiltinFunction greaterThan
|
syn keyword glslBuiltinFunction greaterThan
|
||||||
syn keyword glslBuiltinFunction greaterThanEqual
|
syn keyword glslBuiltinFunction greaterThanEqual
|
||||||
syn keyword glslBuiltinFunction groupMemoryBarrier
|
syn keyword glslBuiltinFunction groupMemoryBarrier
|
||||||
@@ -643,13 +660,15 @@ hi def link glslOctalInt glslInteger
|
|||||||
hi def link glslHexInt glslInteger
|
hi def link glslHexInt glslInteger
|
||||||
hi def link glslInteger Number
|
hi def link glslInteger Number
|
||||||
hi def link glslFloat Float
|
hi def link glslFloat Float
|
||||||
|
hi def link glslIdentifierPrime glslIdentifier
|
||||||
|
hi def link glslIdentifier Identifier
|
||||||
hi def link glslStructure Structure
|
hi def link glslStructure Structure
|
||||||
hi def link glslType Type
|
hi def link glslType Type
|
||||||
hi def link glslQualifier StorageClass
|
hi def link glslQualifier StorageClass
|
||||||
hi def link glslBuiltinConstant Constant
|
hi def link glslBuiltinConstant Constant
|
||||||
hi def link glslBuiltinFunction Function
|
hi def link glslBuiltinFunction Function
|
||||||
hi def link glslBuiltinVariable Identifier
|
hi def link glslBuiltinVariable Identifier
|
||||||
hi def link glslSwizzle SpecialChar
|
hi def link glslSwizzle Identifier
|
||||||
|
|
||||||
if !exists("b:current_syntax")
|
if !exists("b:current_syntax")
|
||||||
let b:current_syntax = "glsl"
|
let b:current_syntax = "glsl"
|
||||||
|
|||||||
122
syntax/gmpl.vim
Normal file
122
syntax/gmpl.vim
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gmpl') == -1
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: GMPL
|
||||||
|
" Maintainer: Mark Mba Wright
|
||||||
|
" Latest Revision: 9 July 2012
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn sync fromstart
|
||||||
|
|
||||||
|
|
||||||
|
syn match gmplArithmeticSetOperator "\.\."
|
||||||
|
|
||||||
|
" Integer with - + or nothing in front
|
||||||
|
syn match gmplNumber '\d\+'
|
||||||
|
syn match gmplNumber '[-+]\d\+'
|
||||||
|
|
||||||
|
" Floating point gmplNumber with decimal no E or e (+,-)
|
||||||
|
syn match gmplNumber '\d*\.\d\+'
|
||||||
|
syn match gmplNumber '[-+]\d*\.\d\+'
|
||||||
|
|
||||||
|
" Floating point like gmplNumber with E and no decimal point (+,-)
|
||||||
|
syn match gmplNumber '[-+]\=\d[[:digit:]]*[eE][\-+]\=\d\+'
|
||||||
|
syn match gmplNumber '\d[[:digit:]]*[eE][\-+]\=\d\+'
|
||||||
|
|
||||||
|
" Floating point like gmplNumber with E and decimal point (+,-)
|
||||||
|
syn match gmplNumber '[-+]\=\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+'
|
||||||
|
syn match gmplNumber '\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+'
|
||||||
|
syn match gmplIndex /\<\%(in\>\)\@!\w*/ contained contains=gmplKeyword,gmplNumber
|
||||||
|
syn match gmplLabel '[a-zA-Z][a-zA-Z0-9_]*'
|
||||||
|
syn match gmplArithmeticOperator "[-+]"
|
||||||
|
syn match gmplArithmeticOperator "\.\=[*/\\^]"
|
||||||
|
syn match gmplRelationalOperator "[=~]="
|
||||||
|
syn match gmplRelationalOperator "[<>]=\="
|
||||||
|
" syn match gmplLogicalOperator "[&|~]
|
||||||
|
|
||||||
|
" match indeces
|
||||||
|
|
||||||
|
" comments
|
||||||
|
syn match gmplComment /\/\*.\{-}\*\//
|
||||||
|
syn region gmplComment start="/\*" end="\*/"
|
||||||
|
syn match gmplComment '#.\{-}$'
|
||||||
|
|
||||||
|
" strings
|
||||||
|
syn region gmplString start="\"" end="\""
|
||||||
|
syn region gmplString start="\'" end="\'" contains=gmplStringToken
|
||||||
|
syn match gmplStringToken '\%[a-z]' contained
|
||||||
|
|
||||||
|
" Keywords
|
||||||
|
syn keyword gmplKeyword and else by if cross in diff inter div less mod union not within or symdiff then
|
||||||
|
syn keyword gmplKeyword minimize maximize solve
|
||||||
|
syn keyword gmplType set var param nextgroup=gmplLabel skipwhite
|
||||||
|
|
||||||
|
" Regions
|
||||||
|
syn region gmplIndexExpression start="{" end="}" transparent contains=gmplIndex,gmplIndexExpression
|
||||||
|
syn region gmplIndexGroup start="\[" end="\]" transparent contains=gmplIndex
|
||||||
|
" syn region gmplParen start="(" end=")"
|
||||||
|
|
||||||
|
"" catch errors caused by wrong parenthesis
|
||||||
|
syn match gmplParensError ")\|}\|\]"
|
||||||
|
syn match gmplParensErrA contained "\]"
|
||||||
|
syn match gmplParensErrC contained "}"
|
||||||
|
|
||||||
|
|
||||||
|
hi level1c ctermfg=brown guifg=brown
|
||||||
|
hi level2c ctermfg=darkgreen guifg=darkgreen gui=bold
|
||||||
|
hi level3c ctermfg=Darkblue guifg=Darkblue
|
||||||
|
hi level4c ctermfg=darkmagenta guifg=darkmagenta gui=bold
|
||||||
|
hi level5c ctermfg=darkcyan guifg=darkcyan
|
||||||
|
hi level6c ctermfg=white guifg=white gui=bold
|
||||||
|
hi level7c ctermfg=darkred guifg=darkred
|
||||||
|
hi level8c ctermfg=blue guifg=blue gui=bold
|
||||||
|
hi level9c ctermfg=darkgray guifg=darkgray
|
||||||
|
hi level10c ctermfg=brown guifg=brown gui=bold
|
||||||
|
hi level11c ctermfg=darkgreen guifg=darkgreen
|
||||||
|
hi level12c ctermfg=Darkblue guifg=Darkblue gui=bold
|
||||||
|
hi level13c ctermfg=darkmagenta guifg=darkmagenta
|
||||||
|
hi level14c ctermfg=darkcyan guifg=darkcyan gui=bold
|
||||||
|
hi level15c ctermfg=gray guifg=gray
|
||||||
|
|
||||||
|
" These are the regions for each pair.
|
||||||
|
" This could be improved, perhaps, by makeing them match [ and { also,
|
||||||
|
" but I'm not going to take the time to figure out haw to make the
|
||||||
|
" end pattern match only the proper type.
|
||||||
|
syn region level1 matchgroup=level1c start=/(/ end=/)/ contains=TOP,level1,level2,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level2 matchgroup=level2c start=/(/ end=/)/ contains=TOP,level2,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level3 matchgroup=level3c start=/(/ end=/)/ contains=TOP,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level4 matchgroup=level4c start=/(/ end=/)/ contains=TOP,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level5 matchgroup=level5c start=/(/ end=/)/ contains=TOP,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level6 matchgroup=level6c start=/(/ end=/)/ contains=TOP,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level7 matchgroup=level7c start=/(/ end=/)/ contains=TOP,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level8 matchgroup=level8c start=/(/ end=/)/ contains=TOP,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level9 matchgroup=level9c start=/(/ end=/)/ contains=TOP,level9,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level10 matchgroup=level10c start=/(/ end=/)/ contains=TOP,level10,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level11 matchgroup=level11c start=/(/ end=/)/ contains=TOP,level11,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level12 matchgroup=level12c start=/(/ end=/)/ contains=TOP,level12,level13,level14,level15, NoInParens
|
||||||
|
syn region level13 matchgroup=level13c start=/(/ end=/)/ contains=TOP,level13,level14,level15, NoInParens
|
||||||
|
syn region level14 matchgroup=level14c start=/(/ end=/)/ contains=TOP,level14,level15, NoInParens
|
||||||
|
syn region level15 matchgroup=level15c start=/(/ end=/)/ contains=TOP,level15, NoInParens
|
||||||
|
|
||||||
|
let b:current_syntax = "gmpl"
|
||||||
|
|
||||||
|
hi def link gmplKeyword Keyword
|
||||||
|
hi def link gmplParensError Error
|
||||||
|
hi def link gmplParensErrA Error
|
||||||
|
hi def link gmplParensErrB Error
|
||||||
|
hi def link gmplParensErrC Error
|
||||||
|
" hi def link gmplIndexExpression Label
|
||||||
|
" hi def link gmplParen Label
|
||||||
|
" hi def link gmplIndexGroup Label
|
||||||
|
hi def link gmplIndex Identifier
|
||||||
|
hi def link gmplNumber Number
|
||||||
|
hi def link gmplComment Comment
|
||||||
|
hi def link gmplType Type
|
||||||
|
hi def link gmplLabel Keyword
|
||||||
|
hi def link gmplString String
|
||||||
|
hi def link gmplStringToken Special
|
||||||
|
|
||||||
|
endif
|
||||||
137
syntax/go.vim
137
syntax/go.vim
@@ -5,36 +5,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
|
|||||||
" license that can be found in the LICENSE file.
|
" license that can be found in the LICENSE file.
|
||||||
"
|
"
|
||||||
" go.vim: Vim syntax file for Go.
|
" go.vim: Vim syntax file for Go.
|
||||||
"
|
|
||||||
" Options:
|
|
||||||
" There are some options for customizing the highlighting; the recommended
|
|
||||||
" settings are the default values, but you can write:
|
|
||||||
" let OPTION_NAME = 0
|
|
||||||
" in your ~/.vimrc file to disable particular options. You can also write:
|
|
||||||
" let OPTION_NAME = 1
|
|
||||||
" to enable particular options. At present, all options default to off:
|
|
||||||
"
|
|
||||||
" - go_highlight_array_whitespace_error
|
|
||||||
" Highlights white space after "[]".
|
|
||||||
" - go_highlight_chan_whitespace_error
|
|
||||||
" Highlights white space around the communications operator that don't follow
|
|
||||||
" the standard style.
|
|
||||||
" - go_highlight_extra_types
|
|
||||||
" Highlights commonly used library types (io.Reader, etc.).
|
|
||||||
" - go_highlight_space_tab_error
|
|
||||||
" Highlights instances of tabs following spaces.
|
|
||||||
" - go_highlight_trailing_whitespace_error
|
|
||||||
" Highlights trailing white space.
|
|
||||||
" - go_highlight_string_spellcheck
|
|
||||||
" Specifies that strings should be spell checked
|
|
||||||
" - go_highlight_format_strings
|
|
||||||
" Highlights printf-style operators inside string literals.
|
|
||||||
|
|
||||||
" 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")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Set settings to default values.
|
||||||
if !exists("g:go_highlight_array_whitespace_error")
|
if !exists("g:go_highlight_array_whitespace_error")
|
||||||
let g:go_highlight_array_whitespace_error = 0
|
let g:go_highlight_array_whitespace_error = 0
|
||||||
endif
|
endif
|
||||||
@@ -91,12 +68,52 @@ if !exists("g:go_highlight_generate_tags")
|
|||||||
let g:go_highlight_generate_tags = 0
|
let g:go_highlight_generate_tags = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists("g:go_highlight_variable_assignments")
|
||||||
|
let g:go_highlight_variable_assignments = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("g:go_highlight_variable_declarations")
|
||||||
|
let g:go_highlight_variable_declarations = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:fold_block = 1
|
||||||
|
let s:fold_import = 1
|
||||||
|
let s:fold_varconst = 1
|
||||||
|
let s:fold_package_comment = 1
|
||||||
|
let s:fold_comment = 0
|
||||||
|
|
||||||
|
if exists("g:go_fold_enable")
|
||||||
|
" Enabled by default.
|
||||||
|
if index(g:go_fold_enable, 'block') == -1
|
||||||
|
let s:fold_block = 0
|
||||||
|
endif
|
||||||
|
if index(g:go_fold_enable, 'import') == -1
|
||||||
|
let s:fold_import = 0
|
||||||
|
endif
|
||||||
|
if index(g:go_fold_enable, 'varconst') == -1
|
||||||
|
let s:fold_varconst = 0
|
||||||
|
endif
|
||||||
|
if index(g:go_fold_enable, 'package_comment') == -1
|
||||||
|
let s:fold_package_comment = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Disabled by default.
|
||||||
|
if index(g:go_fold_enable, 'comment') > -1
|
||||||
|
let s:fold_comment = 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
syn case match
|
syn case match
|
||||||
|
|
||||||
syn keyword goDirective package import
|
syn keyword goPackage package
|
||||||
syn keyword goDeclaration var const
|
syn keyword goImport import contained
|
||||||
|
syn keyword goVar var contained
|
||||||
|
syn keyword goConst const contained
|
||||||
|
|
||||||
hi def link goDirective Statement
|
hi def link goPackage Statement
|
||||||
|
hi def link goImport Statement
|
||||||
|
hi def link goVar Keyword
|
||||||
|
hi def link goConst Keyword
|
||||||
hi def link goDeclaration Keyword
|
hi def link goDeclaration Keyword
|
||||||
|
|
||||||
" Keywords within functions
|
" Keywords within functions
|
||||||
@@ -137,8 +154,14 @@ hi def link goPredefinedIdentifiers goBoolean
|
|||||||
" Comments; their contents
|
" Comments; their contents
|
||||||
syn keyword goTodo contained TODO FIXME XXX BUG
|
syn keyword goTodo contained TODO FIXME XXX BUG
|
||||||
syn cluster goCommentGroup contains=goTodo
|
syn cluster goCommentGroup contains=goTodo
|
||||||
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell
|
|
||||||
syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell
|
syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell
|
||||||
|
if s:fold_comment
|
||||||
|
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell fold
|
||||||
|
syn match goComment "\v(^\s*//.*\n)+" contains=goGenerate,@goCommentGroup,@Spell fold
|
||||||
|
else
|
||||||
|
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell
|
||||||
|
endif
|
||||||
|
|
||||||
hi def link goComment Comment
|
hi def link goComment Comment
|
||||||
hi def link goTodo Todo
|
hi def link goTodo Todo
|
||||||
@@ -191,8 +214,35 @@ syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=
|
|||||||
hi def link goCharacter Character
|
hi def link goCharacter Character
|
||||||
|
|
||||||
" Regions
|
" Regions
|
||||||
syn region goBlock start="{" end="}" transparent fold
|
|
||||||
syn region goParen start='(' end=')' transparent
|
syn region goParen start='(' end=')' transparent
|
||||||
|
if s:fold_block
|
||||||
|
syn region goBlock start="{" end="}" transparent fold
|
||||||
|
else
|
||||||
|
syn region goBlock start="{" end="}" transparent
|
||||||
|
endif
|
||||||
|
|
||||||
|
" import
|
||||||
|
if s:fold_import
|
||||||
|
syn region goImport start='import (' end=')' transparent fold contains=goImport,goString,goComment
|
||||||
|
else
|
||||||
|
syn region goImport start='import (' end=')' transparent contains=goImport,goString,goComment
|
||||||
|
endif
|
||||||
|
|
||||||
|
" var, const
|
||||||
|
if s:fold_varconst
|
||||||
|
syn region goVar start='var (' end='^\s*)$' transparent fold
|
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||||
|
syn region goConst start='const (' end='^\s*)$' transparent fold
|
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||||
|
else
|
||||||
|
syn region goVar start='var (' end='^\s*)$' transparent
|
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||||
|
syn region goConst start='const (' end='^\s*)$' transparent
|
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Single-line var, const, and import.
|
||||||
|
syn match goSingleDecl /\(import\|var\|const\) [^(]\@=/ contains=goImport,goVar,goConst
|
||||||
|
|
||||||
" Integers
|
" Integers
|
||||||
syn match goDecimalInt "\<-\=\d\+\%([Ee][-+]\=\d\+\)\=\>"
|
syn match goDecimalInt "\<-\=\d\+\%([Ee][-+]\=\d\+\)\=\>"
|
||||||
@@ -323,10 +373,10 @@ hi def link goField Identifier
|
|||||||
|
|
||||||
" Structs & Interfaces;
|
" Structs & Interfaces;
|
||||||
if g:go_highlight_types != 0
|
if g:go_highlight_types != 0
|
||||||
syn match goTypeConstructor /\<\w\+{/he=e-1
|
syn match goTypeConstructor /\<\w\+{\@=/
|
||||||
syn match goTypeDecl /\<type\>/ nextgroup=goTypeName skipwhite skipnl
|
syn match goTypeDecl /\<type\>/ nextgroup=goTypeName skipwhite skipnl
|
||||||
syn match goTypeName /\w\+/ contained nextgroup=goDeclType skipwhite skipnl
|
syn match goTypeName /\w\+/ contained nextgroup=goDeclType skipwhite skipnl
|
||||||
syn match goDeclType /\<interface\|struct\>/ skipwhite skipnl
|
syn match goDeclType /\<\(interface\|struct\)\>/ skipwhite skipnl
|
||||||
hi def link goReceiverType Type
|
hi def link goReceiverType Type
|
||||||
else
|
else
|
||||||
syn keyword goDeclType struct interface
|
syn keyword goDeclType struct interface
|
||||||
@@ -337,6 +387,18 @@ hi def link goTypeName Type
|
|||||||
hi def link goTypeDecl Keyword
|
hi def link goTypeDecl Keyword
|
||||||
hi def link goDeclType Keyword
|
hi def link goDeclType Keyword
|
||||||
|
|
||||||
|
" Variable Assignments
|
||||||
|
if g:go_highlight_variable_assignments != 0
|
||||||
|
syn match goVarAssign /\v[_.[:alnum:]]+(,\s*[_.[:alnum:]]+)*\ze(\s*([-^+|^\/%&]|\*|\<\<|\>\>|\&\^)?\=[^=])/
|
||||||
|
hi def link goVarAssign Special
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Variable Declarations
|
||||||
|
if g:go_highlight_variable_declarations != 0
|
||||||
|
syn match goVarDefs /\v\w+(,\s*\w+)*\ze(\s*:\=)/
|
||||||
|
hi def link goVarDefs Special
|
||||||
|
endif
|
||||||
|
|
||||||
" Build Constraints
|
" Build Constraints
|
||||||
if g:go_highlight_build_constraints != 0
|
if g:go_highlight_build_constraints != 0
|
||||||
syn match goBuildKeyword display contained "+build"
|
syn match goBuildKeyword display contained "+build"
|
||||||
@@ -358,15 +420,22 @@ if g:go_highlight_build_constraints != 0
|
|||||||
hi def link goBuildCommentStart Comment
|
hi def link goBuildCommentStart Comment
|
||||||
hi def link goBuildDirectives Type
|
hi def link goBuildDirectives Type
|
||||||
hi def link goBuildKeyword PreProc
|
hi def link goBuildKeyword PreProc
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:go_highlight_build_constraints != 0 || s:fold_package_comment
|
||||||
" One or more line comments that are followed immediately by a "package"
|
" One or more line comments that are followed immediately by a "package"
|
||||||
" declaration are treated like package documentation, so these must be
|
" declaration are treated like package documentation, so these must be
|
||||||
" matched as comments to avoid looking like working build constraints.
|
" matched as comments to avoid looking like working build constraints.
|
||||||
" The he, me, and re options let the "package" itself be highlighted by
|
" The he, me, and re options let the "package" itself be highlighted by
|
||||||
" the usual rules.
|
" the usual rules.
|
||||||
syn region goPackageComment start=/\v(\/\/.*\n)+\s*package/
|
exe 'syn region goPackageComment start=/\v(\/\/.*\n)+\s*package/'
|
||||||
\ end=/\v\n\s*package/he=e-7,me=e-7,re=e-7
|
\ . ' end=/\v\n\s*package/he=e-7,me=e-7,re=e-7'
|
||||||
\ contains=@goCommentGroup,@Spell
|
\ . ' contains=@goCommentGroup,@Spell'
|
||||||
|
\ . (s:fold_package_comment ? ' fold' : '')
|
||||||
|
exe 'syn region goPackageComment start=/\v\/\*.*\n(.*\n)*\s*\*\/\npackage/'
|
||||||
|
\ . ' end=/\v\n\s*package/he=e-7,me=e-7,re=e-7'
|
||||||
|
\ . ' contains=@goCommentGroup,@Spell'
|
||||||
|
\ . (s:fold_package_comment ? ' fold' : '')
|
||||||
hi def link goPackageComment Comment
|
hi def link goPackageComment Comment
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ if exists("b:current_syntax")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !exists("main_syntax")
|
if !exists("g:main_syntax")
|
||||||
let main_syntax = 'html'
|
let g:main_syntax = 'html'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
runtime! syntax/gotexttmpl.vim
|
runtime! syntax/gotexttmpl.vim
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
|
||||||
|
|
||||||
" Vim syntax file
|
|
||||||
" Language: GraphQL
|
|
||||||
" Maintainer: Jon Parise <jon@indelible.org>
|
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
syn match graphqlComment "#.*$" contains=@Spell
|
|
||||||
|
|
||||||
syn match graphqlOperator "="
|
|
||||||
syn match graphqlOperator "!"
|
|
||||||
syn match graphqlOperator "|"
|
|
||||||
syn match graphqlOperator "\M..."
|
|
||||||
|
|
||||||
syn keyword graphqlBoolean true false
|
|
||||||
syn keyword graphqlNull null
|
|
||||||
syn match graphqlNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>"
|
|
||||||
syn region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+
|
|
||||||
|
|
||||||
syn keyword graphqlStructure enum scalar type union nextgroup=graphqlType skipwhite
|
|
||||||
syn keyword graphqlStructure input interface subscription nextgroup=graphqlType skipwhite
|
|
||||||
syn keyword graphqlStructure implements on nextgroup=graphqlType skipwhite
|
|
||||||
syn keyword graphqlStructure query mutation fragment nextgroup=graphqlIdentifier skipwhite
|
|
||||||
syn keyword graphqlStructure directive nextgroup=graphqlDirective skipwhite
|
|
||||||
syn keyword graphqlStructure extend nextgroup=graphqlStructure skipwhite
|
|
||||||
|
|
||||||
syn match graphqlDirective "\<@\h\w*\>" display
|
|
||||||
syn match graphqlVariable "\<\$\h\w*\>" display
|
|
||||||
|
|
||||||
syn match graphqlIdentifier "\<\h\w*\>" display contained
|
|
||||||
syn match graphqlType "\<_*\u\w*\>" display contained
|
|
||||||
syn match graphqlConstant "\<[A-Z_]\+\>" display contained
|
|
||||||
|
|
||||||
syn keyword graphqlMetaFields __schema __type __typename
|
|
||||||
|
|
||||||
syn region graphqlFold matchgroup=graphqlBraces start="{" end=/}\(\_s\+\ze\("\|{\)\)\@!/ transparent fold contains=ALLBUT,graphqlStructure
|
|
||||||
syn region graphqlList matchgroup=graphqlBraces start="\[" end=/]\(\_s\+\ze"\)\@!/ transparent contains=ALLBUT,graphqlDirective,graphqlStructure
|
|
||||||
|
|
||||||
hi def link graphqlComment Comment
|
|
||||||
hi def link graphqlOperator Operator
|
|
||||||
|
|
||||||
hi def link graphqlBraces Delimiter
|
|
||||||
|
|
||||||
hi def link graphqlBoolean Boolean
|
|
||||||
hi def link graphqlNull Keyword
|
|
||||||
hi def link graphqlNumber Number
|
|
||||||
hi def link graphqlString String
|
|
||||||
|
|
||||||
hi def link graphqlConstant Constant
|
|
||||||
hi def link graphqlDirective PreProc
|
|
||||||
hi def link graphqlIdentifier Identifier
|
|
||||||
hi def link graphqlMetaFields Special
|
|
||||||
hi def link graphqlStructure Structure
|
|
||||||
hi def link graphqlType Type
|
|
||||||
hi def link graphqlVariable Identifier
|
|
||||||
|
|
||||||
syn sync minlines=500
|
|
||||||
|
|
||||||
let b:current_syntax = "graphql"
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -20,14 +20,14 @@ endif
|
|||||||
|
|
||||||
syn spell notoplevel
|
syn spell notoplevel
|
||||||
syn match haskellRecordField contained containedin=haskellBlock
|
syn match haskellRecordField contained containedin=haskellBlock
|
||||||
\ "[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\s"
|
\ "[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\_s"
|
||||||
\ contains=
|
\ contains=
|
||||||
\ haskellIdentifier,
|
\ haskellIdentifier,
|
||||||
\ haskellOperators,
|
\ haskellOperators,
|
||||||
\ haskellSeparator,
|
\ haskellSeparator,
|
||||||
\ haskellParens
|
\ haskellParens
|
||||||
syn match haskellTypeSig
|
syn match haskellTypeSig
|
||||||
\ "^\s*\(where\s\+\|let\s\+\|default\s\+\)\?[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\s"
|
\ "^\s*\(where\s\+\|let\s\+\|default\s\+\)\?[_a-z][a-zA-Z0-9_']*#\?\(,\s*[_a-z][a-zA-Z0-9_']*#\?\)*\_s\+::\_s"
|
||||||
\ contains=
|
\ contains=
|
||||||
\ haskellWhere,
|
\ haskellWhere,
|
||||||
\ haskellLet,
|
\ haskellLet,
|
||||||
@@ -99,6 +99,7 @@ syn region haskellBlockComment start="{-" end="-}"
|
|||||||
\ haskellTodo,
|
\ haskellTodo,
|
||||||
\ @Spell
|
\ @Spell
|
||||||
syn region haskellPragma start="{-#" end="#-}"
|
syn region haskellPragma start="{-#" end="#-}"
|
||||||
|
syn region haskellLiquid start="{-@" end="@-}"
|
||||||
syn match haskellPreProc "^#.*$"
|
syn match haskellPreProc "^#.*$"
|
||||||
syn keyword haskellTodo TODO FIXME contained
|
syn keyword haskellTodo TODO FIXME contained
|
||||||
" Treat a shebang line at the start of the file as a comment
|
" Treat a shebang line at the start of the file as a comment
|
||||||
@@ -147,6 +148,7 @@ highlight def link haskellShebang Comment
|
|||||||
highlight def link haskellLineComment Comment
|
highlight def link haskellLineComment Comment
|
||||||
highlight def link haskellBlockComment Comment
|
highlight def link haskellBlockComment Comment
|
||||||
highlight def link haskellPragma SpecialComment
|
highlight def link haskellPragma SpecialComment
|
||||||
|
highlight def link haskellLiquid SpecialComment
|
||||||
highlight def link haskellString String
|
highlight def link haskellString String
|
||||||
highlight def link haskellChar String
|
highlight def link haskellChar String
|
||||||
highlight def link haskellBacktick Operator
|
highlight def link haskellBacktick Operator
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ syn keyword htmlArg contained form autocomplete autofocus list min max step
|
|||||||
syn keyword htmlArg contained formaction autofocus formenctype formmethod formtarget formnovalidate
|
syn keyword htmlArg contained formaction autofocus formenctype formmethod formtarget formnovalidate
|
||||||
syn keyword htmlArg contained required placeholder pattern
|
syn keyword htmlArg contained required placeholder pattern
|
||||||
" <command>, <details>, <time>
|
" <command>, <details>, <time>
|
||||||
syn keyword htmlArg contained label icon open datetime pubdate
|
syn keyword htmlArg contained label icon open datetime-local pubdate
|
||||||
" <script>
|
" <script>
|
||||||
syn keyword htmlArg contained async
|
syn keyword htmlArg contained async
|
||||||
" <content>
|
" <content>
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ syn match i3NoStartupId '--no-startup-id' contained
|
|||||||
syn keyword i3WsSpecialParam next prev next_on_output prev_on_output back_and_forth current number
|
syn keyword i3WsSpecialParam next prev next_on_output prev_on_output back_and_forth current number
|
||||||
syn keyword i3BordersSpecialParam none vertical horizontal both
|
syn keyword i3BordersSpecialParam none vertical horizontal both
|
||||||
syn keyword i3ModeParam dock hide invisible skipwhite
|
syn keyword i3ModeParam dock hide invisible skipwhite
|
||||||
|
syn keyword i3GapsCommand gaps smart_gaps smart_borders
|
||||||
|
syn keyword i3GapsParam inner outer current all set plus minus no_gaps
|
||||||
|
|
||||||
" these are not keywords but we add them for consistency
|
" these are not keywords but we add them for consistency
|
||||||
syn keyword i3PseudoParam no false inactive
|
syn keyword i3PseudoParam no false inactive
|
||||||
@@ -99,6 +101,7 @@ highlight link i3ColorLast Constant
|
|||||||
highlight link i3WsSpecialParam Constant
|
highlight link i3WsSpecialParam Constant
|
||||||
highlight link i3BordersSpecialParam Constant
|
highlight link i3BordersSpecialParam Constant
|
||||||
highlight link i3ModeParam Constant
|
highlight link i3ModeParam Constant
|
||||||
|
highlight link i3GapsParam Constant
|
||||||
|
|
||||||
highlight link i3Var Identifier
|
highlight link i3Var Identifier
|
||||||
highlight link i3SetVar Identifier
|
highlight link i3SetVar Identifier
|
||||||
@@ -115,6 +118,7 @@ highlight link i3Font String
|
|||||||
highlight link i3ExecKeyword Keyword
|
highlight link i3ExecKeyword Keyword
|
||||||
highlight link i3Command Keyword
|
highlight link i3Command Keyword
|
||||||
highlight link i3WsKeyword Keyword
|
highlight link i3WsKeyword Keyword
|
||||||
|
highlight link i3GapsCommand Keyword
|
||||||
|
|
||||||
highlight link i3ColorDef1 Define
|
highlight link i3ColorDef1 Define
|
||||||
highlight link i3ColorDef3 Define
|
highlight link i3ColorDef3 Define
|
||||||
|
|||||||
@@ -26,71 +26,64 @@ syntax sync fromstart
|
|||||||
" syntax case ignore
|
" syntax case ignore
|
||||||
syntax case match
|
syntax case match
|
||||||
|
|
||||||
syntax match jsNoise /[:,\;]\{1}/
|
syntax match jsNoise /[:,;]/
|
||||||
syntax match jsNoise /[\.]\{1}/ skipwhite skipempty nextgroup=jsObjectProp,jsFuncCall,jsPrototype
|
syntax match jsNoise /\./ skipwhite skipempty nextgroup=jsObjectProp,jsFuncCall,jsPrototype,jsTaggedTemplate
|
||||||
syntax match jsObjectProp contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/
|
syntax match jsObjectProp contained /\<\K\k*/
|
||||||
syntax match jsFuncCall /\k\+\%(\s*(\)\@=/
|
syntax match jsFuncCall /\<\K\k*\ze\s*(/
|
||||||
syntax match jsParensError /[)}\]]/
|
syntax match jsParensError /[)}\]]/
|
||||||
|
|
||||||
" Program Keywords
|
" Program Keywords
|
||||||
syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray,jsVariableDef
|
syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray,jsVariableDef
|
||||||
syntax match jsVariableDef contained /\k\+/ skipwhite skipempty nextgroup=jsFlowDefinition
|
syntax match jsVariableDef contained /\<\K\k*/ skipwhite skipempty nextgroup=jsFlowDefinition
|
||||||
syntax keyword jsOperator delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression
|
syntax keyword jsOperator delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression
|
||||||
syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression
|
syntax match jsOperator "[-!|&+<>=%/*~^]" skipwhite skipempty nextgroup=@jsExpression
|
||||||
syntax match jsOperator /::/ skipwhite skipempty nextgroup=@jsExpression
|
syntax match jsOperator /::/ skipwhite skipempty nextgroup=@jsExpression
|
||||||
syntax keyword jsBooleanTrue true
|
syntax keyword jsBooleanTrue true
|
||||||
syntax keyword jsBooleanFalse false
|
syntax keyword jsBooleanFalse false
|
||||||
|
|
||||||
" Modules
|
" Modules
|
||||||
syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType
|
syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType
|
||||||
syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword
|
syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword,jsFlowTypeStatement
|
||||||
syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma
|
syntax match jsModuleKeyword contained /\<\K\k*/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma
|
||||||
syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression
|
syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression
|
||||||
syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma
|
syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma
|
||||||
syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom
|
syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom
|
||||||
syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup
|
syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup
|
||||||
syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString
|
syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString
|
||||||
syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup
|
syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup,jsFlowTypeKeyword
|
||||||
|
|
||||||
" Strings, Templates, Numbers
|
" Strings, Templates, Numbers
|
||||||
syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend
|
syntax region jsString start=+\z(["']\)+ skip=+\\\%(\z1\|$\)+ end=+\z1\|$+ contains=jsSpecial,@Spell extend
|
||||||
syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend
|
syntax region jsTemplateString start=+`+ skip=+\\`+ end=+`+ contains=jsTemplateExpression,jsSpecial,@Spell extend
|
||||||
syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateExpression,jsSpecial,@Spell extend
|
syntax match jsTaggedTemplate /\<\K\k*\ze`/ nextgroup=jsTemplateString
|
||||||
syntax match jsTaggedTemplate /\k\+\%(`\)\@=/ nextgroup=jsTemplateString
|
syntax match jsNumber /\c\<\%(\d\+\%(e[+-]\=\d\+\)\=\|0b[01]\+\|0o\o\+\|0x\x\+\)\>/
|
||||||
syntax match jsNumber /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/
|
|
||||||
syntax keyword jsNumber Infinity
|
syntax keyword jsNumber Infinity
|
||||||
syntax match jsFloat /\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/
|
syntax match jsFloat /\c\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%(e[+-]\=\d\+\)\=\>/
|
||||||
|
|
||||||
" Regular Expressions
|
" Regular Expressions
|
||||||
syntax match jsSpecial contained "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)"
|
syntax match jsSpecial contained "\v\\%(x\x\x|u%(\x{4}|\{\x{4,5}})|c\u|.)"
|
||||||
syntax region jsTemplateExpression contained matchgroup=jsTemplateBraces start=+${+ end=+}+ contains=@jsExpression keepend
|
syntax region jsTemplateExpression contained matchgroup=jsTemplateBraces start=+${+ end=+}+ contains=@jsExpression keepend
|
||||||
syntax region jsRegexpCharClass contained start=+\[+ skip=+\\.+ end=+\]+
|
syntax region jsRegexpCharClass contained start=+\[+ skip=+\\.+ end=+\]+ contains=jsSpecial
|
||||||
syntax match jsRegexpBoundary contained "\v%(\<@![\^$]|\\[bB])"
|
syntax match jsRegexpBoundary contained "\v\c[$^]|\\b"
|
||||||
syntax match jsRegexpBackRef contained "\v\\[1-9][0-9]*"
|
syntax match jsRegexpBackRef contained "\v\\[1-9]\d*"
|
||||||
syntax match jsRegexpQuantifier contained "\v\\@<!%([?*+]|\{\d+%(,|,\d+)?})\??"
|
syntax match jsRegexpQuantifier contained "\v[^\\]%([?*+]|\{\d+%(,\d*)?})\??"lc=1
|
||||||
syntax match jsRegexpOr contained "\v\<@!\|"
|
syntax match jsRegexpOr contained "|"
|
||||||
syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]"
|
syntax match jsRegexpMod contained "\v\(\?[:=!>]"lc=1
|
||||||
syntax region jsRegexpGroup contained start="\\\@<!(" skip="\\.\|\[\(\\.\|[^]]\)*\]" end="\\\@<!)" contains=jsRegexpCharClass,@jsRegexpSpecial keepend
|
syntax region jsRegexpGroup contained start="[^\\]("lc=1 skip="\\.\|\[\(\\.\|[^]]\+\)\]" end=")" contains=jsRegexpCharClass,@jsRegexpSpecial keepend
|
||||||
if v:version > 703 || v:version == 603 && has("patch1088")
|
syntax region jsRegexpString start=+\%(\%(\<return\|\<typeof\|\_[^)\]'"[:blank:][:alnum:]_$]\)\s*\)\@<=/\ze[^*/]+ skip=+\\.\|\[[^]]\{1,}\]+ end=+/[gimyus]\{,6}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend
|
||||||
syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimyu]\{,5}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend
|
|
||||||
else
|
|
||||||
syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimyu]\{,5}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend
|
|
||||||
endif
|
|
||||||
syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
|
syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
|
||||||
|
|
||||||
" Objects
|
" Objects
|
||||||
syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue
|
syntax match jsObjectKey contained /\<\K\k*\ze\s*:/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue
|
||||||
syntax match jsObjectColon contained /:/ skipwhite skipempty
|
syntax match jsObjectColon contained /:/ skipwhite skipempty
|
||||||
syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue
|
syntax region jsObjectKeyString contained start=+\z(["']\)+ skip=+\\\%(\z1\|$\)+ end=+\z1\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue
|
||||||
syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue
|
|
||||||
syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend
|
syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend
|
||||||
syntax match jsObjectSeparator contained /,/
|
syntax match jsObjectSeparator contained /,/
|
||||||
syntax region jsObjectValue contained matchgroup=jsNoise start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend
|
syntax region jsObjectValue contained matchgroup=jsNoise start=/:/ end=/[,}]\@=/ contains=@jsExpression extend
|
||||||
syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs
|
syntax match jsObjectFuncName contained /\<\K\k*\ze\_s*(/ skipwhite skipempty nextgroup=jsFuncArgs
|
||||||
syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/
|
syntax match jsFunctionKey contained /\<\K\k*\ze\s*:\s*function\>/
|
||||||
syntax match jsObjectMethodType contained /\%(get\|set\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName
|
syntax match jsObjectMethodType contained /\<[gs]et\ze\s\+\K\k*/ skipwhite skipempty nextgroup=jsObjectFuncName
|
||||||
syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue
|
syntax region jsObjectStringKey contained start=+\z(["']\)+ skip=+\\\%(\z1\|$\)+ end=+\z1\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue
|
||||||
syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue
|
|
||||||
|
|
||||||
exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '')
|
exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '')
|
||||||
exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '').' skipwhite skipempty nextgroup=@jsExpression'
|
exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '').' skipwhite skipempty nextgroup=@jsExpression'
|
||||||
@@ -101,25 +94,25 @@ exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal
|
|||||||
exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '')
|
exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '')
|
||||||
|
|
||||||
" Statement Keywords
|
" Statement Keywords
|
||||||
syntax match jsBlockLabel /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\s*::\@!/ contains=jsNoise skipwhite skipempty nextgroup=jsBlock
|
syntax match jsBlockLabel /\<\K\k*\s*::\@!/ contains=jsNoise skipwhite skipempty nextgroup=jsBlock
|
||||||
syntax match jsBlockLabelKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*\%(;\|\n\)\)\@=/
|
syntax match jsBlockLabelKey contained /\<\K\k*\ze\s*\_[;]/
|
||||||
syntax keyword jsStatement contained with yield debugger
|
syntax keyword jsStatement contained with yield debugger
|
||||||
syntax keyword jsStatement contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey
|
syntax keyword jsStatement contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey
|
||||||
syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse
|
syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse
|
||||||
syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock
|
syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock
|
||||||
syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch
|
syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch
|
||||||
syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait
|
syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait
|
||||||
syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock
|
syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock
|
||||||
syntax region jsSwitchCase contained matchgroup=jsLabel start=/\<\%(case\|default\)\>/ end=/:\@=/ contains=@jsExpression,jsLabel skipwhite skipempty nextgroup=jsSwitchColon keepend
|
syntax region jsSwitchCase contained matchgroup=jsLabel start=/\<\%(case\|default\)\>/ end=/:\@=/ contains=@jsExpression,jsLabel skipwhite skipempty nextgroup=jsSwitchColon keepend
|
||||||
syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock
|
syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock
|
||||||
syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsFinallyBlock
|
syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsFinallyBlock
|
||||||
syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch
|
syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch
|
||||||
syntax keyword jsException throw
|
syntax keyword jsException throw
|
||||||
syntax keyword jsAsyncKeyword async await
|
syntax keyword jsAsyncKeyword async await
|
||||||
syntax match jsSwitchColon contained /::\@!/ skipwhite skipempty nextgroup=jsSwitchBlock
|
syntax match jsSwitchColon contained /::\@!/ skipwhite skipempty nextgroup=jsSwitchBlock
|
||||||
|
|
||||||
" Keywords
|
" Keywords
|
||||||
syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat fetch
|
syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set WeakSet RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat fetch
|
||||||
syntax keyword jsGlobalNodeObjects module exports global process __dirname __filename
|
syntax keyword jsGlobalNodeObjects module exports global process __dirname __filename
|
||||||
syntax match jsGlobalNodeObjects /\<require\>/ containedin=jsFuncCall
|
syntax match jsGlobalNodeObjects /\<require\>/ containedin=jsFuncCall
|
||||||
syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError
|
syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError
|
||||||
@@ -143,7 +136,7 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus
|
|||||||
|
|
||||||
" Code blocks
|
" Code blocks
|
||||||
syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold
|
syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold
|
||||||
syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold
|
syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsExpression extend fold nextgroup=jsFlowDefinition
|
||||||
syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll extend fold
|
syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll extend fold
|
||||||
syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock extend fold
|
syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock extend fold
|
||||||
syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentRepeat,jsRepeatBlock extend fold
|
syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentRepeat,jsRepeatBlock extend fold
|
||||||
@@ -161,71 +154,71 @@ syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces s
|
|||||||
syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold
|
syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold
|
||||||
syntax region jsObject contained matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold
|
syntax region jsObject contained matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold
|
||||||
syntax region jsBlock matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsSpreadExpression extend fold
|
syntax region jsBlock matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsSpreadExpression extend fold
|
||||||
syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment skipwhite skipempty nextgroup=jsFrom
|
syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment,jsFlowTypeKeyword skipwhite skipempty nextgroup=jsFrom fold
|
||||||
syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression
|
syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression
|
||||||
syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/
|
syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/
|
||||||
syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression
|
syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|}\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression
|
||||||
|
syntax match jsOperator /?\.\ze\_D/
|
||||||
|
|
||||||
syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs
|
syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs,jsFlowFunctionGroup
|
||||||
syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup
|
syntax match jsFuncName contained /\<\K\k*/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup
|
||||||
syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend
|
syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend
|
||||||
syntax match jsFuncArgCommas contained ','
|
syntax match jsFuncArgCommas contained ','
|
||||||
syntax keyword jsArguments contained arguments
|
syntax keyword jsArguments contained arguments
|
||||||
syntax keyword jsForAwait contained await skipwhite skipempty nextgroup=jsParenRepeat
|
syntax keyword jsForAwait contained await skipwhite skipempty nextgroup=jsParenRepeat
|
||||||
|
|
||||||
" Matches a single keyword argument with no parens
|
" Matches a single keyword argument with no parens
|
||||||
syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend
|
syntax match jsArrowFuncArgs /\<\K\k*\ze\s*=>/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend
|
||||||
" Matches a series of arguments surrounded in parens
|
" Matches a series of arguments surrounded in parens
|
||||||
syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend
|
syntax match jsArrowFuncArgs /([^()]*)\ze\s*=>/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend
|
||||||
|
|
||||||
exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '')
|
exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs,jsFlowFunctionGroup skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '')
|
||||||
exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '')
|
exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '')
|
||||||
exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '').(' contains=jsArrowFuncArgs')
|
exe 'syntax match jsArrowFunction /()\ze\s*=>/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '')
|
||||||
exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '')
|
exe 'syntax match jsArrowFunction /_\ze\s*=>/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '')
|
||||||
|
|
||||||
" Classes
|
" Classes
|
||||||
syntax keyword jsClassKeyword contained class
|
syntax keyword jsClassKeyword contained class
|
||||||
syntax keyword jsExtendsKeyword contained extends skipwhite skipempty nextgroup=@jsExpression
|
syntax keyword jsExtendsKeyword contained extends skipwhite skipempty nextgroup=@jsExpression
|
||||||
syntax match jsClassNoise contained /\./
|
syntax match jsClassNoise contained /\./
|
||||||
syntax match jsClassMethodType contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty
|
syntax match jsClassMethodType contained /\<\%([gs]et\|static\)\ze\s\+\K\k*/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty
|
||||||
syntax region jsClassDefinition start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup
|
syntax region jsClassDefinition start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression,jsFlowClassGroup skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup
|
||||||
syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue
|
syntax match jsClassProperty contained /\<\K\k*\ze\s*=/ skipwhite skipempty nextgroup=jsClassValue,jsFlowClassDef
|
||||||
syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression
|
syntax region jsClassValue contained start=/=/ end=/\_[;}]\@=/ contains=@jsExpression
|
||||||
syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend
|
syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend
|
||||||
syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs
|
syntax match jsClassFuncName contained /\<\K\k*\ze\s*(/ skipwhite skipempty nextgroup=jsFuncArgs
|
||||||
syntax region jsClassStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs
|
syntax region jsClassStringKey contained start=+\z(["']\)+ skip=+\\\%(\z1\|$\)+ end=+\z1\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs
|
||||||
syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs
|
|
||||||
|
|
||||||
" Destructuring
|
" Destructuring
|
||||||
syntax match jsDestructuringPropertyValue contained /\<[0-9a-zA-Z_$]*\>/
|
syntax match jsDestructuringPropertyValue contained /\k\+/
|
||||||
syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue
|
syntax match jsDestructuringProperty contained /\k\+\ze\s*=/ skipwhite skipempty nextgroup=jsDestructuringValue
|
||||||
syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment
|
syntax match jsDestructuringAssignment contained /\k\+\ze\s*:/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment
|
||||||
syntax region jsDestructuringValue contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend
|
syntax region jsDestructuringValue contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend
|
||||||
syntax region jsDestructuringValueAssignment contained start=/:/ end=/[,}=]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise skipwhite skipempty nextgroup=jsDestructuringValue extend
|
syntax region jsDestructuringValueAssignment contained start=/:/ end=/[,}=]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise skipwhite skipempty nextgroup=jsDestructuringValue extend
|
||||||
syntax match jsDestructuringNoise contained /[,\[\]]/
|
syntax match jsDestructuringNoise contained /[,[\]]/
|
||||||
syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold
|
syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold
|
||||||
|
|
||||||
" Comments
|
" Comments
|
||||||
syntax keyword jsCommentTodo contained TODO FIXME XXX TBD
|
syntax keyword jsCommentTodo contained TODO FIXME XXX TBD
|
||||||
syntax region jsComment start=/\/\// end=/$/ contains=jsCommentTodo,@Spell extend keepend
|
syntax region jsComment start=+//+ end=/$/ contains=jsCommentTodo,@Spell extend keepend
|
||||||
syntax region jsComment start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell fold extend keepend
|
syntax region jsComment start=+/\*+ end=+\*/+ contains=jsCommentTodo,@Spell fold extend keepend
|
||||||
syntax region jsEnvComment start=/\%^#!/ end=/$/ display
|
syntax region jsEnvComment start=/\%^#!/ end=/$/ display
|
||||||
|
|
||||||
" Specialized Comments - These are special comment regexes that are used in
|
" Specialized Comments - These are special comment regexes that are used in
|
||||||
" odd places that maintain the proper nextgroup functionality. It sucks we
|
" odd places that maintain the proper nextgroup functionality. It sucks we
|
||||||
" can't make jsComment a skippable type of group for nextgroup
|
" can't make jsComment a skippable type of group for nextgroup
|
||||||
syntax region jsCommentFunction contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend
|
syntax region jsCommentFunction contained start=+//+ end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend
|
||||||
syntax region jsCommentFunction contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend
|
syntax region jsCommentFunction contained start=+/\*+ end=+\*/+ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend
|
||||||
syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend
|
syntax region jsCommentClass contained start=+//+ end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend
|
||||||
syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend
|
syntax region jsCommentClass contained start=+/\*+ end=+\*/+ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend
|
||||||
syntax region jsCommentIfElse contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsIfElseBlock extend keepend
|
syntax region jsCommentIfElse contained start=+//+ end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsIfElseBlock extend keepend
|
||||||
syntax region jsCommentIfElse contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsIfElseBlock fold extend keepend
|
syntax region jsCommentIfElse contained start=+/\*+ end=+\*/+ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsIfElseBlock fold extend keepend
|
||||||
syntax region jsCommentRepeat contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsRepeatBlock extend keepend
|
syntax region jsCommentRepeat contained start=+//+ end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsRepeatBlock extend keepend
|
||||||
syntax region jsCommentRepeat contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsRepeatBlock fold extend keepend
|
syntax region jsCommentRepeat contained start=+/\*+ end=+\*/+ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsRepeatBlock fold extend keepend
|
||||||
|
|
||||||
" Decorators
|
" Decorators
|
||||||
syntax match jsDecorator /^\s*@/ nextgroup=jsDecoratorFunction
|
syntax match jsDecorator /^\s*@/ nextgroup=jsDecoratorFunction
|
||||||
syntax match jsDecoratorFunction contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator
|
syntax match jsDecoratorFunction contained /\h[a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator
|
||||||
|
|
||||||
if exists("javascript_plugin_jsdoc")
|
if exists("javascript_plugin_jsdoc")
|
||||||
runtime extras/jsdoc.vim
|
runtime extras/jsdoc.vim
|
||||||
@@ -239,8 +232,8 @@ if exists("javascript_plugin_flow")
|
|||||||
runtime extras/flow.vim
|
runtime extras/flow.vim
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo,jsForAwait
|
syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo,jsForAwait,jsAsyncKeyword,jsStatement
|
||||||
syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,jsBlockLabel
|
syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsException,jsTry,jsNoise,jsBlockLabel
|
||||||
|
|
||||||
" Define the default highlighting.
|
" Define the default highlighting.
|
||||||
" For version 5.7 and earlier: only when not done already
|
" For version 5.7 and earlier: only when not done already
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'kotlin') == -1
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: Kotlin
|
" Language: Kotlin
|
||||||
" Maintainer: Alexander Udalov
|
" Maintainer: Alexander Udalov
|
||||||
" Latest Revision: 29 December 2016
|
" Latest Revision: 18 September 2017
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
if exists("b:current_syntax")
|
||||||
finish
|
finish
|
||||||
@@ -21,7 +21,7 @@ syn keyword ktException try catch finally throw
|
|||||||
syn keyword ktInclude import package
|
syn keyword ktInclude import package
|
||||||
|
|
||||||
syn keyword ktType Any Boolean Byte Char Double Float Int Long Nothing Short Unit
|
syn keyword ktType Any Boolean Byte Char Double Float Int Long Nothing Short Unit
|
||||||
syn keyword ktModifier annotation companion enum inner internal private protected public abstract final open override sealed vararg dynamic header impl
|
syn keyword ktModifier annotation companion enum inner internal private protected public abstract final open override sealed vararg dynamic header impl expect actual
|
||||||
syn keyword ktStructure class object interface typealias fun val var constructor init
|
syn keyword ktStructure class object interface typealias fun val var constructor init
|
||||||
|
|
||||||
syn keyword ktReservedKeyword typeof
|
syn keyword ktReservedKeyword typeof
|
||||||
@@ -51,9 +51,9 @@ syn match ktLabel "\v\w+\@"
|
|||||||
syn match ktSimpleInterpolation "\v\$\h\w*" contained
|
syn match ktSimpleInterpolation "\v\$\h\w*" contained
|
||||||
syn region ktComplexInterpolation matchgroup=ktComplexInterpolationBrace start="\v\$\{" end="\v\}" contains=ALLBUT,ktSimpleInterpolation
|
syn region ktComplexInterpolation matchgroup=ktComplexInterpolationBrace start="\v\$\{" end="\v\}" contains=ALLBUT,ktSimpleInterpolation
|
||||||
|
|
||||||
syn match ktNumber "\v<\d+[LFf]?"
|
syn match ktNumber "\v<\d+[_[:digit:]]*[LFf]?"
|
||||||
syn match ktNumber "\v<0[Xx]\x+L?"
|
syn match ktNumber "\v<0[Xx]\x+[_[:xdigit:]]*L?"
|
||||||
syn match ktNumber "\v<0[Bb]\d+L?"
|
syn match ktNumber "\v<0[Bb][01]+[_01]*L?"
|
||||||
syn match ktFloat "\v<\d*(\d[eE][-+]?\d+|\.\d+([eE][-+]?\d+)?)[Ff]?"
|
syn match ktFloat "\v<\d*(\d[eE][-+]?\d+|\.\d+([eE][-+]?\d+)?)[Ff]?"
|
||||||
|
|
||||||
syn match ktEscapedName "\v`.*`"
|
syn match ktEscapedName "\v`.*`"
|
||||||
|
|||||||
@@ -21,16 +21,27 @@ elseif exists("b:current_syntax")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists("b:mako_outer_lang")
|
||||||
|
if exists("g:mako_default_outer_lang")
|
||||||
|
let b:mako_outer_lang = g:mako_default_outer_lang
|
||||||
|
else
|
||||||
|
let b:mako_outer_lang = "html"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
if !exists("main_syntax")
|
if !exists("main_syntax")
|
||||||
let main_syntax = "html"
|
let main_syntax = b:mako_outer_lang
|
||||||
endif
|
endif
|
||||||
|
|
||||||
"Source the html syntax file
|
"Source the outer syntax file
|
||||||
ru! syntax/html.vim
|
execute "ru! syntax/" . b:mako_outer_lang . ".vim"
|
||||||
unlet b:current_syntax
|
if exists("b:current_syntax")
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
" tell html.vim what syntax groups should take precedence (see :help html.vim)
|
if b:mako_outer_lang == "html"
|
||||||
syn cluster htmlPreproc add=makoLine,makoVariable,makoTag,makoDocComment,makoDefEnd,makoText,makoDelim,makoEnd,makoComment,makoEscape
|
" tell html.vim what syntax groups should take precedence (see :help html.vim)
|
||||||
|
syn cluster htmlPreproc add=makoLine,makoVariable,makoTag,makoDocComment,makoDefEnd,makoText,makoDelim,makoEnd,makoComment,makoEscape
|
||||||
|
endif
|
||||||
|
|
||||||
"Put the python syntax file in @pythonTop
|
"Put the python syntax file in @pythonTop
|
||||||
syn include @pythonTop syntax/python.vim
|
syn include @pythonTop syntax/python.vim
|
||||||
@@ -91,6 +102,6 @@ if version >= 508 || !exists("did_mako_syn_inits")
|
|||||||
delc HiLink
|
delc HiLink
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:current_syntax = "html"
|
let b:current_syntax = b:mako_outer_lang
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -13,12 +13,8 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'perl') == -1
|
|||||||
" - Fix <%text> blocks to show HTML tags but ignore Mason tags.
|
" - Fix <%text> blocks to show HTML tags but ignore Mason tags.
|
||||||
"
|
"
|
||||||
|
|
||||||
" Clear previous syntax settings unless this is v6 or above, in which case just
|
" quit when a syntax file was already loaded
|
||||||
" exit without doing anything.
|
if exists("b:current_syntax")
|
||||||
"
|
|
||||||
if version < 600
|
|
||||||
syn clear
|
|
||||||
elseif exists("b:current_syntax")
|
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -30,26 +26,16 @@ endif
|
|||||||
|
|
||||||
" First pull in the HTML syntax.
|
" First pull in the HTML syntax.
|
||||||
"
|
"
|
||||||
if version < 600
|
runtime! syntax/html.vim
|
||||||
so <sfile>:p:h/html.vim
|
unlet b:current_syntax
|
||||||
else
|
|
||||||
runtime! syntax/html.vim
|
|
||||||
unlet b:current_syntax
|
|
||||||
endif
|
|
||||||
|
|
||||||
syn cluster htmlPreproc add=@masonTop
|
syn cluster htmlPreproc add=@masonTop
|
||||||
|
|
||||||
" Now pull in the Perl syntax.
|
" Now pull in the Perl syntax.
|
||||||
"
|
"
|
||||||
if version < 600
|
syn include @perlTop syntax/perl.vim
|
||||||
syn include @perlTop <sfile>:p:h/perl.vim
|
unlet b:current_syntax
|
||||||
unlet b:current_syntax
|
syn include @podTop syntax/pod.vim
|
||||||
syn include @podTop <sfile>:p:h/pod.vim
|
|
||||||
else
|
|
||||||
syn include @perlTop syntax/perl.vim
|
|
||||||
unlet b:current_syntax
|
|
||||||
syn include @podTop syntax/pod.vim
|
|
||||||
endif
|
|
||||||
|
|
||||||
" It's hard to reduce down to the correct sub-set of Perl to highlight in some
|
" It's hard to reduce down to the correct sub-set of Perl to highlight in some
|
||||||
" of these cases so I've taken the safe option of just using perlTop in all of
|
" of these cases so I've taken the safe option of just using perlTop in all of
|
||||||
@@ -88,21 +74,9 @@ syn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,
|
|||||||
|
|
||||||
" Set up default highlighting. Almost all of this is done in the included
|
" Set up default highlighting. Almost all of this is done in the included
|
||||||
" syntax files.
|
" syntax files.
|
||||||
"
|
hi def link masonDoc Comment
|
||||||
if version >= 508 || !exists("did_mason_syn_inits")
|
hi def link masonPod Comment
|
||||||
if version < 508
|
hi def link masonPerlComment perlComment
|
||||||
let did_mason_syn_inits = 1
|
|
||||||
com -nargs=+ HiLink hi link <args>
|
|
||||||
else
|
|
||||||
com -nargs=+ HiLink hi def link <args>
|
|
||||||
endif
|
|
||||||
|
|
||||||
HiLink masonDoc Comment
|
|
||||||
HiLink masonPod Comment
|
|
||||||
HiLink masonPerlComment perlComment
|
|
||||||
|
|
||||||
delc HiLink
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:current_syntax = "mason"
|
let b:current_syntax = "mason"
|
||||||
|
|
||||||
|
|||||||
@@ -707,8 +707,10 @@ if !exists('g:loaded_sslsecure')
|
|||||||
syn match ngxSSLCipherInsecure '[^!]\zsALL'
|
syn match ngxSSLCipherInsecure '[^!]\zsALL'
|
||||||
syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFALL'
|
syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFALL'
|
||||||
|
|
||||||
syn match ngxSSLCipherInsecure '[^!]\zsSHA\ze\D' " Match SHA1 without matching SHA256+
|
" SHA ciphers are only used in HMAC with all known OpenSSL/ LibreSSL cipher suites and MAC
|
||||||
syn match ngxSSLCipherInsecure '[^!]\zsSHA1'
|
" usage is still considered safe
|
||||||
|
" syn match ngxSSLCipherInsecure '[^!]\zsSHA\ze\D' " Match SHA1 without matching SHA256+
|
||||||
|
" syn match ngxSSLCipherInsecure '[^!]\zsSHA1'
|
||||||
syn match ngxSSLCipherInsecure '[^!]\zsMD5'
|
syn match ngxSSLCipherInsecure '[^!]\zsMD5'
|
||||||
syn match ngxSSLCipherInsecure '[^!]\zsRC2'
|
syn match ngxSSLCipherInsecure '[^!]\zsRC2'
|
||||||
syn match ngxSSLCipherInsecure '[^!]\zsRC4'
|
syn match ngxSSLCipherInsecure '[^!]\zsRC4'
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user