Compare commits

...

23 Commits

Author SHA1 Message Date
Adam Stankiewicz
30c87b73de Automatically set vb format, closes #243 2017-11-19 21:51:43 +01:00
Adam Stankiewicz
1713d35f06 Add cmake support, closes #245 2017-11-19 21:46:44 +01:00
Adam Stankiewicz
5ddfa1ac28 Remove openscad, fixes #249 2017-11-19 21:44:15 +01:00
Adam Stankiewicz
dbe9bc927f Change nix provider, closes #244 2017-11-19 21:34:38 +01:00
Adam Stankiewicz
d219055bc8 Update 2017-11-19 21:27:05 +01:00
Adam Stankiewicz
0e9041f29a Update README.md 2017-11-16 18:47:04 +01:00
Adam Stankiewicz
a0b8a6e77f 3ms -> 17ms 2017-11-16 16:58:13 +01:00
Adam Stankiewicz
a61ab44810 Update README.md 2017-10-27 17:28:29 +02:00
Adam Stankiewicz
dd4b5cbdd6 fix typo 2017-10-19 22:37:39 +02:00
Adam Stankiewicz
27903c5b86 Revert inlining basic language pack 2017-09-28 22:18:09 +02:00
Adam Stankiewicz
d5e38fa97b Remove graphql syntax as it causes issues, closes #236 2017-09-27 22:09:06 +02:00
Adam Stankiewicz
7673a61990 Change elm provider, closes #224 2017-09-27 20:52:13 +02:00
Adam Stankiewicz
6a12aa87f4 Add jenkinsfile syntax supports, closes #225 2017-09-27 20:46:39 +02:00
Adam Stankiewicz
5b77877888 Add syntax files from upstream vim repository 2017-09-27 20:43:42 +02:00
Adam Stankiewicz
8148255ef1 Add vifm support, closes #213 2017-09-27 20:23:42 +02:00
Adam Stankiewicz
40ddf334c9 Add F# support, closes #219 2017-09-27 20:19:38 +02:00
Adam Stankiewicz
7e10428cd6 Add autohotkey syntax, closes #220 2017-09-27 20:14:30 +02:00
Adam Stankiewicz
6a4fe34e61 Change solidity provider, closes #227 2017-09-27 20:08:01 +02:00
Adam Stankiewicz
4cd5566b40 Add gmpl and openscan, closes #232, closes #233 2017-09-27 20:00:25 +02:00
Adam Stankiewicz
8b3418cab8 Update 2017-09-27 19:57:29 +02:00
Arthur Xavier
9bfde7574a Change repo for PureScript's syntax and indentation (#223) 2017-08-21 21:43:02 +02:00
Josh Glendenning
8eab5f5403 Replace instances of "joshglendenning" with "isobit" following GitHub username change (#216) 2017-06-12 14:20:41 +02:00
Adam Stankiewicz
d5b9c4ae84 Add racket support, #159 2017-05-17 11:46:19 +02:00
121 changed files with 6139 additions and 2449 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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.

View File

@@ -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

View File

@@ -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=+/>+

View File

@@ -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\+"

View File

@@ -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

View File

@@ -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:]

View File

@@ -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
View 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

View File

@@ -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
View 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
View 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

View File

@@ -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

View File

@@ -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
View 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

View File

@@ -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
View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -24,10 +24,10 @@ CompilerSet errorformat=
\%D(in\ %f), \%D(in\ %f),
\%\\s%#from\ %f:%l:%m, \%\\s%#from\ %f:%l:%m,
\%\\s%#from\ %f:%l:, \%\\s%#from\ %f:%l:,
\%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%.%#, \%\\s%##\ %f:%l:%m%\\&%.%#%\\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!,

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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>

View File

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

66
ftplugin/mail_vifm.vim Normal file
View 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

View File

@@ -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

View File

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

View File

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

View File

@@ -1,5 +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
View 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

View File

@@ -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')

View File

@@ -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
View File

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

View File

@@ -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
View 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
View 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
View 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
View 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
View 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
View 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

View File

@@ -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')

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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

View File

@@ -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 :

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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*).*$'

View File

@@ -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)

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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\|}\)'

View File

@@ -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<"

View File

@@ -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')

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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

View File

@@ -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

File diff suppressed because one or more lines are too long

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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

View File

@@ -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.*/

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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`.*`"

View File

@@ -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

View File

@@ -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"

View File

@@ -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