mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-09 03:53:52 -05:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd74d8b2b1 | ||
|
|
055f7710b6 | ||
|
|
33f610feb7 | ||
|
|
d4da7817ba | ||
|
|
f05b47874b | ||
|
|
d362dca9b3 | ||
|
|
1f34e0adcf | ||
|
|
1832acfbe7 | ||
|
|
a26134de3c | ||
|
|
e2404449e4 | ||
|
|
dc8b2f45de | ||
|
|
aa5502c32e | ||
|
|
e13e64d9c4 | ||
|
|
17a69ab565 | ||
|
|
da27f4c529 | ||
|
|
cdd0ef41a6 | ||
|
|
4be5fd3094 | ||
|
|
bde56bc8f7 | ||
|
|
d9b11ed072 | ||
|
|
565b8b8a2c | ||
|
|
9f13bb7354 | ||
|
|
7408b2a34a | ||
|
|
faf6999c44 | ||
|
|
e9fc23a0c1 | ||
|
|
3e0c887365 | ||
|
|
b4d7993e7e | ||
|
|
fb8c5fa8e9 | ||
|
|
ddc64d8db2 | ||
|
|
98f90bced5 | ||
|
|
cab6866e21 | ||
|
|
a7e2b8a700 |
24
README.md
24
README.md
@@ -1,4 +1,4 @@
|
|||||||
# vim-polyglot [![Build Status][travis-img-url]][travis-url] []()
|
# vim-polyglot [![Build Status][travis-img-url]][travis-url] []()
|
||||||
|
|
||||||
[travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.svg
|
[travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.svg
|
||||||
[travis-url]: https://travis-ci.org/sheerun/vim-polyglot
|
[travis-url]: https://travis-ci.org/sheerun/vim-polyglot
|
||||||
@@ -8,7 +8,7 @@ A collection of language packs for Vim.
|
|||||||
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
|
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
|
||||||
|
|
||||||
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
|
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
|
||||||
- It **installs and updates 100+ times faster** than 100+ packages it consists of.
|
- It **installs and updates 100+ times faster** than the <!--Package Count-->114<!--/Package Count--> packages it consists of.
|
||||||
- Solid syntax and indentation support (other features skipped). 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`).
|
||||||
@@ -42,9 +42,10 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
|
|
||||||
## Language packs
|
## Language packs
|
||||||
|
|
||||||
|
<!--Language Packs-->
|
||||||
- [ansible](https://github.com/pearofducks/ansible-vim) (syntax, indent, ftplugin)
|
- [ansible](https://github.com/pearofducks/ansible-vim) (syntax, indent, ftplugin)
|
||||||
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim) (syntax)
|
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim) (syntax)
|
||||||
- [applescript](https://github.com/vim-scripts/applescript.vim) (syntax)
|
- [applescript](https://github.com/mityu/vim-applescript) (syntax, indent)
|
||||||
- [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)
|
- [autohotkey](https://github.com/hnamikaw/vim-autohotkey) (indent)
|
||||||
@@ -68,6 +69,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [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)
|
||||||
|
- [ferm](https://github.com/vim-scripts/ferm.vim) (syntax)
|
||||||
- [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)
|
- [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)
|
||||||
@@ -75,9 +77,11 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [gmpl](https://github.com/maelvalais/gmpl.vim) (syntax)
|
- [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, indent, 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)
|
||||||
|
- [haproxy](https://github.com/CH-DanReif/haproxy.vim) (syntax)
|
||||||
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin)
|
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin)
|
||||||
- [haxe](https://github.com/yaymukund/vim-haxe) (syntax)
|
- [haxe](https://github.com/yaymukund/vim-haxe) (syntax)
|
||||||
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin)
|
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin)
|
||||||
@@ -101,7 +105,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/LnL7/vim-nix) (syntax, indent, ftplugin)
|
- [nix](https://github.com/LnL7/vim-nix) (syntax, indent, compiler, 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)
|
||||||
@@ -135,7 +139,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [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)
|
||||||
- [systemd](https://github.com/kurayama/systemd-vim-syntax) (syntax)
|
- [systemd](https://github.com/wgwoods/vim-systemd-syntax) (syntax)
|
||||||
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, ftplugin)
|
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, ftplugin)
|
||||||
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin)
|
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin)
|
||||||
- [thrift](https://github.com/solarnz/thrift.vim) (syntax)
|
- [thrift](https://github.com/solarnz/thrift.vim) (syntax)
|
||||||
@@ -153,6 +157,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
|
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
|
||||||
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin)
|
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin)
|
||||||
- [yard](https://github.com/sheerun/vim-yardoc) (syntax)
|
- [yard](https://github.com/sheerun/vim-yardoc) (syntax)
|
||||||
|
<!--/Language Packs-->
|
||||||
|
|
||||||
## Updating
|
## Updating
|
||||||
|
|
||||||
@@ -169,13 +174,18 @@ Individual language packs can be disabled by setting `g:polyglot_disabled` as fo
|
|||||||
let g:polyglot_disabled = ['css']
|
let g:polyglot_disabled = ['css']
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that disabiling languages won't make in general your vim startup any faster / slower (only for specific file type). Vim-polyglot is selection of language plugins that are loaded only on demand.
|
Note that disabling languages won't make in general your vim startup any faster / slower (only for specific file type). Vim-polyglot is selection of language plugins that are loaded only on demand.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Language packs are periodically updated using automated `build` script.
|
Language packs are periodically updated using automated `build` script.
|
||||||
|
|
||||||
Feel free to add your language, and send pull-request.
|
Feel free to add your language, and send pull-request. In your pull request, please include:
|
||||||
|
1. How you chose the particular repo from which to pull support for this language.
|
||||||
|
2. An updated https://github.com/sheerun/vim-polyglot/blob/master/build .
|
||||||
|
3. If at all possible, absolutely nothing else (in particular, please don't run `build` and include that in your PR).
|
||||||
|
|
||||||
|
The easier it is to validate that the new language won't do anything wacky, the faster it'll be merged. In particular, languages that utilize global plugins (loaded for every filetype), or plugins with dangerous features (like `call` based on the contents of a file being edited), will never be merged, as they will be slow or dangerous, respectively.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsx') == -1
|
|||||||
" modified from html.vim
|
" modified from html.vim
|
||||||
if exists("loaded_matchit")
|
if exists("loaded_matchit")
|
||||||
let b:match_ignorecase = 0
|
let b:match_ignorecase = 0
|
||||||
let b:match_words = '(:),\[:\],{:},<:>,' .
|
let s:jsx_match_words = '(:),\[:\],{:},<:>,' .
|
||||||
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(/\@<!>\|$\):<\@<=/\1>'
|
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(/\@<!>\|$\):<\@<=/\1>'
|
||||||
|
let b:match_words = exists('b:match_words')
|
||||||
|
\ ? b:match_words . ',' . s:jsx_match_words
|
||||||
|
\ : s:jsx_match_words
|
||||||
endif
|
endif
|
||||||
|
|
||||||
setlocal suffixesadd+=.jsx
|
setlocal suffixesadd+=.jsx
|
||||||
|
|||||||
@@ -75,4 +75,11 @@ if get(g:, "terraform_align", 1)
|
|||||||
setlocal shiftwidth=2
|
setlocal shiftwidth=2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Set the commentstring
|
||||||
|
if exists('g:terraform_commentstring')
|
||||||
|
let &l:commentstring=g:terraform_commentstring
|
||||||
|
else
|
||||||
|
setlocal commentstring=#%s
|
||||||
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
27
after/syntax/javascript/graphql.vim
Normal file
27
after/syntax/javascript/graphql.vim
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
let s:current_syntax = b:current_syntax
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
syn include @GraphQLSyntax syntax/graphql.vim
|
||||||
|
if exists('s:current_syntax')
|
||||||
|
let b:current_syntax = s:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:tags = '\%(' . join(g:graphql_javascript_tags, '\|') . '\)'
|
||||||
|
|
||||||
|
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend'
|
||||||
|
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
||||||
|
|
||||||
|
" Support expression interpolation ((${...})) inside template strings.
|
||||||
|
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression containedin=graphqlFold keepend
|
||||||
|
|
||||||
|
hi def link graphqlTemplateString jsTemplateString
|
||||||
|
hi def link graphqlTaggedTemplate jsTaggedTemplate
|
||||||
|
hi def link graphqlTemplateExpression jsTemplateExpression
|
||||||
|
|
||||||
|
syn cluster jsExpression add=graphqlTaggedTemplate
|
||||||
|
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -36,6 +36,10 @@ endif
|
|||||||
" jsBlock take care of ending the region.
|
" jsBlock take care of ending the region.
|
||||||
syn region xmlString contained start=+{+ end=++ contains=jsBlock,javascriptBlock
|
syn region xmlString contained start=+{+ end=++ contains=jsBlock,javascriptBlock
|
||||||
|
|
||||||
|
" JSX comments inside XML tag should color as comment. Note the trivial end pattern; we let
|
||||||
|
" jsComment take care of ending the region.
|
||||||
|
syn region xmlString contained start=+//+ end=++ contains=jsComment
|
||||||
|
|
||||||
" JSX child blocks behave just like JSX attributes, except that (a) they are
|
" JSX child blocks behave just like JSX attributes, except that (a) they are
|
||||||
" syntactically distinct, and (b) they need the syn-extend argument, or else
|
" syntactically distinct, and (b) they need the syn-extend argument, or else
|
||||||
" nested XML end-tag patterns may end the outer jsxRegion.
|
" nested XML end-tag patterns may end the outer jsxRegion.
|
||||||
@@ -49,7 +53,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=+/>+
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
if !exists('g:rust_conceal') || g:rust_conceal == 0 || !has('conceal') || &enc != 'utf-8'
|
scriptencoding utf-8
|
||||||
|
|
||||||
|
if !get(g:, 'rust_conceal', 0) || !has('conceal') || &encoding !=# 'utf-8'
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" For those who don't want to see `::`...
|
" For those who don't want to see `::`...
|
||||||
if exists('g:rust_conceal_mod_path') && g:rust_conceal_mod_path != 0
|
if get(g:, 'rust_conceal_mod_path', 0)
|
||||||
syn match rustNiceOperator "::" conceal cchar=ㆍ
|
syn match rustNiceOperator "::" conceal cchar=ㆍ
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -20,7 +22,7 @@ syn match rustNiceOperator "=>" contains=rustFatRightArrowHead,rustFatRightArrow
|
|||||||
syn match rustNiceOperator /\<\@!_\(_*\>\)\@=/ conceal cchar=′
|
syn match rustNiceOperator /\<\@!_\(_*\>\)\@=/ conceal cchar=′
|
||||||
|
|
||||||
" For those who don't want to see `pub`...
|
" For those who don't want to see `pub`...
|
||||||
if exists('g:rust_conceal_pub') && g:rust_conceal_pub != 0
|
if get(g:, 'rust_conceal_pub', 0)
|
||||||
syn match rustPublicSigil contained "pu" conceal cchar=*
|
syn match rustPublicSigil contained "pu" conceal cchar=*
|
||||||
syn match rustPublicRest contained "b" conceal cchar=
|
syn match rustPublicRest contained "b" conceal cchar=
|
||||||
syn match rustNiceOperator "pub " contains=rustPublicSigil,rustPublicRest
|
syn match rustNiceOperator "pub " contains=rustPublicSigil,rustPublicRest
|
||||||
@@ -28,11 +30,16 @@ endif
|
|||||||
|
|
||||||
hi link rustNiceOperator Operator
|
hi link rustNiceOperator Operator
|
||||||
|
|
||||||
if !(exists('g:rust_conceal_mod_path') && g:rust_conceal_mod_path != 0)
|
if !get(g:, 'rust_conceal_mod_path', 0)
|
||||||
hi! link Conceal Operator
|
hi! link Conceal Operator
|
||||||
|
|
||||||
|
augroup rust.vim.after
|
||||||
|
autocmd!
|
||||||
" And keep it after a colorscheme change
|
" And keep it after a colorscheme change
|
||||||
au ColorScheme <buffer> hi! link Conceal Operator
|
autocmd ColorScheme <buffer> hi! link Conceal Operator
|
||||||
|
augroup END
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
26
after/syntax/typescript/graphql.vim
Normal file
26
after/syntax/typescript/graphql.vim
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
let s:current_syntax = b:current_syntax
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
syn include @GraphQLSyntax syntax/graphql.vim
|
||||||
|
if exists('s:current_syntax')
|
||||||
|
let b:current_syntax = s:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:tags = '\%(' . join(g:graphql_javascript_tags, '\|') . '\)'
|
||||||
|
|
||||||
|
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,typescriptTemplateSubstitution extend'
|
||||||
|
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
||||||
|
|
||||||
|
" Support expression interpolation ((${...})) inside template strings.
|
||||||
|
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=typescriptTemplateSubstitution containedin=graphqlFold keepend
|
||||||
|
|
||||||
|
hi def link graphqlTemplateString typescriptTemplate
|
||||||
|
hi def link graphqlTemplateExpression typescriptTemplateSubstitution
|
||||||
|
|
||||||
|
syn cluster typescriptExpression add=graphqlTaggedTemplate
|
||||||
|
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -21,13 +21,17 @@ if version < 600
|
|||||||
endif
|
endif
|
||||||
syntax clear
|
syntax clear
|
||||||
|
|
||||||
syn match yamlBlock "[\[\]\{\}\|\>]"
|
syn match yamlInline "[\[\]\{\}]"
|
||||||
|
syn match yamlBlock "[>|]\d\?[+-]"
|
||||||
|
|
||||||
syn region yamlComment start="\#" end="$"
|
syn region yamlComment start="\#" end="$"
|
||||||
syn match yamlIndicator "#YAML:\S\+"
|
syn match yamlIndicator "#YAML:\S\+"
|
||||||
|
|
||||||
syn region yamlString start="\(^\|\s\|\[\|\,\|\-\)'" end="'" skip="\\'"
|
syn region yamlString start="\(^\|\s\|\[\|\,\|\-\)'" end="'" skip="\\'"
|
||||||
syn region yamlString start='"' end='"' skip='\\"' contains=yamlEscape
|
syn region yamlString start='"' end='"' skip='\\"' contains=yamlEscape
|
||||||
|
syn region yamlString matchgroup=yamlBlock start=/[>|]\s*\n\+\z(\s\+\)\S/rs=s+1 skip=/^\%(\z1\S\|^$\)/ end=/^\z1\@!.*/me=s-1
|
||||||
|
syn region yamlString matchgroup=yamlBlock start=/[>|]\(\d\|[+-]\)\s*\n\+\z(\s\+\)\S/rs=s+2 skip=/^\%(\z1\S\|^$\)/ end=/^\z1\@!.*/me=s-1
|
||||||
|
syn region yamlString matchgroup=yamlBlock start=/[>|]\d\(\d\|[+-]\)\s*\n\+\z(\s\+\)\S/rs=s+3 skip=/^\%(\z1\S\|^$\)/ end=/^\z1\@!.*/me=s-1
|
||||||
syn match yamlEscape +\\[abfnrtv'"\\]+ contained
|
syn match yamlEscape +\\[abfnrtv'"\\]+ contained
|
||||||
syn match yamlEscape "\\\o\o\=\o\=" contained
|
syn match yamlEscape "\\\o\o\=\o\=" contained
|
||||||
syn match yamlEscape "\\x\x\+" contained
|
syn match yamlEscape "\\x\x\+" contained
|
||||||
@@ -53,6 +57,7 @@ hi link yamlKey Identifier
|
|||||||
hi link yamlType Type
|
hi link yamlType Type
|
||||||
|
|
||||||
hi link yamlComment Comment
|
hi link yamlComment Comment
|
||||||
|
hi link yamlInline Operator
|
||||||
hi link yamlBlock Operator
|
hi link yamlBlock Operator
|
||||||
hi link yamlString String
|
hi link yamlString String
|
||||||
hi link yamlEscape Special
|
hi link yamlEscape Special
|
||||||
|
|||||||
@@ -1,89 +1,91 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
function! cargo#cmd(args)
|
function! cargo#Load()
|
||||||
silent! clear
|
" Utility call to get this script loaded, for debugging
|
||||||
if !a:args
|
|
||||||
execute "!" . "cargo ". a:args
|
|
||||||
else
|
|
||||||
echom "Missing arguments"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#build(args)
|
function! cargo#cmd(args)
|
||||||
silent! clear
|
execute "! cargo" a:args
|
||||||
if !a:args
|
endfunction
|
||||||
execute "!" . "cargo build " . a:args
|
|
||||||
|
function! s:nearest_cargo(...) abort
|
||||||
|
" If the second argument is not specified, the first argument determines
|
||||||
|
" whether we will start from the current directory or the directory of the
|
||||||
|
" current buffer, otherwise, we start with the provided path on the
|
||||||
|
" second argument.
|
||||||
|
|
||||||
|
let l:is_getcwd = get(a:, 1, 0)
|
||||||
|
if l:is_getcwd
|
||||||
|
let l:starting_path = get(a:, 2, getcwd())
|
||||||
else
|
else
|
||||||
execute "!" . "cargo build"
|
let l:starting_path = get(a:, 2, expand('%:p:h'))
|
||||||
endif
|
endif
|
||||||
silent! clear
|
|
||||||
execute "!" . "cargo build"
|
return findfile('Cargo.toml', l:starting_path . ';')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#nearestCargo(is_getcwd) abort
|
||||||
|
return s:nearest_cargo(a:is_getcwd)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#nearestWorkspaceCargo(is_getcwd) abort
|
||||||
|
let l:nearest = s:nearest_cargo(a:is_getcwd)
|
||||||
|
while l:nearest !=# ''
|
||||||
|
for l:line in readfile(l:nearest, '', 0x100)
|
||||||
|
if l:line =~# '\V[workspace]'
|
||||||
|
return l:nearest
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
let l:next = fnamemodify(l:nearest, ':p:h:h')
|
||||||
|
let l:nearest = s:nearest_cargo(0, l:next)
|
||||||
|
endwhile
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#nearestRootCargo(is_getcwd) abort
|
||||||
|
" Try to find a workspace Cargo.toml, and if not found, take the nearest
|
||||||
|
" regular Cargo.toml
|
||||||
|
let l:workspace_cargo = cargo#nearestWorkspaceCargo(a:is_getcwd)
|
||||||
|
if l:workspace_cargo !=# ''
|
||||||
|
return l:workspace_cargo
|
||||||
|
endif
|
||||||
|
return s:nearest_cargo(a:is_getcwd)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! cargo#build(args)
|
||||||
|
call cargo#cmd("build " . a:args)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#clean(args)
|
function! cargo#clean(args)
|
||||||
silent! clear
|
call cargo#cmd("clean " . a:args)
|
||||||
if !a:args
|
|
||||||
execute "!" . "cargo clean " . a:args
|
|
||||||
else
|
|
||||||
execute "!" . "cargo clean"
|
|
||||||
endif
|
|
||||||
silent! clear
|
|
||||||
execute "!" . "cargo clean"
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#doc(args)
|
function! cargo#doc(args)
|
||||||
silent! clear
|
call cargo#cmd("doc " . a:args)
|
||||||
if !a:args
|
|
||||||
execute "!" . "cargo doc " . a:args
|
|
||||||
else
|
|
||||||
execute "!" . "cargo doc"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#new(args)
|
function! cargo#new(args)
|
||||||
silent! clear
|
call cargo#cmd("new " . a:args)
|
||||||
if !a:args
|
cd `=a:args`
|
||||||
execute "!cargo new " . a:args
|
|
||||||
:cd `=a:args`
|
|
||||||
else
|
|
||||||
echom "Missing arguments"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#init(args)
|
function! cargo#init(args)
|
||||||
silent! clear
|
call cargo#cmd("init " . a:args)
|
||||||
if !a:args
|
|
||||||
execute "!" . "cargo init " . a:args
|
|
||||||
else
|
|
||||||
execute "!" . "cargo init"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#run(args)
|
function! cargo#run(args)
|
||||||
silent! clear
|
call cargo#cmd("run " . a:args)
|
||||||
if !a:args
|
|
||||||
execute "!" . "cargo run " . a:args
|
|
||||||
else
|
|
||||||
execute "!" . "cargo run"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#test(args)
|
function! cargo#test(args)
|
||||||
silent! clear
|
call cargo#cmd("test " . a:args)
|
||||||
if !a:args
|
|
||||||
execute "!" . "cargo test " . a:args
|
|
||||||
else
|
|
||||||
execute "!" . "cargo test"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#bench(args)
|
function! cargo#bench(args)
|
||||||
silent! clear
|
call cargo#cmd("bench " . a:args)
|
||||||
if !a:args
|
|
||||||
execute "!" . "cargo bench " . a:args
|
|
||||||
else
|
|
||||||
execute "!" . "cargo bench"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
30
autoload/cargo/quickfix.vim
Normal file
30
autoload/cargo/quickfix.vim
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
|
function! cargo#quickfix#CmdPre() abort
|
||||||
|
if &filetype ==# 'rust' && get(b:, 'current_compiler', '') ==# 'cargo'
|
||||||
|
" Preserve the current directory, and 'lcd' to the nearest Cargo file.
|
||||||
|
let b:rust_compiler_cargo_qf_has_lcd = haslocaldir()
|
||||||
|
let b:rust_compiler_cargo_qf_prev_cd = getcwd()
|
||||||
|
let b:rust_compiler_cargo_qf_prev_cd_saved = 1
|
||||||
|
let l:nearest = fnamemodify(cargo#nearestRootCargo(0), ':h')
|
||||||
|
execute 'lchdir! '.l:nearest
|
||||||
|
else
|
||||||
|
let b:rust_compiler_cargo_qf_prev_cd_saved = 0
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#quickfix#CmdPost() abort
|
||||||
|
if b:rust_compiler_cargo_qf_prev_cd_saved
|
||||||
|
" Restore the current directory.
|
||||||
|
if b:rust_compiler_cargo_qf_has_lcd
|
||||||
|
execute 'lchdir! '.b:rust_compiler_cargo_qf_prev_cd
|
||||||
|
else
|
||||||
|
execute 'chdir! '.b:rust_compiler_cargo_qf_prev_cd
|
||||||
|
endif
|
||||||
|
let b:rust_compiler_cargo_qf_prev_cd_saved = 0
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -310,6 +310,10 @@ function! crystal_lang#format(option_str, ...) abort
|
|||||||
call setpos('.', pos_save)
|
call setpos('.', pos_save)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! crystal_lang#expand(file, pos, ...) abort
|
||||||
|
return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
|
||||||
|
endfunction
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ function! dart#fmt(q_args) abort
|
|||||||
if executable('dartfmt')
|
if executable('dartfmt')
|
||||||
let buffer_content = join(getline(1, '$'), "\n")
|
let buffer_content = join(getline(1, '$'), "\n")
|
||||||
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 buffer_content ==# joined_lines[:-2] | return | endif
|
||||||
if 0 == v:shell_error
|
if 0 == v:shell_error
|
||||||
let win_view = winsaveview()
|
let win_view = winsaveview()
|
||||||
let lines = split(joined_lines, "\n")
|
let lines = split(joined_lines, "\n")
|
||||||
@@ -129,6 +130,15 @@ function! s:PackageMap() abort
|
|||||||
return [v:true, map]
|
return [v:true, map]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Toggle whether dartfmt is run on save or not.
|
||||||
|
function! dart#ToggleFormatOnSave() abort
|
||||||
|
if get(g:, "dart_format_on_save", 0)
|
||||||
|
let g:dart_format_on_save = 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let g:dart_format_on_save = 1
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Finds a file name '.packages' in the cwd, or in any directory above the open
|
" Finds a file name '.packages' in the cwd, or in any directory above the open
|
||||||
" file.
|
" file.
|
||||||
"
|
"
|
||||||
|
|||||||
@@ -23,22 +23,18 @@ function! elixir#indent#indent(lnum)
|
|||||||
|
|
||||||
let handlers = [
|
let handlers = [
|
||||||
\'top_of_file',
|
\'top_of_file',
|
||||||
\'starts_with_end',
|
|
||||||
\'starts_with_mid_or_end_block_keyword',
|
|
||||||
\'following_trailing_do',
|
|
||||||
\'following_trailing_rocket',
|
|
||||||
\'following_trailing_binary_operator',
|
\'following_trailing_binary_operator',
|
||||||
\'starts_with_pipe',
|
\'starts_with_pipe',
|
||||||
\'starts_with_close_bracket',
|
|
||||||
\'starts_with_binary_operator',
|
\'starts_with_binary_operator',
|
||||||
\'inside_nested_construct',
|
\'inside_block',
|
||||||
\'starts_with_comment',
|
\'starts_with_end',
|
||||||
\'inside_generic_block',
|
\'inside_generic_block',
|
||||||
\'follow_prev_nb'
|
\'follow_prev_nb'
|
||||||
\]
|
\]
|
||||||
for handler in handlers
|
for handler in handlers
|
||||||
call s:debug('testing handler elixir#indent#handle_'.handler)
|
call s:debug('testing handler elixir#indent#handle_'.handler)
|
||||||
let indent = function('elixir#indent#handle_'.handler)(lnum, text, prev_nb_lnum, prev_nb_text)
|
let context = {'lnum': lnum, 'text': text, 'prev_nb_lnum': prev_nb_lnum, 'prev_nb_text': prev_nb_text}
|
||||||
|
let indent = function('elixir#indent#handle_'.handler)(context)
|
||||||
if indent != -1
|
if indent != -1
|
||||||
call s:debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
|
call s:debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
|
||||||
call cursor(curs_lnum, curs_col)
|
call cursor(curs_lnum, curs_col)
|
||||||
@@ -57,9 +53,17 @@ function! s:debug(str)
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:starts_with(context, expr)
|
||||||
|
return s:_starts_with(a:context.text, a:expr, a:context.lnum)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:prev_starts_with(context, expr)
|
||||||
|
return s:_starts_with(a:context.prev_nb_text, a:expr, a:context.prev_nb_lnum)
|
||||||
|
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! s: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
|
||||||
@@ -74,9 +78,13 @@ function! s:starts_with(text, expr, lnum)
|
|||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:prev_ends_with(context, expr)
|
||||||
|
return s:_ends_with(a:context.prev_nb_text, a:expr, a:context.prev_nb_lnum)
|
||||||
|
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! s: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
|
||||||
@@ -140,16 +148,16 @@ function! s:find_last_pos(lnum, text, match)
|
|||||||
return -1
|
return -1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_top_of_file(_lnum, _text, prev_nb_lnum, _prev_nb_text)
|
function! elixir#indent#handle_top_of_file(context)
|
||||||
if a:prev_nb_lnum == 0
|
if a:context.prev_nb_lnum == 0
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_follow_prev_nb(_lnum, _text, prev_nb_lnum, prev_nb_text)
|
function! elixir#indent#handle_follow_prev_nb(context)
|
||||||
return s:get_base_indent(a:prev_nb_lnum, a:prev_nb_text)
|
return s:get_base_indent(a:context.prev_nb_lnum, a:context.prev_nb_text)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Given the line at `lnum`, returns the indent of the line that acts as the 'base indent'
|
" Given the line at `lnum`, returns the indent of the line that acts as the 'base indent'
|
||||||
@@ -163,13 +171,13 @@ function! s:get_base_indent(lnum, text)
|
|||||||
let data_structure_close = '\%(\]\|}\|)\)'
|
let data_structure_close = '\%(\]\|}\|)\)'
|
||||||
let pipe = '|>'
|
let pipe = '|>'
|
||||||
|
|
||||||
if s:starts_with(a:text, binary_operator, a:lnum)
|
if s:_starts_with(a:text, binary_operator, a:lnum)
|
||||||
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
||||||
elseif s:starts_with(a:text, pipe, a:lnum)
|
elseif s:_starts_with(a:text, pipe, a:lnum)
|
||||||
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
||||||
elseif s:ends_with(prev_nb_text, binary_operator, prev_nb_lnum)
|
elseif s:_ends_with(prev_nb_text, binary_operator, prev_nb_lnum)
|
||||||
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
|
||||||
elseif s:ends_with(a:text, data_structure_close, a:lnum)
|
elseif s:_ends_with(a:text, data_structure_close, a:lnum)
|
||||||
let data_structure_open = '\%(\[\|{\|(\)'
|
let data_structure_open = '\%(\[\|{\|(\)'
|
||||||
let close_match_idx = match(a:text, data_structure_close . '\s*$')
|
let close_match_idx = match(a:text, data_structure_close . '\s*$')
|
||||||
call cursor(a:lnum, close_match_idx + 1)
|
call cursor(a:lnum, close_match_idx + 1)
|
||||||
@@ -181,54 +189,26 @@ function! s:get_base_indent(lnum, text)
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text)
|
function! elixir#indent#handle_following_trailing_binary_operator(context)
|
||||||
if s:ends_with(a:prev_nb_text, s:keyword('do'), a:prev_nb_lnum)
|
|
||||||
if s:starts_with(a:text, s:keyword('end'), a:lnum)
|
|
||||||
return indent(a:prev_nb_lnum)
|
|
||||||
else
|
|
||||||
return indent(a:prev_nb_lnum) + s:sw()
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! elixir#indent#handle_following_trailing_rocket(lnum, text, prev_nb_lnum, prev_nb_text)
|
|
||||||
if s:ends_with(a:prev_nb_text, '->', a:prev_nb_lnum)
|
|
||||||
return indent(a:prev_nb_lnum) + s:sw()
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
|
|
||||||
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
||||||
|
|
||||||
if s:ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum)
|
if s:prev_ends_with(a:context, binary_operator)
|
||||||
return indent(a:prev_nb_lnum) + s:sw()
|
return indent(a:context.prev_nb_lnum) + s:sw()
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_following_prev_end(_lnum, _text, prev_nb_lnum, prev_nb_text)
|
function! elixir#indent#handle_starts_with_pipe(context)
|
||||||
if s:ends_with(a:prev_nb_text, s:keyword('end'), a:prev_nb_lnum)
|
if s:starts_with(a:context, '|>')
|
||||||
return indent(a:prev_nb_lnum)
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text)
|
|
||||||
if s:starts_with(a:text, '|>', a:lnum)
|
|
||||||
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
||||||
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
|
let pos = s:find_last_pos(a:context.prev_nb_lnum, a:context.prev_nb_text, match_operator)
|
||||||
if pos == -1
|
if pos == -1
|
||||||
return indent(a:prev_nb_lnum)
|
return indent(a:context.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:context.prev_nb_text, pos+1, len(a:context.prev_nb_text)-1), '\S')
|
||||||
if next_word_pos == -1
|
if next_word_pos == -1
|
||||||
return indent(a:prev_nb_lnum) + s:sw()
|
return indent(a:context.prev_nb_lnum) + s:sw()
|
||||||
else
|
else
|
||||||
return pos + 1 + next_word_pos
|
return pos + 1 + next_word_pos
|
||||||
end
|
end
|
||||||
@@ -238,16 +218,8 @@ function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_n
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text)
|
function! elixir#indent#handle_starts_with_end(context)
|
||||||
if match(a:text, '^\s*#') != -1
|
if s:starts_with(a:context, s:keyword('end'))
|
||||||
return indent(a:prev_nb_lnum)
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_nb_text)
|
|
||||||
if s:starts_with(a:text, s:keyword('end'), a:lnum)
|
|
||||||
let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end').'\zs', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
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
|
||||||
@@ -255,36 +227,18 @@ function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_
|
|||||||
endif
|
endif
|
||||||
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_binary_operator(context)
|
||||||
if s:starts_with(a:text, s:keyword('catch\|rescue\|after\|else'), a:lnum)
|
|
||||||
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)
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_close_bracket(lnum, text, _prev_nb_lnum, _prev_nb_text)
|
|
||||||
if s:starts_with(a:text, '\%(\]\|}\|)\)', a:lnum)
|
|
||||||
let pair_lnum = searchpair('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
|
||||||
return indent(pair_lnum)
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
|
|
||||||
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
|
||||||
|
|
||||||
if s:starts_with(a:text, binary_operator, a:lnum)
|
if s:starts_with(a:context, binary_operator)
|
||||||
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
|
||||||
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
|
let pos = s:find_last_pos(a:context.prev_nb_lnum, a:context.prev_nb_text, match_operator)
|
||||||
if pos == -1
|
if pos == -1
|
||||||
return indent(a:prev_nb_lnum)
|
return indent(a:context.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:context.prev_nb_text, pos+1, len(a:context.prev_nb_text)-1), '\S')
|
||||||
if next_word_pos == -1
|
if next_word_pos == -1
|
||||||
return indent(a:prev_nb_lnum) + s:sw()
|
return indent(a:context.prev_nb_lnum) + s:sw()
|
||||||
else
|
else
|
||||||
return pos + 1 + next_word_pos
|
return pos + 1 + next_word_pos
|
||||||
end
|
end
|
||||||
@@ -298,162 +252,89 @@ endfunction
|
|||||||
" nested structure. For example, we might be in a function in a map in a
|
" nested structure. For example, we might be in a function in a map in a
|
||||||
" function, etc... so we need to first figure out what the innermost structure
|
" 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_block(context)
|
||||||
let start_pattern = '\C\%(\<with\>\|\<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 = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", max([0, a:lnum - g:elixir_indent_max_lookbehind]))
|
" hack - handle do: better
|
||||||
let pair_lnum = pair_info[0]
|
let block_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip() || getline(line('.')) =~ 'do:'", max([0, a:context.lnum - g:elixir_indent_max_lookbehind]))
|
||||||
let pair_col = pair_info[1]
|
let block_start_lnum = block_info[0]
|
||||||
if pair_lnum != 0 || pair_col != 0
|
let block_start_col = block_info[1]
|
||||||
let pair_text = getline(pair_lnum)
|
if block_start_lnum != 0 || block_start_col != 0
|
||||||
let pair_char = pair_text[pair_col - 1]
|
let block_text = getline(block_start_lnum)
|
||||||
if pair_char == 'f'
|
let block_start_char = block_text[block_start_col - 1]
|
||||||
call s:debug("testing s:do_handle_inside_fn")
|
|
||||||
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 == '['
|
|
||||||
call s:debug("testing s:do_handle_inside_square_brace")
|
|
||||||
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 == '{'
|
|
||||||
call s:debug("testing s:do_handle_inside_curly_brace")
|
|
||||||
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 == '('
|
|
||||||
call s:debug("testing s:do_handle_inside_parens")
|
|
||||||
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
|
|
||||||
call s:debug("testing s:do_handle_inside_keyword_block")
|
|
||||||
return s:do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
end
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:do_handle_inside_with(pair_lnum, pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
|
let never_match = '\(a\)\@=b'
|
||||||
if a:pair_lnum == a:lnum
|
let config = {
|
||||||
" This is the `with` line or an inline `with`/`do`
|
\'f': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match},
|
||||||
call s:debug("current line is `with`")
|
\'c': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match},
|
||||||
return -1
|
\'t': {'aligned_clauses': s:keyword('end\|catch\|rescue\|after'), 'pattern_match_clauses': s:keyword('catch\|rescue')},
|
||||||
else
|
\'r': {'aligned_clauses': s:keyword('end\|after'), 'pattern_match_clauses': s:keyword('after')},
|
||||||
" Determine if in with/do, do/else|end, or else/end
|
\'i': {'aligned_clauses': s:keyword('end\|else'), 'pattern_match_clauses': never_match},
|
||||||
let start_pattern = '\C\%(\<with\>\|\<else\>\|\<do\>\)'
|
\'[': {'aligned_clauses': ']', 'pattern_match_clauses': never_match},
|
||||||
let end_pattern = '\C\%(\<end\>\)'
|
\'{': {'aligned_clauses': '}', 'pattern_match_clauses': never_match},
|
||||||
let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
\'(': {'aligned_clauses': ')', 'pattern_match_clauses': never_match}
|
||||||
let pair_lnum = pair_info[0]
|
\}
|
||||||
let pair_col = pair_info[1]
|
|
||||||
|
|
||||||
let pair_text = getline(pair_lnum)
|
if block_start_char == 'w'
|
||||||
let pair_char = pair_text[pair_col - 1]
|
call s:debug("testing s:handle_with")
|
||||||
|
return s:handle_with(block_start_lnum, block_start_col, a:context)
|
||||||
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
|
else
|
||||||
call s:debug("inside else/end")
|
let block_config = config[block_start_char]
|
||||||
return s:do_handle_inside_pattern_match_block(pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
if s:starts_with(a:context, block_config.aligned_clauses)
|
||||||
end
|
call s:debug("clause")
|
||||||
end
|
return indent(block_start_lnum)
|
||||||
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\>\)'
|
|
||||||
if a:pair_lnum
|
|
||||||
" last line is a "receive" or something
|
|
||||||
if s:starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum)
|
|
||||||
call s:debug("prev nb line is keyword")
|
|
||||||
return indent(a:prev_nb_lnum) + s:sw()
|
|
||||||
else
|
else
|
||||||
return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
let clause_lnum = searchpair(block_config.pattern_match_clauses, '', '*', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", block_start_lnum)
|
||||||
end
|
let relative_lnum = max([clause_lnum, block_start_lnum])
|
||||||
else
|
call s:debug("pattern matching relative to lnum " . relative_lnum)
|
||||||
return -1
|
return s:do_handle_pattern_match_block(relative_lnum, a:context)
|
||||||
endif
|
endif
|
||||||
endfunction
|
|
||||||
|
|
||||||
" 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
|
|
||||||
return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
|
|
||||||
" If in list...
|
|
||||||
if a:pair_lnum != 0 || a:pair_col != 0
|
|
||||||
let pair_text = getline(a:pair_lnum)
|
|
||||||
let substr = strpart(pair_text, a:pair_col, len(pair_text)-1)
|
|
||||||
let indent_pos = match(substr, '\S')
|
|
||||||
if indent_pos != -1
|
|
||||||
return indent_pos + a:pair_col
|
|
||||||
else
|
|
||||||
return indent(a:pair_lnum) + s:sw()
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
return -1
|
|
||||||
end
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
|
|
||||||
return indent(a:pair_lnum) + s:sw()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text)
|
|
||||||
if a:pair_lnum
|
|
||||||
if s:ends_with(a:prev_nb_text, '(', a:prev_nb_lnum)
|
|
||||||
return indent(a:prev_nb_lnum) + s:sw()
|
|
||||||
elseif a:pair_lnum == a:prev_nb_lnum
|
|
||||||
" Align indent (e.g. "def add(a,")
|
|
||||||
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,')
|
|
||||||
if pos == -1
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return pos
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return indent(a:prev_nb_lnum)
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return -1
|
return -1
|
||||||
endif
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! elixir#indent#handle_inside_generic_block(lnum, _text, prev_nb_lnum, prev_nb_text)
|
function! s:handle_with(start_lnum, start_col, context)
|
||||||
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]))
|
let block_info = searchpairpos('\C\%(\<with\>\|\<do\>\|\<else\>\)', '', s:keyword('end'), 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
|
||||||
|
let block_start_lnum = block_info[0]
|
||||||
|
let block_start_col = block_info[1]
|
||||||
|
|
||||||
|
let block_start_text = getline(block_start_lnum)
|
||||||
|
let block_start_char = block_start_text[block_start_col - 1]
|
||||||
|
|
||||||
|
if s:starts_with(a:context, s:keyword('do\|else\|end'))
|
||||||
|
return indent(a:start_lnum)
|
||||||
|
elseif block_start_char == 'w' || s:starts_with(a:context, '\C\(do\|else\):')
|
||||||
|
return indent(a:start_lnum) + 5
|
||||||
|
elseif s:_starts_with(block_start_text, '\C\(do\|else\):', a:start_lnum)
|
||||||
|
return indent(block_start_lnum) + s:sw()
|
||||||
|
else
|
||||||
|
return s:do_handle_pattern_match_block(a:start_lnum, a:context)
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:do_handle_pattern_match_block(relative_line, context)
|
||||||
|
let relative_indent = indent(a:relative_line)
|
||||||
|
" hack!
|
||||||
|
if a:context.text =~ '\(fn.*\)\@<!->'
|
||||||
|
call s:debug("current line contains ->; assuming match definition")
|
||||||
|
return relative_indent + s:sw()
|
||||||
|
elseif search('\(fn.*\)\@<!->', 'bnW', a:relative_line) != 0
|
||||||
|
call s:debug("a previous line contains ->; assuming match handler")
|
||||||
|
return relative_indent + 2 * s:sw()
|
||||||
|
else
|
||||||
|
call s:debug("couldn't find any previous ->; assuming body text")
|
||||||
|
return relative_indent + s:sw()
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! elixir#indent#handle_inside_generic_block(context)
|
||||||
|
let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end'), 'bW', "line('.') == ".a:context.lnum." || s:is_string_or_comment(line('.'), col('.'))", max([0, a:context.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 s:ends_with(a:prev_nb_text, ',', a:prev_nb_lnum)
|
if s:prev_ends_with(a:context, ',')
|
||||||
return indent(pair_lnum) + 2 * s:sw()
|
return indent(pair_lnum) + 2 * s:sw()
|
||||||
else
|
else
|
||||||
return indent(pair_lnum) + s:sw()
|
return indent(pair_lnum) + s:sw()
|
||||||
|
|||||||
440
autoload/go/config.vim
Normal file
440
autoload/go/config.vim
Normal file
@@ -0,0 +1,440 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
|
||||||
|
|
||||||
|
function! go#config#AutodetectGopath() abort
|
||||||
|
return get(g:, 'go_autodetect_gopath', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ListTypeCommands() abort
|
||||||
|
return get(g:, 'go_list_type_commands', {})
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#VersionWarning() abort
|
||||||
|
return get(g:, 'go_version_warning', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#BuildTags() abort
|
||||||
|
return get(g:, 'go_build_tags', '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetBuildTags(value) abort
|
||||||
|
if a:value is ''
|
||||||
|
silent! unlet g:go_build_tags
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let g:go_build_tags = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TestTimeout() abort
|
||||||
|
return get(g:, 'go_test_timeout', '10s')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TestShowName() abort
|
||||||
|
return get(g:, 'go_test_show_name', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TermHeight() abort
|
||||||
|
return get(g:, 'go_term_height', winheight(0))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TermWidth() abort
|
||||||
|
return get(g:, 'go_term_width', winwidth(0))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TermMode() abort
|
||||||
|
return get(g:, 'go_term_mode', 'vsplit')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TermEnabled() abort
|
||||||
|
return get(g:, 'go_term_enabled', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetTermEnabled(value) abort
|
||||||
|
let g:go_term_enabled = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TemplateUsePkg() abort
|
||||||
|
return get(g:, 'go_template_use_pkg', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TemplateTestFile() abort
|
||||||
|
return get(g:, 'go_template_test_file', "hello_world_test.go")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TemplateFile() abort
|
||||||
|
return get(g:, 'go_template_file', "hello_world.go")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#StatuslineDuration() abort
|
||||||
|
return get(g:, 'go_statusline_duration', 60000)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SnippetEngine() abort
|
||||||
|
return get(g:, 'go_snippet_engine', 'automatic')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#PlayBrowserCommand() abort
|
||||||
|
if go#util#IsWin()
|
||||||
|
let go_play_browser_command = '!start rundll32 url.dll,FileProtocolHandler %URL%'
|
||||||
|
elseif go#util#IsMac()
|
||||||
|
let go_play_browser_command = 'open %URL%'
|
||||||
|
elseif executable('xdg-open')
|
||||||
|
let go_play_browser_command = 'xdg-open %URL%'
|
||||||
|
elseif executable('firefox')
|
||||||
|
let go_play_browser_command = 'firefox %URL% &'
|
||||||
|
elseif executable('chromium')
|
||||||
|
let go_play_browser_command = 'chromium %URL% &'
|
||||||
|
else
|
||||||
|
let go_play_browser_command = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return get(g:, 'go_play_browser_command', go_play_browser_command)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#MetalinterDeadline() abort
|
||||||
|
" gometalinter has a default deadline of 5 seconds only when asynchronous
|
||||||
|
" jobs are not supported.
|
||||||
|
|
||||||
|
let deadline = '5s'
|
||||||
|
if go#util#has_job() && has('lambda')
|
||||||
|
let deadline = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return get(g:, 'go_metalinter_deadline', deadline)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ListType() abort
|
||||||
|
return get(g:, 'go_list_type', '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ListAutoclose() abort
|
||||||
|
return get(g:, 'go_list_autoclose', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#InfoMode() abort
|
||||||
|
return get(g:, 'go_info_mode', 'gocode')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GuruScope() abort
|
||||||
|
let scope = get(g:, 'go_guru_scope', [])
|
||||||
|
|
||||||
|
if !empty(scope)
|
||||||
|
" strip trailing slashes for each path in scope. bug:
|
||||||
|
" https://github.com/golang/go/issues/14584
|
||||||
|
let scopes = go#util#StripTrailingSlash(scope)
|
||||||
|
endif
|
||||||
|
|
||||||
|
return scope
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetGuruScope(scope) abort
|
||||||
|
if empty(a:scope)
|
||||||
|
if exists('g:go_guru_scope')
|
||||||
|
unlet g:go_guru_scope
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let g:go_guru_scope = a:scope
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:sock_type = (has('win32') || has('win64')) ? 'tcp' : 'unix'
|
||||||
|
function! go#config#GocodeSocketType() abort
|
||||||
|
return get(g:, 'go_gocode_socket_type', s:sock_type)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GocodeProposeBuiltins() abort
|
||||||
|
return get(g:, 'go_gocode_propose_builtins', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GocodeProposeSource() abort
|
||||||
|
return get(g:, 'go_gocode_propose_source', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#EchoCommandInfo() abort
|
||||||
|
return get(g:, 'go_echo_command_info', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DocUrl() abort
|
||||||
|
let godoc_url = get(g:, 'go_doc_url', 'https://godoc.org')
|
||||||
|
if godoc_url isnot 'https://godoc.org'
|
||||||
|
" strip last '/' character if available
|
||||||
|
let last_char = strlen(godoc_url) - 1
|
||||||
|
if godoc_url[last_char] == '/'
|
||||||
|
let godoc_url = strpart(godoc_url, 0, last_char)
|
||||||
|
endif
|
||||||
|
" custom godoc installations expect /pkg before package names
|
||||||
|
let godoc_url .= "/pkg"
|
||||||
|
endif
|
||||||
|
return godoc_url
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DefReuseBuffer() abort
|
||||||
|
return get(g:, 'go_def_reuse_buffer', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DefMode() abort
|
||||||
|
return get(g:, 'go_def_mode', 'guru')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DeclsIncludes() abort
|
||||||
|
return get(g:, 'go_decls_includes', 'func,type')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#Debug() abort
|
||||||
|
return get(g:, 'go_debug', [])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DebugWindows() abort
|
||||||
|
return get(g:, 'go_debug_windows', {
|
||||||
|
\ 'stack': 'leftabove 20vnew',
|
||||||
|
\ 'out': 'botright 10new',
|
||||||
|
\ 'vars': 'leftabove 30vnew',
|
||||||
|
\ }
|
||||||
|
\ )
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DebugAddress() abort
|
||||||
|
return get(g:, 'go_debug_address', '127.0.0.1:8181')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DebugCommands() abort
|
||||||
|
" make sure g:go_debug_commands is set so that it can be added to easily.
|
||||||
|
let g:go_debug_commands = get(g:, 'go_debug_commands', {})
|
||||||
|
return g:go_debug_commands
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetDebugDiag(value) abort
|
||||||
|
let g:go_debug_diag = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#AutoSameids() abort
|
||||||
|
return get(g:, 'go_auto_sameids', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetAutoSameids(value) abort
|
||||||
|
let g:go_auto_sameids = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#AddtagsTransform() abort
|
||||||
|
return get(g:, 'go_addtags_transform', "snakecase")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TemplateAutocreate() abort
|
||||||
|
return get(g:, "go_template_autocreate", 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetTemplateAutocreate(value) abort
|
||||||
|
let g:go_template_autocreate = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#MetalinterCommand() abort
|
||||||
|
return get(g:, "go_metalinter_command", "")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#MetalinterAutosaveEnabled() abort
|
||||||
|
return get(g:, 'go_metalinter_autosave_enabled', ['vet', 'golint'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#MetalinterEnabled() abort
|
||||||
|
return get(g:, "go_metalinter_enabled", ['vet', 'golint', 'errcheck'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#MetalinterDisabled() abort
|
||||||
|
return get(g:, "go_metalinter_disabled", [])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GolintBin() abort
|
||||||
|
return get(g:, "go_golint_bin", "golint")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ErrcheckBin() abort
|
||||||
|
return get(g:, "go_errcheck_bin", "errcheck")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#MetalinterAutosave() abort
|
||||||
|
return get(g:, "go_metalinter_autosave", 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetMetalinterAutosave(value) abort
|
||||||
|
let g:go_metalinter_autosave = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ListHeight() abort
|
||||||
|
return get(g:, "go_list_height", 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#FmtAutosave() abort
|
||||||
|
return get(g:, "go_fmt_autosave", 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetFmtAutosave(value) abort
|
||||||
|
let g:go_fmt_autosave = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#AsmfmtAutosave() abort
|
||||||
|
return get(g:, "go_asmfmt_autosave", 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetAsmfmtAutosave(value) abort
|
||||||
|
let g:go_asmfmt_autosave = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ModFmtAutosave() abort
|
||||||
|
return get(g:, "go_mod_fmt_autosave", 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetModFmtAutosave(value) abort
|
||||||
|
let g:go_mod_fmt_autosave = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DocMaxHeight() abort
|
||||||
|
return get(g:, "go_doc_max_height", 20)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#AutoTypeInfo() abort
|
||||||
|
return get(g:, "go_auto_type_info", 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#SetAutoTypeInfo(value) abort
|
||||||
|
let g:go_auto_type_info = a:value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#AlternateMode() abort
|
||||||
|
return get(g:, "go_alternate_mode", "edit")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DeclsMode() abort
|
||||||
|
return get(g:, "go_decls_mode", "")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DocCommand() abort
|
||||||
|
return get(g:, "go_doc_command", ["godoc"])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#FmtCommand() abort
|
||||||
|
return get(g:, "go_fmt_command", "gofmt")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#FmtOptions() abort
|
||||||
|
return get(g:, "go_fmt_options", {})
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#FmtFailSilently() abort
|
||||||
|
return get(g:, "go_fmt_fail_silently", 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#FmtExperimental() abort
|
||||||
|
return get(g:, "go_fmt_experimental", 0 )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#PlayOpenBrowser() abort
|
||||||
|
return get(g:, "go_play_open_browser", 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GorenameBin() abort
|
||||||
|
return get(g:, "go_gorename_bin", "gorename")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GorenamePrefill() abort
|
||||||
|
return get(g:, "go_gorename_prefill", 'expand("<cword>") =~# "^[A-Z]"' .
|
||||||
|
\ '? go#util#pascalcase(expand("<cword>"))' .
|
||||||
|
\ ': go#util#camelcase(expand("<cword>"))')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TextobjIncludeFunctionDoc() abort
|
||||||
|
return get(g:, "go_textobj_include_function_doc", 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TextobjIncludeVariable() abort
|
||||||
|
return get(g:, "go_textobj_include_variable", 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#BinPath() abort
|
||||||
|
return get(g:, "go_bin_path", "")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightArrayWhitespaceError() abort
|
||||||
|
return get(g:, 'go_highlight_array_whitespace_error', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightChanWhitespaceError() abort
|
||||||
|
return get(g:, 'go_highlight_chan_whitespace_error', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightExtraTypes() abort
|
||||||
|
return get(g:, 'go_highlight_extra_types', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightSpaceTabError() abort
|
||||||
|
return get(g:, 'go_highlight_space_tab_error', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightTrailingWhitespaceError() abort
|
||||||
|
return get(g:, 'go_highlight_trailing_whitespace_error', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightOperators() abort
|
||||||
|
return get(g:, 'go_highlight_operators', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightFunctions() abort
|
||||||
|
return get(g:, 'go_highlight_functions', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightFunctionArguments() abort
|
||||||
|
return get(g:, 'go_highlight_function_arguments', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightFunctionCalls() abort
|
||||||
|
return get(g:, 'go_highlight_function_calls', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightFields() abort
|
||||||
|
return get(g:, 'go_highlight_fields', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightTypes() abort
|
||||||
|
return get(g:, 'go_highlight_types', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightBuildConstraints() abort
|
||||||
|
return get(g:, 'go_highlight_build_constraints', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightStringSpellcheck() abort
|
||||||
|
return get(g:, 'go_highlight_string_spellcheck', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightFormatStrings() abort
|
||||||
|
return get(g:, 'go_highlight_format_strings', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightGenerateTags() abort
|
||||||
|
return get(g:, 'go_highlight_generate_tags', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightVariableAssignments() abort
|
||||||
|
return get(g:, 'go_highlight_variable_assignments', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightVariableDeclarations() abort
|
||||||
|
return get(g:, 'go_highlight_variable_declarations', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#FoldEnable(...) abort
|
||||||
|
if a:0 > 0
|
||||||
|
return index(go#config#FoldEnable(), a:1) > -1
|
||||||
|
endif
|
||||||
|
return get(g:, 'go_fold_enable', ['block', 'import', 'varconst', 'package_comment'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Set the default value. A value of "1" is a shortcut for this, for
|
||||||
|
" compatibility reasons.
|
||||||
|
if exists("g:go_gorename_prefill") && g:go_gorename_prefill == 1
|
||||||
|
unlet g:go_gorename_prefill
|
||||||
|
endif
|
||||||
|
|
||||||
|
" vim: sw=2 ts=2 et
|
||||||
|
|
||||||
|
endif
|
||||||
246
autoload/julia/doc.vim
Normal file
246
autoload/julia/doc.vim
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||||
|
|
||||||
|
" path to the julia binary to communicate with
|
||||||
|
if has('win32') || has('win64')
|
||||||
|
if exists('g:julia#doc#juliapath')
|
||||||
|
" use assigned g:julia#doc#juliapath
|
||||||
|
elseif executable('julia')
|
||||||
|
" use julia command in PATH
|
||||||
|
let g:julia#doc#juliapath = 'julia'
|
||||||
|
else
|
||||||
|
" search julia binary in the default installation paths
|
||||||
|
let pathlist = sort(glob($LOCALAPPDATA . '\Julia-*\bin\julia.exe', 1, 1))
|
||||||
|
let g:julia#doc#juliapath = get(pathlist, -1, 'julia')
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let g:julia#doc#juliapath = get(g:, 'julia#doc#juliapath', 'julia')
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! s:version() abort
|
||||||
|
let VERSION = {'major': 0, 'minor': 0}
|
||||||
|
if !executable(g:julia#doc#juliapath)
|
||||||
|
return VERSION
|
||||||
|
endif
|
||||||
|
|
||||||
|
let cmd = printf('%s -v', g:julia#doc#juliapath)
|
||||||
|
let output = system(cmd)
|
||||||
|
let versionstr = matchstr(output, '\C^julia version \zs\d\+\.\d\+\ze')
|
||||||
|
let [major, minor] = map(split(versionstr, '\.'), 'str2nr(v:val)')
|
||||||
|
let VERSION.major = major
|
||||||
|
let VERSION.minor = minor
|
||||||
|
return VERSION
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:VERSION = s:version()
|
||||||
|
let s:NODOCPATTERN = '\C\VNo documentation found.'
|
||||||
|
|
||||||
|
function! julia#doc#lookup(keyword, ...) abort
|
||||||
|
let juliapath = get(a:000, 0, g:julia#doc#juliapath)
|
||||||
|
let keyword = escape(a:keyword, '"\')
|
||||||
|
let cmd = printf('%s -E "@doc %s"', juliapath, keyword)
|
||||||
|
return systemlist(cmd)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! julia#doc#open(keyword) abort
|
||||||
|
if empty(a:keyword)
|
||||||
|
call s:warn('Not an appropriate keyword.')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !executable(g:julia#doc#juliapath)
|
||||||
|
call s:warn('%s command is not executable', g:julia#doc#juliapath)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let doc = julia#doc#lookup(a:keyword, g:julia#doc#juliapath)
|
||||||
|
if empty(doc) || match(doc[0], s:NODOCPATTERN) > -1
|
||||||
|
call s:warn('No documentation found for "%s".', a:keyword)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" workaround for * and ? since a buffername cannot include them
|
||||||
|
let keyword = a:keyword
|
||||||
|
let keyword = substitute(keyword, '\*', ':asterisk:', 'g')
|
||||||
|
let keyword = substitute(keyword, '?', ':question:', 'g')
|
||||||
|
let buffername = printf('juliadoc: %s', keyword)
|
||||||
|
|
||||||
|
call s:write_to_preview_window(doc, "juliadoc", buffername)
|
||||||
|
|
||||||
|
call filter(s:HELPHISTORY, 'v:val isnot# a:keyword')
|
||||||
|
call add(s:HELPHISTORY, a:keyword)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:write_to_preview_window(content, ftype, buffername)
|
||||||
|
" Are we in the preview window from the outset? If not, best to close any
|
||||||
|
" preview windows that might exist.
|
||||||
|
let pvw = &previewwindow
|
||||||
|
if !pvw
|
||||||
|
silent! pclose!
|
||||||
|
endif
|
||||||
|
execute "silent! pedit +setlocal\\ nobuflisted\\ noswapfile\\"
|
||||||
|
\ "buftype=nofile\\ bufhidden=wipe" a:buffername
|
||||||
|
silent! wincmd P
|
||||||
|
if &previewwindow
|
||||||
|
setlocal modifiable noreadonly
|
||||||
|
silent! %delete _
|
||||||
|
call append(0, a:content)
|
||||||
|
silent! $delete _
|
||||||
|
normal! ggj
|
||||||
|
setlocal nomodified readonly nomodifiable
|
||||||
|
execute "setfiletype" a:ftype
|
||||||
|
" Only return to a normal window if we didn't start in a preview window.
|
||||||
|
if !pvw
|
||||||
|
silent! wincmd p
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" We couldn't make it to the preview window, so as a fallback we dump the
|
||||||
|
" contents in the status area.
|
||||||
|
execute printf("echo '%s'", join(a:content, "\n"))
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:warn(...) abort
|
||||||
|
if a:0 == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
echohl WarningMsg
|
||||||
|
try
|
||||||
|
if a:0 == 1
|
||||||
|
echo a:1
|
||||||
|
else
|
||||||
|
echo call('printf', a:000)
|
||||||
|
endif
|
||||||
|
finally
|
||||||
|
echohl None
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let s:KEYWORDPATTERN = '\m@\?\h\k*!\?'
|
||||||
|
|
||||||
|
" This function is called in normal mode or visual mode.
|
||||||
|
function! julia#doc#keywordprg(word) abort
|
||||||
|
if a:word is# ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let word = s:unfnameescape(a:word)
|
||||||
|
if word is# expand('<cword>')
|
||||||
|
" 'K' in normal mode
|
||||||
|
" NOTE: Because ! and @ is not in 'iskeyword' option, this func ignore
|
||||||
|
" the argument to recognize keywords like "@time" and "push!"
|
||||||
|
let view = winsaveview()
|
||||||
|
let lnum = line('.')
|
||||||
|
let tail = searchpos(s:KEYWORDPATTERN, 'ce', lnum)
|
||||||
|
let head = searchpos(s:KEYWORDPATTERN, 'bc', lnum)
|
||||||
|
call winrestview(view)
|
||||||
|
if head == [0, 0] || tail == [0, 0]
|
||||||
|
return
|
||||||
|
else
|
||||||
|
let start = head[1] - 1
|
||||||
|
let end = tail[1] - 1
|
||||||
|
let word = getline(lnum)[start : end]
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call julia#doc#open(word)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
if exists('+shellslash')
|
||||||
|
let s:ESCAPEDCHARS = " \t\n\"#%'*<?`|"
|
||||||
|
else
|
||||||
|
let s:ESCAPEDCHARS = " \t\n*?[{`$\\%#'\"|!<"
|
||||||
|
endif
|
||||||
|
let s:FNAMEESCAPEPATTERN = '\\\ze[' . escape(s:ESCAPEDCHARS, ']^-\') . ']'
|
||||||
|
|
||||||
|
" this function reproduces an original string escaped by fnameescape()
|
||||||
|
function! s:unfnameescape(str) abort
|
||||||
|
if a:str is# ''
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
" NOTE: We cannot determine the original string if a:str starts from '\-',
|
||||||
|
" '\+' or '\>' because fnameescape('-') ==# fnameescape('\-').
|
||||||
|
if a:str is# '\-'
|
||||||
|
" Remove escape anyway.
|
||||||
|
return '-'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:str =~# '^\\[+>]'
|
||||||
|
let str = a:str[1:]
|
||||||
|
else
|
||||||
|
let str = a:str
|
||||||
|
endif
|
||||||
|
return substitute(str, s:FNAMEESCAPEPATTERN, '', 'g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let s:HELPPROMPT = 'help?> '
|
||||||
|
let s:HELPHISTORY = []
|
||||||
|
|
||||||
|
function! julia#doc#prompt() abort
|
||||||
|
let inputhist = s:savehistory('input')
|
||||||
|
echohl MoreMsg
|
||||||
|
try
|
||||||
|
call s:restorehistory('input', s:HELPHISTORY)
|
||||||
|
let keyword = input(s:HELPPROMPT, '', 'customlist,julia#doc#complete')
|
||||||
|
|
||||||
|
" Clear the last prompt
|
||||||
|
normal! :
|
||||||
|
finally
|
||||||
|
echohl None
|
||||||
|
call s:restorehistory('input', inputhist)
|
||||||
|
endtry
|
||||||
|
|
||||||
|
if empty(keyword)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call julia#doc#open(keyword)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:savehistory(name) abort
|
||||||
|
if histnr(a:name) == -1
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let history = []
|
||||||
|
for i in range(1, histnr(a:name))
|
||||||
|
let item = histget(a:name, i)
|
||||||
|
if !empty(item)
|
||||||
|
call add(history, item)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return history
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:restorehistory(name, history) abort
|
||||||
|
call histdel(a:name)
|
||||||
|
for item in a:history
|
||||||
|
call histadd(a:name, item)
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if s:VERSION.major == 0 && s:VERSION.minor <= 6
|
||||||
|
let s:REPL_SEARCH = 'Base.Docs.repl_search'
|
||||||
|
else
|
||||||
|
let s:REPL_SEARCH = 'import REPL.repl_search; repl_search'
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! julia#doc#complete(ArgLead, CmdLine, CursorPos) abort
|
||||||
|
return s:likely(a:ArgLead)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:likely(str) abort
|
||||||
|
" escape twice
|
||||||
|
let str = escape(escape(a:str, '"\'), '"\')
|
||||||
|
let cmd = printf('%s -E "%s(\"%s\")"', g:julia#doc#juliapath, s:REPL_SEARCH, str)
|
||||||
|
let output = systemlist(cmd)
|
||||||
|
return split(matchstr(output[0], '\C^search: \zs.*'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -244,8 +244,8 @@ function! julia_blocks#init_mappings()
|
|||||||
call julia_blocks#select_reset()
|
call julia_blocks#select_reset()
|
||||||
augroup JuliaBlocks
|
augroup JuliaBlocks
|
||||||
au!
|
au!
|
||||||
au InsertEnter *.jl call julia_blocks#select_reset()
|
au InsertEnter <buffer> call julia_blocks#select_reset()
|
||||||
au CursorMoved *.jl call s:cursor_moved()
|
au CursorMoved <buffer> call s:cursor_moved()
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
" we would need some autocmd event associated with exiting from
|
" we would need some autocmd event associated with exiting from
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -105,7 +105,7 @@ function! s:GetBufferRubyEntity( name, type, ... )
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let curpos = getpos(".")
|
let curpos = getpos(".")
|
||||||
let [enum,ecol] = searchpairpos( crex, '', '\(end\|}\)', 'wr' )
|
let [enum,ecol] = searchpairpos( crex, '', '\(end\|}\)', 'W' )
|
||||||
call cursor(lastpos[1], lastpos[2])
|
call cursor(lastpos[1], lastpos[2])
|
||||||
|
|
||||||
if lnum > enum
|
if lnum > enum
|
||||||
@@ -255,15 +255,27 @@ class VimRubyCompletion
|
|||||||
|
|
||||||
# {{{ buffer analysis magic
|
# {{{ buffer analysis magic
|
||||||
def load_requires
|
def load_requires
|
||||||
|
|
||||||
|
custom_paths = VIM::evaluate("get(g:, 'rubycomplete_load_paths', [])")
|
||||||
|
|
||||||
|
if !custom_paths.empty?
|
||||||
|
$LOAD_PATH.concat(custom_paths).uniq!
|
||||||
|
end
|
||||||
|
|
||||||
buf = VIM::Buffer.current
|
buf = VIM::Buffer.current
|
||||||
enum = buf.line_number
|
enum = buf.line_number
|
||||||
nums = Range.new( 1, enum )
|
nums = Range.new( 1, enum )
|
||||||
nums.each do |x|
|
nums.each do |x|
|
||||||
|
|
||||||
ln = buf[x]
|
ln = buf[x]
|
||||||
begin
|
begin
|
||||||
eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
|
if /.*require_relative\s*(.*)$/.match( ln )
|
||||||
rescue Exception
|
eval( "require %s" % File.expand_path($1) )
|
||||||
#ignore?
|
elsif /.*require\s*(["'].*?["'])/.match( ln )
|
||||||
|
eval( "require %s" % $1 )
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
dprint e.inspect
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -346,8 +358,13 @@ class VimRubyCompletion
|
|||||||
if x != cur_line
|
if x != cur_line
|
||||||
next if x == 0
|
next if x == 0
|
||||||
ln = buf[x]
|
ln = buf[x]
|
||||||
if /^\s*(module|class|def|include)\s+/.match(ln)
|
is_const = false
|
||||||
clscnt += 1 if $1 == "class"
|
if /^\s*(module|class|def|include)\s+/.match(ln) || is_const = /^\s*?[A-Z]([A-z]|[1-9])*\s*?[|]{0,2}=\s*?.+\s*?/.match(ln)
|
||||||
|
clscnt += 1 if /class|module/.match($1)
|
||||||
|
# We must make sure to load each constant only once to avoid errors
|
||||||
|
if is_const
|
||||||
|
ln.gsub!(/\s*?[|]{0,2}=\s*?/, '||=')
|
||||||
|
end
|
||||||
#dprint "\$1$1
|
#dprint "\$1$1
|
||||||
classdef += "%s\n" % ln
|
classdef += "%s\n" % ln
|
||||||
classdef += "end\n" if /def\s+/.match(ln)
|
classdef += "end\n" if /def\s+/.match(ln)
|
||||||
@@ -425,7 +442,6 @@ class VimRubyCompletion
|
|||||||
return get_buffer_entity_list( "class" )
|
return get_buffer_entity_list( "class" )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def load_rails
|
def load_rails
|
||||||
allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
|
allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
|
||||||
return if allow_rails.to_i.zero?
|
return if allow_rails.to_i.zero?
|
||||||
@@ -531,7 +547,6 @@ class VimRubyCompletion
|
|||||||
ret += ActiveRecord::ConnectionAdapters::SchemaStatements.methods
|
ret += ActiveRecord::ConnectionAdapters::SchemaStatements.methods
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -617,7 +632,6 @@ class VimRubyCompletion
|
|||||||
want_gems = VIM::evaluate("get(g:, 'rubycomplete_load_gemfile')")
|
want_gems = VIM::evaluate("get(g:, 'rubycomplete_load_gemfile')")
|
||||||
load_gems unless want_gems.to_i.zero?
|
load_gems unless want_gems.to_i.zero?
|
||||||
|
|
||||||
|
|
||||||
input = VIM::Buffer.current.line
|
input = VIM::Buffer.current.line
|
||||||
cpos = VIM::Window.current.cursor[1] - 1
|
cpos = VIM::Window.current.cursor[1] - 1
|
||||||
input = input[0..cpos]
|
input = input[0..cpos]
|
||||||
@@ -670,6 +684,7 @@ class VimRubyCompletion
|
|||||||
message = Regexp.quote($4)
|
message = Regexp.quote($4)
|
||||||
dprint "const or cls 2 [recv: \'%s\', msg: \'%s\']" % [ receiver, message ]
|
dprint "const or cls 2 [recv: \'%s\', msg: \'%s\']" % [ receiver, message ]
|
||||||
load_buffer_class( receiver )
|
load_buffer_class( receiver )
|
||||||
|
load_buffer_module( receiver )
|
||||||
begin
|
begin
|
||||||
classes = eval("#{receiver}.constants")
|
classes = eval("#{receiver}.constants")
|
||||||
#methods = eval("#{receiver}.methods")
|
#methods = eval("#{receiver}.methods")
|
||||||
@@ -790,7 +805,6 @@ class VimRubyCompletion
|
|||||||
methods += Kernel.public_methods
|
methods += Kernel.public_methods
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
include_object = VIM::evaluate("exists('g:rubycomplete_include_object') && g:rubycomplete_include_object")
|
include_object = VIM::evaluate("exists('g:rubycomplete_include_object') && g:rubycomplete_include_object")
|
||||||
methods = clean_sel( methods, message )
|
methods = clean_sel( methods, message )
|
||||||
methods = (methods-Object.instance_methods) if include_object == "0"
|
methods = (methods-Object.instance_methods) if include_object == "0"
|
||||||
@@ -833,7 +847,6 @@ let s:rubycomplete_rails_loaded = 0
|
|||||||
call s:DefRuby()
|
call s:DefRuby()
|
||||||
"}}} ruby-side code
|
"}}} ruby-side code
|
||||||
|
|
||||||
|
|
||||||
" vim:tw=78:sw=4:ts=8:et:fdm=marker:ft=vim:norl:
|
" vim:tw=78:sw=4:ts=8:et:fdm=marker:ft=vim:norl:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -7,6 +7,22 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
|||||||
|
|
||||||
" Jump {{{1
|
" Jump {{{1
|
||||||
|
|
||||||
|
function! rust#Load()
|
||||||
|
" Utility call to get this script loaded, for debugging
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! rust#GetConfigVar(name, default)
|
||||||
|
" Local buffer variable with same name takes predeence over global
|
||||||
|
if has_key(b:, a:name)
|
||||||
|
return get(b:, a:name)
|
||||||
|
endif
|
||||||
|
if has_key(g:, a:name)
|
||||||
|
return get(g:, a:name)
|
||||||
|
endif
|
||||||
|
return a:default
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! rust#Jump(mode, function) range
|
function! rust#Jump(mode, function) range
|
||||||
let cnt = v:count1
|
let cnt = v:count1
|
||||||
normal! m'
|
normal! m'
|
||||||
@@ -70,7 +86,7 @@ function! s:Run(dict, rustc_args, args)
|
|||||||
|
|
||||||
let pwd = a:dict.istemp ? a:dict.tmpdir : ''
|
let pwd = a:dict.istemp ? a:dict.tmpdir : ''
|
||||||
let output = s:system(pwd, shellescape(rustc) . " " . join(map(rustc_args, 'shellescape(v:val)')))
|
let output = s:system(pwd, shellescape(rustc) . " " . join(map(rustc_args, 'shellescape(v:val)')))
|
||||||
if output != ''
|
if output !=# ''
|
||||||
echohl WarningMsg
|
echohl WarningMsg
|
||||||
echo output
|
echo output
|
||||||
echohl None
|
echohl None
|
||||||
@@ -137,7 +153,7 @@ function! s:Expand(dict, pretty, args)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! rust#CompleteExpand(lead, line, pos)
|
function! rust#CompleteExpand(lead, line, pos)
|
||||||
if a:line[: a:pos-1] =~ '^RustExpand!\s*\S*$'
|
if a:line[: a:pos-1] =~# '^RustExpand!\s*\S*$'
|
||||||
" first argument and it has a !
|
" first argument and it has a !
|
||||||
let list = ["normal", "expanded", "typed", "expanded,identified", "flowgraph=", "everybody_loops"]
|
let list = ["normal", "expanded", "typed", "expanded,identified", "flowgraph=", "everybody_loops"]
|
||||||
if !empty(a:lead)
|
if !empty(a:lead)
|
||||||
@@ -166,7 +182,7 @@ function! s:Emit(dict, type, args)
|
|||||||
let args = [relpath, '--emit', a:type, '-o', output_path] + a:args
|
let args = [relpath, '--emit', a:type, '-o', output_path] + a:args
|
||||||
let pwd = a:dict.istemp ? a:dict.tmpdir : ''
|
let pwd = a:dict.istemp ? a:dict.tmpdir : ''
|
||||||
let output = s:system(pwd, shellescape(rustc) . " " . join(map(args, 'shellescape(v:val)')))
|
let output = s:system(pwd, shellescape(rustc) . " " . join(map(args, 'shellescape(v:val)')))
|
||||||
if output != ''
|
if output !=# ''
|
||||||
echohl WarningMsg
|
echohl WarningMsg
|
||||||
echo output
|
echo output
|
||||||
echohl None
|
echohl None
|
||||||
@@ -176,10 +192,10 @@ function! s:Emit(dict, type, args)
|
|||||||
exe 'silent keepalt read' fnameescape(output_path)
|
exe 'silent keepalt read' fnameescape(output_path)
|
||||||
1
|
1
|
||||||
d
|
d
|
||||||
if a:type == "llvm-ir"
|
if a:type ==# "llvm-ir"
|
||||||
setl filetype=llvm
|
setl filetype=llvm
|
||||||
let extension = 'll'
|
let extension = 'll'
|
||||||
elseif a:type == "asm"
|
elseif a:type ==# "asm"
|
||||||
setl filetype=asm
|
setl filetype=asm
|
||||||
let extension = 's'
|
let extension = 's'
|
||||||
endif
|
endif
|
||||||
@@ -245,8 +261,8 @@ function! s:WithPath(func, ...)
|
|||||||
let dict.tmpdir_relpath = filename
|
let dict.tmpdir_relpath = filename
|
||||||
let dict.path = dict.tmpdir.'/'.filename
|
let dict.path = dict.tmpdir.'/'.filename
|
||||||
|
|
||||||
let saved.mod = &mod
|
let saved.mod = &modified
|
||||||
set nomod
|
set nomodified
|
||||||
|
|
||||||
silent exe 'keepalt write! ' . fnameescape(dict.path)
|
silent exe 'keepalt write! ' . fnameescape(dict.path)
|
||||||
if pathisempty
|
if pathisempty
|
||||||
@@ -327,7 +343,7 @@ function! s:ShellTokenize(text)
|
|||||||
endif
|
endif
|
||||||
let l:state = 3
|
let l:state = 3
|
||||||
elseif l:state == 5 " single-quoted
|
elseif l:state == 5 " single-quoted
|
||||||
if l:c == "'"
|
if l:c ==# "'"
|
||||||
let l:state = 1
|
let l:state = 1
|
||||||
else
|
else
|
||||||
let l:current .= l:c
|
let l:current .= l:c
|
||||||
@@ -345,7 +361,7 @@ function! s:RmDir(path)
|
|||||||
if empty(a:path)
|
if empty(a:path)
|
||||||
echoerr 'Attempted to delete empty path'
|
echoerr 'Attempted to delete empty path'
|
||||||
return 0
|
return 0
|
||||||
elseif a:path == '/' || a:path == $HOME
|
elseif a:path ==# '/' || a:path ==# $HOME
|
||||||
echoerr 'Attempted to delete protected path: ' . a:path
|
echoerr 'Attempted to delete protected path: ' . a:path
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
@@ -398,26 +414,87 @@ function! rust#Play(count, line1, line2, ...) abort
|
|||||||
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 url = l:rust_playpen_url."?code=".webapi#http#encodeURI(content)
|
||||||
|
|
||||||
if strlen(body) > 5000
|
if strlen(url) > 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(url).')' | echohl None
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let payload = "format=simple&url=".webapi#http#encodeURI(body)
|
let payload = "format=simple&url=".webapi#http#encodeURI(url)
|
||||||
let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {})
|
let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {})
|
||||||
|
if res.status[0] ==# '2'
|
||||||
let url = res.content
|
let url = res.content
|
||||||
|
|
||||||
if exists('g:rust_clip_command')
|
|
||||||
call system(g:rust_clip_command, url)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
redraw | echomsg 'Done: '.url
|
let footer = ''
|
||||||
|
if exists('g:rust_clip_command')
|
||||||
|
call system(g:rust_clip_command, url)
|
||||||
|
if !v:shell_error
|
||||||
|
let footer = ' (copied to clipboard)'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
redraw | echomsg 'Done: '.url.footer
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Run a test under the cursor or all tests {{{1
|
||||||
|
|
||||||
|
" Finds a test function name under the cursor. Returns empty string when a
|
||||||
|
" test function is not found.
|
||||||
|
function! s:SearchTestFunctionNameUnderCursor() abort
|
||||||
|
let cursor_line = line('.')
|
||||||
|
|
||||||
|
" Find #[test] attribute
|
||||||
|
if search('#\[test]', 'bcW') is 0
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Move to an opening brace of the test function
|
||||||
|
let test_func_line = search('^\s*fn\s\+\h\w*\s*(.\+{$', 'eW')
|
||||||
|
if test_func_line is 0
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Search the end of test function (closing brace) to ensure that the
|
||||||
|
" cursor position is within function definition
|
||||||
|
normal! %
|
||||||
|
if line('.') < cursor_line
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return matchstr(getline(test_func_line), '^\s*fn\s\+\zs\h\w*')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! rust#Test(all, options) abort
|
||||||
|
let pwd = expand('%:p:h')
|
||||||
|
if findfile('Cargo.toml', pwd . ';') ==# ''
|
||||||
|
return rust#Run(1, '--test ' . a:options)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let pwd = shellescape(pwd)
|
||||||
|
|
||||||
|
if a:all
|
||||||
|
execute '!cd ' . pwd . ' && cargo test ' . a:options
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let saved = getpos('.')
|
||||||
|
try
|
||||||
|
let func_name = s:SearchTestFunctionNameUnderCursor()
|
||||||
|
if func_name ==# ''
|
||||||
|
echohl ErrorMsg
|
||||||
|
echo 'No test function was found under the cursor. Please add ! to command if you want to run all tests'
|
||||||
|
echohl None
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
execute '!cd ' . pwd . ' && cargo test ' . func_name . ' ' . a:options
|
||||||
|
finally
|
||||||
|
call setpos('.', saved)
|
||||||
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
" vim: set noet sw=8 ts=8:
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
99
autoload/rust/debugging.vim
Normal file
99
autoload/rust/debugging.vim
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
|
" For debugging, inspired by https://github.com/w0rp/rust/blob/master/autoload/rust/debugging.vim
|
||||||
|
|
||||||
|
let s:global_variable_list = [
|
||||||
|
\ 'ftplugin_rust_source_path',
|
||||||
|
\ 'loaded_syntastic_rust_cargo_checker',
|
||||||
|
\ 'loaded_syntastic_rust_filetype',
|
||||||
|
\ 'loaded_syntastic_rust_rustc_checker',
|
||||||
|
\ 'rust_bang_comment_leader',
|
||||||
|
\ 'rust_cargo_avoid_whole_workspace',
|
||||||
|
\ 'rust_clip_command',
|
||||||
|
\ 'rust_conceal',
|
||||||
|
\ 'rust_conceal_mod_path',
|
||||||
|
\ 'rust_conceal_pub',
|
||||||
|
\ 'rust_fold',
|
||||||
|
\ 'rust_last_args',
|
||||||
|
\ 'rust_last_rustc_args',
|
||||||
|
\ 'rust_original_delimitMate_excluded_regions',
|
||||||
|
\ 'rust_playpen_url',
|
||||||
|
\ 'rust_prev_delimitMate_quotes',
|
||||||
|
\ 'rust_recent_nearest_cargo_tol',
|
||||||
|
\ 'rust_recent_root_cargo_toml',
|
||||||
|
\ 'rust_recommended_style',
|
||||||
|
\ 'rust_set_conceallevel',
|
||||||
|
\ 'rust_set_conceallevel=1',
|
||||||
|
\ 'rust_set_foldmethod',
|
||||||
|
\ 'rust_set_foldmethod=1',
|
||||||
|
\ 'rust_shortener_url',
|
||||||
|
\ 'rustc_makeprg_no_percent',
|
||||||
|
\ 'rustc_path',
|
||||||
|
\ 'rustfmt_autosave',
|
||||||
|
\ 'rustfmt_autosave_because_of_config',
|
||||||
|
\ 'rustfmt_autosave_if_config_present',
|
||||||
|
\ 'rustfmt_command',
|
||||||
|
\ 'rustfmt_emit_files',
|
||||||
|
\ 'rustfmt_fail_silently',
|
||||||
|
\ 'rustfmt_options',
|
||||||
|
\ 'syntastic_extra_filetypes',
|
||||||
|
\ 'syntastic_rust_cargo_fname',
|
||||||
|
\]
|
||||||
|
|
||||||
|
function! s:Echo(message) abort
|
||||||
|
execute 'echo a:message'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:EchoGlobalVariables() abort
|
||||||
|
for l:key in s:global_variable_list
|
||||||
|
call s:Echo('let g:' . l:key . ' = ' . string(get(g:, l:key, v:null)))
|
||||||
|
|
||||||
|
if has_key(b:, l:key)
|
||||||
|
call s:Echo('let b:' . l:key . ' = ' . string(b:[l:key]))
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! rust#debugging#Info() abort
|
||||||
|
call cargo#Load()
|
||||||
|
call rust#Load()
|
||||||
|
call rustfmt#Load()
|
||||||
|
call s:Echo('rust.vim Global Variables:')
|
||||||
|
call s:Echo('')
|
||||||
|
call s:EchoGlobalVariables()
|
||||||
|
|
||||||
|
silent let l:output = system(g:rustfmt_command . ' --version')
|
||||||
|
echo l:output
|
||||||
|
|
||||||
|
let l:rustc = exists("g:rustc_path") ? g:rustc_path : "rustc"
|
||||||
|
silent let l:output = system(l:rustc . ' --version')
|
||||||
|
echo l:output
|
||||||
|
|
||||||
|
silent let l:output = system('cargo --version')
|
||||||
|
echo l:output
|
||||||
|
|
||||||
|
version
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! rust#debugging#InfoToClipboard() abort
|
||||||
|
redir @"
|
||||||
|
silent call rust#debugging#Info()
|
||||||
|
redir END
|
||||||
|
|
||||||
|
call s:Echo('RustInfo copied to your clipboard')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! rust#debugging#InfoToFile(filename) abort
|
||||||
|
let l:expanded_filename = expand(a:filename)
|
||||||
|
|
||||||
|
redir => l:output
|
||||||
|
silent call rust#debugging#Info()
|
||||||
|
redir END
|
||||||
|
|
||||||
|
call writefile(split(l:output, "\n"), l:expanded_filename)
|
||||||
|
call s:Echo('RustInfo written to ' . l:expanded_filename)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
|
endif
|
||||||
48
autoload/rust/delimitmate.vim
Normal file
48
autoload/rust/delimitmate.vim
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
|
let s:delimitMate_extra_excluded_regions = ',rustLifetimeCandidate,rustGenericLifetimeCandidate'
|
||||||
|
|
||||||
|
" For this buffer, when delimitMate issues the `User delimitMate_map`
|
||||||
|
" event in the autocommand system, add the above-defined extra excluded
|
||||||
|
" regions to delimitMate's state, if they have not already been added.
|
||||||
|
function! rust#delimitmate#onMap() abort
|
||||||
|
if &filetype !=# 'rust'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if get(b:, "delimitMate_quotes")
|
||||||
|
let b:rust_prev_delimitMate_quotes = b:delimitMate_quotes
|
||||||
|
endif
|
||||||
|
let b:delimitMate_quotes = "\" `"
|
||||||
|
|
||||||
|
if match(delimitMate#Get("excluded_regions"),
|
||||||
|
\ s:delimitMate_extra_excluded_regions) == -1
|
||||||
|
call delimitMate#Set("excluded_regions",
|
||||||
|
\delimitMate#Get("excluded_regions").s:delimitMate_extra_excluded_regions)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" For this buffer, when delimitMate issues the `User delimitMate_unmap`
|
||||||
|
" event in the autocommand system, delete the above-defined extra excluded
|
||||||
|
" regions from delimitMate's state (the deletion being idempotent and
|
||||||
|
" having no effect if the extra excluded regions are not present in the
|
||||||
|
" targeted part of delimitMate's state).
|
||||||
|
function! rust#delimitmate#onUnmap() abort
|
||||||
|
if &filetype !=# 'rust'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if get(b:, "rust_prev_delimitMate_quotes")
|
||||||
|
let b:delimitMate_quotes = b:rust_prev_delimitMate_quotes
|
||||||
|
endif
|
||||||
|
|
||||||
|
call delimitMate#Set("excluded_regions", substitute(
|
||||||
|
\ delimitMate#Get("excluded_regions"),
|
||||||
|
\ '\C\V' . s:delimitMate_extra_excluded_regions,
|
||||||
|
\ '', 'g'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -21,32 +21,146 @@ 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
|
function! rustfmt#DetectVersion()
|
||||||
|
" Save rustfmt '--help' for feature inspection
|
||||||
|
silent let s:rustfmt_help = system(g:rustfmt_command . " --help")
|
||||||
|
let s:rustfmt_unstable_features = 1 - (s:rustfmt_help !~# "--unstable-features")
|
||||||
|
|
||||||
function! s:RustfmtCommandRange(filename, line1, line2)
|
" Build a comparable rustfmt version varible out of its `--version` output:
|
||||||
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
|
silent let s:rustfmt_version = system(g:rustfmt_command . " --version")
|
||||||
return printf("%s %s --write-mode=overwrite --file-lines '[%s]'", g:rustfmt_command, g:rustfmt_options, json_encode(l:arg))
|
let s:rustfmt_version = matchlist(s:rustfmt_version, '\vrustfmt ([0-9]+[.][0-9]+[.][0-9]+)')
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:RustfmtCommand(filename)
|
if len(s:rustfmt_version) < 3
|
||||||
return g:rustfmt_command . " --write-mode=overwrite " . g:rustfmt_options . " " . shellescape(a:filename)
|
let s:rustfmt_version = "0"
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:RunRustfmt(command, curw, tmpname)
|
|
||||||
if exists("*systemlist")
|
|
||||||
let out = systemlist(a:command)
|
|
||||||
else
|
else
|
||||||
let out = split(system(a:command), '\r\?\n')
|
let s:rustfmt_version = s:rustfmt_version[1]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if v:shell_error == 0 || v:shell_error == 3
|
return s:rustfmt_version
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call rustfmt#DetectVersion()
|
||||||
|
|
||||||
|
if !exists("g:rustfmt_emit_files")
|
||||||
|
let g:rustfmt_emit_files = s:rustfmt_version >= "0.8.2"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("g:rustfmt_file_lines")
|
||||||
|
let g:rustfmt_file_lines = 1 - (s:rustfmt_help !~# "--file-lines JSON")
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:got_fmt_error = 0
|
||||||
|
|
||||||
|
function! rustfmt#Load()
|
||||||
|
" Utility call to get this script loaded, for debugging
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:RustfmtWriteMode()
|
||||||
|
if g:rustfmt_emit_files
|
||||||
|
return "--emit=files"
|
||||||
|
else
|
||||||
|
return "--write-mode=overwrite"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:RustfmtConfig()
|
||||||
|
let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
|
||||||
|
if l:rustfmt_toml !=# ''
|
||||||
|
return '--config-path '.l:rustfmt_toml
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';')
|
||||||
|
if l:_rustfmt_toml !=# ''
|
||||||
|
return '--config-path '.l:_rustfmt_toml
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:RustfmtCommandRange(filename, line1, line2)
|
||||||
|
if g:rustfmt_file_lines == 0
|
||||||
|
echo "--file-lines is not supported in the installed `rustfmt` executable"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
|
||||||
|
let l:write_mode = s:RustfmtWriteMode()
|
||||||
|
let l:rustfmt_config = s:RustfmtConfig()
|
||||||
|
|
||||||
|
" FIXME: When --file-lines gets to be stable, enhance this version range checking
|
||||||
|
" accordingly.
|
||||||
|
let l:unstable_features =
|
||||||
|
\ (s:rustfmt_unstable_features && (s:rustfmt_version < '1.'))
|
||||||
|
\ ? '--unstable-features' : ''
|
||||||
|
|
||||||
|
let l:cmd = printf("%s %s %s %s %s --file-lines '[%s]' %s", g:rustfmt_command,
|
||||||
|
\ l:write_mode, g:rustfmt_options,
|
||||||
|
\ l:unstable_features, l:rustfmt_config,
|
||||||
|
\ json_encode(l:arg), shellescape(a:filename))
|
||||||
|
return l:cmd
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:RustfmtCommand()
|
||||||
|
if g:rustfmt_emit_files
|
||||||
|
let l:write_mode = "--emit=stdout"
|
||||||
|
else
|
||||||
|
let l:write_mode = "--write-mode=display"
|
||||||
|
endif
|
||||||
|
" rustfmt will pick on the right config on its own due to the
|
||||||
|
" current directory change.
|
||||||
|
return g:rustfmt_command . " ". l:write_mode . " " . g:rustfmt_options
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:DeleteLines(start, end) abort
|
||||||
|
silent! execute a:start . ',' . a:end . 'delete _'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:RunRustfmt(command, tmpname, fail_silently)
|
||||||
|
mkview!
|
||||||
|
|
||||||
|
let l:stderr_tmpname = tempname()
|
||||||
|
let l:command = a:command . ' 2> ' . l:stderr_tmpname
|
||||||
|
|
||||||
|
if a:tmpname ==# ''
|
||||||
|
" Rustfmt in stdin/stdout mode
|
||||||
|
|
||||||
|
" chdir to the directory of the file
|
||||||
|
let l:has_lcd = haslocaldir()
|
||||||
|
let l:prev_cd = getcwd()
|
||||||
|
execute 'lchdir! '.expand('%:h')
|
||||||
|
|
||||||
|
let l:buffer = getline(1, '$')
|
||||||
|
if exists("*systemlist")
|
||||||
|
silent let out = systemlist(l:command, l:buffer)
|
||||||
|
else
|
||||||
|
silent let out = split(system(l:command, l:buffer), '\r\?\n')
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if exists("*systemlist")
|
||||||
|
silent let out = systemlist(l:command)
|
||||||
|
else
|
||||||
|
silent let out = split(system(l:command), '\r\?\n')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:stderr = readfile(l:stderr_tmpname)
|
||||||
|
|
||||||
|
call delete(l:stderr_tmpname)
|
||||||
|
|
||||||
|
if v:shell_error == 0
|
||||||
" 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
|
if a:tmpname ==# ''
|
||||||
call rename(a:tmpname, expand('%'))
|
let l:content = l:out
|
||||||
silent edit!
|
else
|
||||||
let &syntax = &syntax
|
" take the tmpfile's content, this is better than rename
|
||||||
|
" because it preserves file modes.
|
||||||
|
let l:content = readfile(a:tmpname)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call s:DeleteLines(len(l:content), line('$'))
|
||||||
|
call setline(1, l:content)
|
||||||
|
|
||||||
" 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
|
||||||
@@ -55,57 +169,84 @@ function! s:RunRustfmt(command, curw, tmpname)
|
|||||||
call setloclist(0, [])
|
call setloclist(0, [])
|
||||||
lwindow
|
lwindow
|
||||||
endif
|
endif
|
||||||
elseif g:rustfmt_fail_silently == 0
|
elseif g:rustfmt_fail_silently == 0 && a: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 l:errors = []
|
||||||
|
|
||||||
for line in out
|
let l:prev_line = ""
|
||||||
" src/lib.rs:13:5: 13:10 error: expected `,`, or `}`, found `value`
|
for l:line in l:stderr
|
||||||
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\):\s*\(\d\+:\d\+\s*\)\?\s*error: \(.*\)')
|
" error: expected one of `;` or `as`, found `extern`
|
||||||
|
" --> src/main.rs:2:1
|
||||||
|
let tokens = matchlist(l:line, '^\s\+-->\s\(.\{-}\):\(\d\+\):\(\d\+\)$')
|
||||||
if !empty(tokens)
|
if !empty(tokens)
|
||||||
call add(errors, {"filename": @%,
|
call add(l:errors, {"filename": @%,
|
||||||
\"lnum": tokens[2],
|
\"lnum": tokens[2],
|
||||||
\"col": tokens[3],
|
\"col": tokens[3],
|
||||||
\"text": tokens[5]})
|
\"text": l:prev_line})
|
||||||
endif
|
endif
|
||||||
|
let l:prev_line = l:line
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
if empty(errors)
|
if !empty(l:errors)
|
||||||
% | " Couldn't detect rustfmt error format, output errors
|
call setloclist(0, l:errors, 'r')
|
||||||
endif
|
|
||||||
|
|
||||||
if !empty(errors)
|
|
||||||
call setloclist(0, errors, 'r')
|
|
||||||
echohl Error | echomsg "rustfmt returned error" | echohl None
|
echohl Error | echomsg "rustfmt returned error" | echohl None
|
||||||
|
else
|
||||||
|
echo "rust.vim: was not able to parse rustfmt messages. Here is the raw output:"
|
||||||
|
echo "\n"
|
||||||
|
for l:line in l:stderr
|
||||||
|
echo l:line
|
||||||
|
endfor
|
||||||
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
|
|
||||||
call delete(a:tmpname)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call winrestview(a:curw)
|
" Restore the current directory if needed
|
||||||
|
if a:tmpname ==# ''
|
||||||
|
if l:has_lcd
|
||||||
|
execute 'lchdir! '.l:prev_cd
|
||||||
|
else
|
||||||
|
execute 'chdir! '.l:prev_cd
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! loadview
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! rustfmt#FormatRange(line1, line2)
|
function! rustfmt#FormatRange(line1, line2)
|
||||||
let l:curw = winsaveview()
|
let l:tmpname = tempname()
|
||||||
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:tmpname, 0)
|
||||||
call s:RunRustfmt(command, l:curw, l:tmpname)
|
call delete(l:tmpname)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! rustfmt#Format()
|
function! rustfmt#Format()
|
||||||
let l:curw = winsaveview()
|
call s:RunRustfmt(s:RustfmtCommand(), '', 0)
|
||||||
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
|
|
||||||
call writefile(getline(1, '$'), l:tmpname)
|
|
||||||
|
|
||||||
let command = s:RustfmtCommand(l:tmpname)
|
|
||||||
|
|
||||||
call s:RunRustfmt(command, l:curw, l:tmpname)
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! rustfmt#Cmd()
|
||||||
|
" Mainly for debugging
|
||||||
|
return s:RustfmtCommand()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! rustfmt#PreWrite()
|
||||||
|
if rust#GetConfigVar('rustfmt_autosave_if_config_present', 0)
|
||||||
|
if findfile('rustfmt.toml', '.;') !=# '' || findfile('.rustfmt.toml', '.;') !=# ''
|
||||||
|
let b:rustfmt_autosave = 1
|
||||||
|
let b:rustfmt_autosave_because_of_config = 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !rust#GetConfigVar("rustfmt_autosave", 0)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call s:RunRustfmt(s:RustfmtCommand(), '', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -94,44 +94,61 @@ let landmark_role = [
|
|||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
" Ref: https://www.w3.org/TR/dpub-aria-1.0/
|
" Ref: https://www.w3.org/TR/dpub-aria-1.0/
|
||||||
" Version: W3C Candidate Recommendation 15 December 2016
|
" Version: W3C Recommendation 14 December 2017
|
||||||
let dpub_role = [
|
let dpub_role = [
|
||||||
\ 'dpub-abstract',
|
\ 'doc-abstract',
|
||||||
\ 'dpub-afterword',
|
\ 'doc-acknowledgments',
|
||||||
\ 'dpub-appendix',
|
\ 'doc-afterword',
|
||||||
\ 'dpub-biblioentry',
|
\ 'doc-appendix',
|
||||||
\ 'dpub-bibliography',
|
\ 'doc-backlink',
|
||||||
\ 'dpub-biblioref',
|
\ 'doc-biblioentry',
|
||||||
\ 'dpub-chapter',
|
\ 'doc-bibliography',
|
||||||
\ 'dpub-cover',
|
\ 'doc-biblioref',
|
||||||
\ 'dpub-epilogue',
|
\ 'doc-chapter',
|
||||||
\ 'dpub-footnote',
|
\ 'doc-colophon',
|
||||||
\ 'dpub-footnotes',
|
\ 'doc-conclusion',
|
||||||
\ 'dpub-foreword',
|
\ 'doc-cover',
|
||||||
\ 'dpub-glossary',
|
\ 'doc-credit',
|
||||||
\ 'dpub-glossdef',
|
\ 'doc-credits',
|
||||||
\ 'dpub-glossref',
|
\ 'doc-dedication',
|
||||||
\ 'dpub-glossterm',
|
\ 'doc-endnote',
|
||||||
\ 'dpub-index',
|
\ 'doc-endnotes',
|
||||||
\ 'dpub-locator',
|
\ 'doc-epigraph',
|
||||||
\ 'dpub-noteref',
|
\ 'doc-epilogue',
|
||||||
\ 'dpub-notice',
|
\ 'doc-errata',
|
||||||
\ 'dpub-pagebreak',
|
\ 'doc-example',
|
||||||
\ 'dpub-pagelist',
|
\ 'doc-footnote',
|
||||||
\ 'dpub-part',
|
\ 'doc-foreword',
|
||||||
\ 'dpub-preface',
|
\ 'doc-glossary',
|
||||||
\ 'dpub-prologue',
|
\ 'doc-glossref',
|
||||||
\ 'dpub-pullquote',
|
\ 'doc-index',
|
||||||
\ 'dpub-qna',
|
\ 'doc-introduction',
|
||||||
\ 'dpub-subtitle',
|
\ 'doc-noteref',
|
||||||
\ 'dpub-tip',
|
\ 'doc-notice',
|
||||||
\ 'dpub-title',
|
\ 'doc-pagebreak',
|
||||||
\ 'dpub-toc'
|
\ 'doc-pagelist',
|
||||||
|
\ 'doc-part',
|
||||||
|
\ 'doc-preface',
|
||||||
|
\ 'doc-prologue',
|
||||||
|
\ 'doc-pullquote',
|
||||||
|
\ 'doc-qna',
|
||||||
|
\ 'doc-subtitle',
|
||||||
|
\ 'doc-tip',
|
||||||
|
\ 'doc-toc'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
" Ref: https://www.w3.org/TR/graphics-aria-1.0/
|
||||||
|
" Version: W3C Candidate Recommendation 29 March 2018
|
||||||
|
let graphic_role = [
|
||||||
|
\ 'graphics-document',
|
||||||
|
\ 'graphics-object',
|
||||||
|
\ 'graphics-symbol'
|
||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
let role = extend(widget_role, document_structure)
|
let role = extend(widget_role, document_structure)
|
||||||
let role = extend(role, landmark_role)
|
let role = extend(role, landmark_role)
|
||||||
let role = extend(role, dpub_role)
|
let role = extend(role, dpub_role)
|
||||||
|
let role = extend(role, graphic_role)
|
||||||
|
|
||||||
" https://www.w3.org/TR/wai-aria-1.1/#states_and_properties
|
" https://www.w3.org/TR/wai-aria-1.1/#states_and_properties
|
||||||
let global_states_and_properties = {
|
let global_states_and_properties = {
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ let attributes_value = {
|
|||||||
\ }
|
\ }
|
||||||
|
|
||||||
if g:html5_event_handler_attributes_complete == 1
|
if g:html5_event_handler_attributes_complete == 1
|
||||||
let event_handler_attributes = {'onabort': [], 'onblur': [], 'oncanplay': [], 'oncanplaythrough': [], 'onchange': [], 'onclick': [], 'oncontextmenu': [], 'ondblclick': [], 'ondrag': [], 'ondragend': [], 'ondragenter': [], 'ondragleave': [], 'ondragover': [], 'ondragstart': [], 'ondrop': [], 'ondurationchange': [], 'onemptied': [], 'onended': [], 'onerror': [], 'onfocus': [], 'onformchange': [], 'onforminput': [], 'oninput': [], 'oninvalid': [], 'onkeydown': [], 'onkeypress': [], 'onkeyup': [], 'onload': [], 'onloadeddata': [], 'onloadedmetadata': [], 'onloadstart': [], 'onmousedown': [], 'onmousemove': [], 'onmouseout': [], 'onmouseover': [], 'onmouseup': [], 'onmousewheel': [], 'onpause': [], 'onplay': [], 'onplaying': [], 'onprogress': [], 'onratechange': [], 'onreadystatechange': [], 'onscroll': [], 'onseeked': [], 'onseeking': [], 'onselect': [], 'onshow': [], 'onstalled': [], 'onsubmit': [], 'onsuspend': [], 'ontimeupdate': [], 'onvolumechange': [], 'onwaiting': []}
|
let event_handler_attributes = {'onabort': [], 'onblur': [], 'oncanplay': [], 'oncanplaythrough': [], 'onchange': [], 'onclick': [], 'oncontextmenu': [], 'ondblclick': [], 'ondrag': [], 'ondragend': [], 'ondragenter': [], 'ondragleave': [], 'ondragover': [], 'ondragstart': [], 'ondrop': [], 'ondurationchange': [], 'onemptied': [], 'onended': [], 'onerror': [], 'onfocus': [], 'onformchange': [], 'onforminput': [], 'oninput': [], 'oninvalid': [], 'onkeydown': [], 'onkeypress': [], 'onkeyup': [], 'onload': [], 'onloadeddata': [], 'onloadedmetadata': [], 'onloadstart': [], 'onmousedown': [], 'onmousemove': [], 'onmouseout': [], 'onmouseover': [], 'onmouseup': [], 'onmousewheel': [], 'onpause': [], 'onplay': [], 'onplaying': [], 'onprogress': [], 'onratechange': [], 'onreadystatechange': [], 'onscroll': [], 'onseeked': [], 'onseeking': [], 'onselect': [], 'onshow': [], 'onstalled': [], 'onsubmit': [], 'onsuspend': [], 'ontimeupdate': [], 'onvolumechange': [], 'onwaiting': [], 'onselectstart': [], 'onselectchange': []}
|
||||||
let global_attributes = extend(global_attributes, event_handler_attributes)
|
let global_attributes = extend(global_attributes, event_handler_attributes)
|
||||||
|
|
||||||
let body_attributes = {'onafterprint': [], 'onbeforeprint': [], 'onbeforeunload': [], 'onblur': [], 'onerror': [], 'onfocus': [], 'onhashchange': [], 'onload': [], 'onmessage': [], 'onoffline': [], 'ononline': [], 'onpopstate': [], 'onredo': [], 'onresize': [], 'onstorage': [], 'onundo': [], 'onunload': []}
|
let body_attributes = {'onafterprint': [], 'onbeforeprint': [], 'onbeforeunload': [], 'onblur': [], 'onerror': [], 'onfocus': [], 'onhashchange': [], 'onload': [], 'onmessage': [], 'onoffline': [], 'ononline': [], 'onpopstate': [], 'onredo': [], 'onresize': [], 'onstorage': [], 'onundo': [], 'onunload': []}
|
||||||
@@ -214,6 +214,8 @@ if g:html5_event_handler_attributes_complete == 1
|
|||||||
\ 'ondragleave': ['Script', ''],
|
\ 'ondragleave': ['Script', ''],
|
||||||
\ 'ondragover': ['Script', ''],
|
\ 'ondragover': ['Script', ''],
|
||||||
\ 'ondragstart': ['Script', ''],
|
\ 'ondragstart': ['Script', ''],
|
||||||
|
\ 'onselectstart': ['Script', ''],
|
||||||
|
\ 'onselectchange': ['Script', ''],
|
||||||
\ 'ondrop': ['Script', ''],
|
\ 'ondrop': ['Script', ''],
|
||||||
\ 'ondurationchange': ['Script', ''],
|
\ 'ondurationchange': ['Script', ''],
|
||||||
\ 'onemptied': ['Script', ''],
|
\ 'onemptied': ['Script', ''],
|
||||||
@@ -374,6 +376,8 @@ let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|t
|
|||||||
|
|
||||||
let crossorigin = ['anonymous', 'use-credentials']
|
let crossorigin = ['anonymous', 'use-credentials']
|
||||||
|
|
||||||
|
let referrerpolicy = ['no-referrer', 'no-referrer-when-downgrade', 'same-origin', 'origin', 'strict-origin', 'origin-when-cross-origin', 'strict-origin-when-cross-origin', 'unsafe-url']
|
||||||
|
|
||||||
|
|
||||||
let g:xmldata_html5 = {
|
let g:xmldata_html5 = {
|
||||||
\ 'vimxmlentities': ['AElig', 'Aacute', 'Acirc', 'Agrave', 'Alpha', 'Aring', 'Atilde', 'Auml', 'Beta', 'Ccedil', 'Chi', 'Dagger', 'Delta', 'ETH', 'Eacute', 'Ecirc', 'Egrave', 'Epsilon', 'Eta', 'Euml', 'Gamma', 'Iacute', 'Icirc', 'Igrave', 'Iota', 'Iuml', 'Kappa', 'Lambda', 'Mu', 'Ntilde', 'Nu', 'OElig', 'Oacute', 'Ocirc', 'Ograve', 'Omega', 'Omicron', 'Oslash', 'Otilde', 'Ouml', 'Phi', 'Pi', 'Prime', 'Psi', 'Rho', 'Scaron', 'Sigma', 'THORN', 'Tau', 'Theta', 'Uacute', 'Ucirc', 'Ugrave', 'Upsilon', 'Uuml', 'Xi', 'Yacute', 'Yuml', 'Zeta', 'aacute', 'acirc', 'acute', 'aelig', 'agrave', 'alefsym', 'alpha', 'amp', 'and', 'ang', 'apos', 'aring', 'asymp', 'atilde', 'auml', 'bdquo', 'beta', 'brvbar', 'bull', 'cap', 'ccedil', 'cedil', 'cent', 'chi', 'circ', 'clubs', 'cong', 'copy', 'crarr', 'cup', 'curren', 'dArr', 'dagger', 'darr', 'deg', 'delta', 'diams', 'divide', 'eacute', 'ecirc', 'egrave', 'empty', 'emsp', 'ensp', 'epsilon', 'equiv', 'eta', 'eth', 'euml', 'euro', 'exist', 'fnof', 'forall', 'frac12', 'frac14', 'frac34', 'frasl', 'gamma', 'ge', 'gt', 'hArr', 'harr', 'hearts', 'hellip', 'iacute', 'icirc', 'iexcl', 'igrave', 'image', 'infin', 'int', 'iota', 'iquest', 'isin', 'iuml', 'kappa', 'lArr', 'lambda', 'lang', 'laquo', 'larr', 'lceil', 'ldquo', 'le', 'lfloor', 'lowast', 'loz', 'lrm', 'lsaquo', 'lsquo', 'lt', 'macr', 'mdash', 'micro', 'middot', 'minus', 'mu', 'nabla', 'nbsp', 'ndash', 'ne', 'ni', 'not', 'notin', 'nsub', 'ntilde', 'nu', 'oacute', 'ocirc', 'oelig', 'ograve', 'oline', 'omega', 'omicron', 'oplus', 'or', 'ordf', 'ordm', 'oslash', 'otilde', 'otimes', 'ouml', 'para', 'part', 'permil', 'perp', 'phi', 'pi', 'piv', 'plusmn', 'pound', 'prime', 'prod', 'prop', 'psi', 'quot', 'rArr', 'radic', 'rang', 'raquo', 'rarr', 'rceil', 'rdquo', 'real', 'reg', 'rfloor', 'rho', 'rlm', 'rsaquo', 'rsquo', 'sbquo', 'scaron', 'sdot', 'sect', 'shy', 'sigma', 'sigmaf', 'sim', 'spades', 'sub', 'sube', 'sum', 'sup', 'sup1', 'sup2', 'sup3', 'supe', 'szlig', 'tau', 'there4', 'theta', 'thetasym', 'thinsp', 'thorn', 'tilde', 'times', 'trade', 'uArr', 'uacute', 'uarr', 'ucirc', 'ugrave', 'uml', 'upsih', 'upsilon', 'uuml', 'weierp', 'xi', 'yacute', 'yen', 'yuml', 'zeta', 'zwj', 'zwnj'],
|
\ 'vimxmlentities': ['AElig', 'Aacute', 'Acirc', 'Agrave', 'Alpha', 'Aring', 'Atilde', 'Auml', 'Beta', 'Ccedil', 'Chi', 'Dagger', 'Delta', 'ETH', 'Eacute', 'Ecirc', 'Egrave', 'Epsilon', 'Eta', 'Euml', 'Gamma', 'Iacute', 'Icirc', 'Igrave', 'Iota', 'Iuml', 'Kappa', 'Lambda', 'Mu', 'Ntilde', 'Nu', 'OElig', 'Oacute', 'Ocirc', 'Ograve', 'Omega', 'Omicron', 'Oslash', 'Otilde', 'Ouml', 'Phi', 'Pi', 'Prime', 'Psi', 'Rho', 'Scaron', 'Sigma', 'THORN', 'Tau', 'Theta', 'Uacute', 'Ucirc', 'Ugrave', 'Upsilon', 'Uuml', 'Xi', 'Yacute', 'Yuml', 'Zeta', 'aacute', 'acirc', 'acute', 'aelig', 'agrave', 'alefsym', 'alpha', 'amp', 'and', 'ang', 'apos', 'aring', 'asymp', 'atilde', 'auml', 'bdquo', 'beta', 'brvbar', 'bull', 'cap', 'ccedil', 'cedil', 'cent', 'chi', 'circ', 'clubs', 'cong', 'copy', 'crarr', 'cup', 'curren', 'dArr', 'dagger', 'darr', 'deg', 'delta', 'diams', 'divide', 'eacute', 'ecirc', 'egrave', 'empty', 'emsp', 'ensp', 'epsilon', 'equiv', 'eta', 'eth', 'euml', 'euro', 'exist', 'fnof', 'forall', 'frac12', 'frac14', 'frac34', 'frasl', 'gamma', 'ge', 'gt', 'hArr', 'harr', 'hearts', 'hellip', 'iacute', 'icirc', 'iexcl', 'igrave', 'image', 'infin', 'int', 'iota', 'iquest', 'isin', 'iuml', 'kappa', 'lArr', 'lambda', 'lang', 'laquo', 'larr', 'lceil', 'ldquo', 'le', 'lfloor', 'lowast', 'loz', 'lrm', 'lsaquo', 'lsquo', 'lt', 'macr', 'mdash', 'micro', 'middot', 'minus', 'mu', 'nabla', 'nbsp', 'ndash', 'ne', 'ni', 'not', 'notin', 'nsub', 'ntilde', 'nu', 'oacute', 'ocirc', 'oelig', 'ograve', 'oline', 'omega', 'omicron', 'oplus', 'or', 'ordf', 'ordm', 'oslash', 'otilde', 'otimes', 'ouml', 'para', 'part', 'permil', 'perp', 'phi', 'pi', 'piv', 'plusmn', 'pound', 'prime', 'prod', 'prop', 'psi', 'quot', 'rArr', 'radic', 'rang', 'raquo', 'rarr', 'rceil', 'rdquo', 'real', 'reg', 'rfloor', 'rho', 'rlm', 'rsaquo', 'rsquo', 'sbquo', 'scaron', 'sdot', 'sect', 'shy', 'sigma', 'sigmaf', 'sim', 'spades', 'sub', 'sube', 'sum', 'sup', 'sup1', 'sup2', 'sup3', 'supe', 'szlig', 'tau', 'there4', 'theta', 'thetasym', 'thinsp', 'thorn', 'tilde', 'times', 'trade', 'uArr', 'uacute', 'uarr', 'ucirc', 'ugrave', 'uml', 'upsih', 'upsilon', 'uuml', 'weierp', 'xi', 'yacute', 'yen', 'yuml', 'zeta', 'zwj', 'zwnj'],
|
||||||
@@ -392,7 +396,7 @@ let g:xmldata_html5 = {
|
|||||||
\ ],
|
\ ],
|
||||||
\ 'area': [
|
\ 'area': [
|
||||||
\ [],
|
\ [],
|
||||||
\ extend(copy(global_attributes), {'alt': [], 'href': [], 'target': [], 'rel': linktypes, 'media': [], 'hreflang': lang_tag, 'type': [], 'shape': ['rect', 'circle', 'poly', 'default'], 'coords': [], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url']})
|
\ extend(copy(global_attributes), {'alt': [], 'href': [], 'target': [], 'rel': linktypes, 'media': [], 'hreflang': lang_tag, 'type': [], 'shape': ['rect', 'circle', 'poly', 'default'], 'coords': [], 'referrerpolicy': referrerpolicy})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'article': [
|
\ 'article': [
|
||||||
\ flow_elements + ['style'],
|
\ flow_elements + ['style'],
|
||||||
@@ -490,6 +494,10 @@ let g:xmldata_html5 = {
|
|||||||
\ filter(copy(phrasing_elements), "!(v:val =~ 'dfn')"),
|
\ filter(copy(phrasing_elements), "!(v:val =~ 'dfn')"),
|
||||||
\ global_attributes
|
\ global_attributes
|
||||||
\ ],
|
\ ],
|
||||||
|
\ 'dialog': [
|
||||||
|
\ flow_elements,
|
||||||
|
\ extend(copy(global_attributes), {'open': []})
|
||||||
|
\ ],
|
||||||
\ 'div': [
|
\ 'div': [
|
||||||
\ flow_elements + ['style'],
|
\ flow_elements + ['style'],
|
||||||
\ global_attributes
|
\ global_attributes
|
||||||
@@ -580,11 +588,11 @@ let g:xmldata_html5 = {
|
|||||||
\ ],
|
\ ],
|
||||||
\ 'iframe': [
|
\ 'iframe': [
|
||||||
\ [],
|
\ [],
|
||||||
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowpresentation': [], 'allowusermedia': []})
|
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': referrerpolicy, 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowpresentation': [], 'allowusermedia': []})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'img': [
|
\ 'img': [
|
||||||
\ [],
|
\ [],
|
||||||
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'decoding': ['async', 'sync', 'auto'], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'crossorigin': ['anonymous', 'use-credentials']})
|
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'decoding': ['async', 'sync', 'auto'], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': referrerpolicy, 'crossorigin': ['anonymous', 'use-credentials']})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'input': [
|
\ 'input': [
|
||||||
\ [],
|
\ [],
|
||||||
@@ -616,7 +624,7 @@ let g:xmldata_html5 = {
|
|||||||
\ ],
|
\ ],
|
||||||
\ 'link': [
|
\ 'link': [
|
||||||
\ [],
|
\ [],
|
||||||
\ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any'], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'crossorigin': crossorigin, 'preload': ['preload', ''], 'prefetch': ['prefetch', ''], 'as': ['report', 'document', 'document', 'object', 'embed', 'audio', 'font', 'image', 'audioworklet', 'paintworklet', 'script', 'serviceworker', 'sharedworker', 'worker', 'style', 'track', 'video', 'image', 'manifest', 'xslt', 'fetch', '']})
|
\ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any'], 'referrerpolicy': referrerpolicy, 'crossorigin': crossorigin, 'preload': ['preload', ''], 'prefetch': ['prefetch', ''], 'as': ['report', 'document', 'document', 'object', 'embed', 'audio', 'font', 'image', 'audioworklet', 'paintworklet', 'script', 'serviceworker', 'sharedworker', 'worker', 'style', 'track', 'video', 'image', 'manifest', 'xslt', 'fetch', '']})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'main': [
|
\ 'main': [
|
||||||
\ flow_elements + ['style'],
|
\ flow_elements + ['style'],
|
||||||
|
|||||||
143
build
143
build
@@ -3,41 +3,44 @@
|
|||||||
set -E
|
set -E
|
||||||
|
|
||||||
DIRS="syntax indent compiler autoload ftplugin after/syntax after/indent after/ftplugin"
|
DIRS="syntax indent compiler autoload ftplugin after/syntax after/indent after/ftplugin"
|
||||||
|
# shellcheck disable=SC2034
|
||||||
DIRS_BASIC="syntax compiler indent after/syntax after/indent"
|
DIRS_BASIC="syntax compiler indent after/syntax after/indent"
|
||||||
|
# shellcheck disable=SC2034
|
||||||
DIRS_ALL="syntax indent compiler autoload ftplugin after"
|
DIRS_ALL="syntax indent compiler autoload ftplugin after"
|
||||||
|
# shellcheck disable=SC2034
|
||||||
DIRS_SYNTAX="syntax indent after/syntax after/indent"
|
DIRS_SYNTAX="syntax indent after/syntax after/indent"
|
||||||
DIRS_JAVASCRIPT="${DIRS} extras"
|
DIRS_JAVASCRIPT="${DIRS} extras"
|
||||||
DIRS_RM="$DIRS_JAVASCRIPT"
|
read -r -a DIRS_RM <<<"$DIRS_JAVASCRIPT"
|
||||||
|
|
||||||
OUTPUT=""
|
OUTPUT=""
|
||||||
|
|
||||||
output() {
|
output() {
|
||||||
OUTPUT="$OUTPUT$1"
|
OUTPUT="$OUTPUT$1"
|
||||||
printf -- "$1"
|
echo -n "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
download() {
|
download() {
|
||||||
for pack in $1; do
|
for pack in $1; do
|
||||||
path="$(printf "$pack" | cut -d ':' -f 2)"
|
path="$(cut -d ':' -f 2 <<<"$pack")"
|
||||||
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
|
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
||||||
rm -rf "$dir"
|
rm -rf "$dir"
|
||||||
(mkdir -p "$dir" && curl --silent -L https://codeload.github.com/$path/tar.gz/master | tar -zx -C "$dir" --strip 1 && printf '.') &
|
(mkdir -p "$dir" && curl --silent -L "https://codeload.github.com/$path/tar.gz/master" | tar -zx -C "$dir" --strip 1 && printf '.') &
|
||||||
done
|
done
|
||||||
|
|
||||||
wait
|
wait
|
||||||
}
|
}
|
||||||
|
|
||||||
extract() {
|
extract() {
|
||||||
printf "\n"
|
echo
|
||||||
|
|
||||||
cat config.vim >> tmp/polyglot.vim
|
cat config.vim >> tmp/polyglot.vim
|
||||||
|
|
||||||
for pack in $1; do
|
for pack in $1; do
|
||||||
name="$(printf "$pack" | cut -d ':' -f 1)"
|
name="$(cut -d ':' -f 1 <<<"$pack")"
|
||||||
path="$(printf "$pack" | cut -d ':' -f 2)"
|
path="$(cut -d ':' -f 2 <<<"$pack")"
|
||||||
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
|
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
||||||
directories="DIRS$(printf "$pack" | cut -d ':' -f 3)"
|
directories="DIRS$(cut -d ':' -f 3 <<<"$pack")"
|
||||||
subtree="$(printf "$pack" | cut -d ':' -f 4)"
|
subtree="$(cut -d ':' -f 4 <<<"$pack")"
|
||||||
output "- [$name](https://github.com/$path) ("
|
output "- [$name](https://github.com/$path) ("
|
||||||
|
|
||||||
subdirs=""
|
subdirs=""
|
||||||
@@ -52,21 +55,29 @@ extract() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
output "${subdirs##, })\n"
|
# syntax for go.vim depends on autoload for go.vim, but we exclude the
|
||||||
|
# autoload always and the ftplugin because it's too complex. FML.
|
||||||
|
if [ "${pack%%:*}" = "go" ]; then
|
||||||
|
copy_file "${dir}${subtree}" "${dir}${subtree}/autoload/go/config.vim" "${name}"
|
||||||
|
fi
|
||||||
|
|
||||||
if (echo "julia coffee-script elixir fish git plantuml scala swift" | fgrep -q "$name"); then
|
output "${subdirs##, })"$'\n'
|
||||||
echo "Skipping ftdetect installation of $name"
|
|
||||||
|
if (echo "julia coffee-script elixir fish git plantuml scala swift" | grep -qF "$name"); then
|
||||||
|
echo "Skipping ftdetect installation of $name" >&2
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for f in ${dir}/ftdetect/*; do
|
[ -d "${dir}/ftdetect" ] && for f in "${dir}/ftdetect/"*; do
|
||||||
(
|
cat <<EOF >> tmp/polyglot.vim
|
||||||
echo "augroup filetypedetect";
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, '${pack%%:*}') == -1
|
||||||
echo '" '"$pack";
|
augroup filetypedetect
|
||||||
cat "${f}";
|
" ${pack%%:*}, from ${f##*/ftdetect/} in ${pack#*:}
|
||||||
echo "augroup END";
|
$(cat "${f}")
|
||||||
echo
|
augroup end
|
||||||
) >> tmp/polyglot.vim;
|
endif
|
||||||
|
|
||||||
|
EOF
|
||||||
done
|
done
|
||||||
|
|
||||||
done
|
done
|
||||||
@@ -74,47 +85,74 @@ extract() {
|
|||||||
mv tmp/polyglot.vim ftdetect/
|
mv tmp/polyglot.vim ftdetect/
|
||||||
|
|
||||||
for pack in $1; do
|
for pack in $1; do
|
||||||
name="$(printf "$pack" | cut -d ':' -f 1)"
|
name="$(cut -d ':' -f 1 <<<"$pack")"
|
||||||
path="$(printf "$pack" | cut -d ':' -f 2)"
|
path="$(cut -d ':' -f 2 <<<"$pack")"
|
||||||
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
|
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
||||||
subtree="$(printf "$pack" | cut -d ':' -f 4)"
|
subtree="$(cut -d ':' -f 4 <<<"$pack")"
|
||||||
|
|
||||||
if [ -d "$dir${subtree:-/}plugin" ]; then
|
if [ -d "$dir${subtree:-/}plugin" ]; then
|
||||||
printf "Possible error (plugin directory exists): $path\n"
|
echo "Possible error (plugin directory exists): $path" >&2
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
copy_dir() {
|
copy_dir() {
|
||||||
for file in $(find "$1/$2" -name '*.vim' -o -name '*.vital'); do
|
find "$1/$2" \( -name '*.vim' -o -name '*.vital' \) -print0 | while read -r -d $'\0' file; do
|
||||||
file_path="$(dirname "${file##$1/}")"
|
copy_file "$1" "$file" "$3"
|
||||||
mkdir -p "$file_path"
|
|
||||||
touch "$file_path/$(basename "$file")"
|
|
||||||
|
|
||||||
# Use comma instead of / to handle cases like c/c++
|
|
||||||
sed -e "s,%%PACK%%,$3," -e "/%%CONTENT%%/{r $file" -e "d;}" plugin_guard.vim.template >> $file_path/$(basename "$file")
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
copy_file() {
|
||||||
|
## $1 is the build dir (e.g. tmp/vim-go)
|
||||||
|
## $2 is the full file path, as returned by `find` (e.g. tmp/vim-go/indent/go.vim)
|
||||||
|
## $3 is the name of the package (so that we can detect if it's disabled at runtime)
|
||||||
|
local tmp_dir="$1"
|
||||||
|
local file_in_tmp="$2"
|
||||||
|
local file_basename="${2##*/}"
|
||||||
|
local file_path="${file_in_tmp##$tmp_dir/}" # Just this file's (full) path
|
||||||
|
file_path="${file_path%/*}" # Minus the actual name of the file
|
||||||
|
local file_in_dst="${file_path}/${file_basename}" # Could also be ${file_in_tmp##$tmp_dir/}
|
||||||
|
local package_name="$3"
|
||||||
|
|
||||||
|
if [ "${file_in_tmp##$tmp_dir/}" != "${file_in_dst}" ]; then
|
||||||
|
echo "Failure in logic in build script; '${file_in_tmp##$tmp_dir/}' != '${file_in_dst}'. Bailing." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "${file_path}"
|
||||||
|
touch "$file_in_dst"
|
||||||
|
|
||||||
|
# Use comma instead of / to handle cases like c/c++
|
||||||
|
sed -e "s,%%PACK%%,${package_name}," -e "/%%CONTENT%%/{r ${file_in_tmp}" -e "d;}" plugin_guard.vim.template >> "$file_in_dst"
|
||||||
|
}
|
||||||
|
|
||||||
update_readme() {
|
update_readme() {
|
||||||
OLD_README="$(cat README.md)"
|
local tf of
|
||||||
|
tf="$(mktemp)"
|
||||||
ed README.md <<- EOF
|
of="$(mktemp)"
|
||||||
/Language packs
|
sort <<<"$OUTPUT" | grep -vxE '[[:space:]]*' > "$of"
|
||||||
+2kb
|
|
||||||
/##
|
|
||||||
'b,-2c
|
|
||||||
$(printf -- "$OUTPUT" | sort)
|
|
||||||
.
|
|
||||||
w
|
|
||||||
q
|
|
||||||
EOF
|
|
||||||
|
|
||||||
|
awk 'suppress == 0 {
|
||||||
|
gsub(/<!--Package Count-->[^<]*<!--\/Package Count-->/,
|
||||||
|
"<!--Package Count-->'"$(awk 'END {print NR}' "$of")"'<!--/Package Count-->");
|
||||||
|
print;
|
||||||
|
}
|
||||||
|
/<!--Language Packs-->/ {
|
||||||
|
suppress = 1;
|
||||||
|
while ( ( getline line < "'"$of"'" ) > 0 ) {
|
||||||
|
print line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/<!--\/Language Packs-->/ {
|
||||||
|
suppress = 0;
|
||||||
|
print;
|
||||||
|
}' "README.md" >"$tf"
|
||||||
|
mv "$tf" "README.md"
|
||||||
}
|
}
|
||||||
|
|
||||||
PACKS="
|
PACKS="
|
||||||
apiblueprint:sheerun/apiblueprint.vim
|
apiblueprint:sheerun/apiblueprint.vim
|
||||||
applescript:vim-scripts/applescript.vim
|
applescript:mityu/vim-applescript:_SYNTAX
|
||||||
asciidoc:asciidoc/vim-asciidoc
|
asciidoc:asciidoc/vim-asciidoc
|
||||||
yaml:stephpy/vim-yaml
|
yaml:stephpy/vim-yaml
|
||||||
ansible:pearofducks/ansible-vim
|
ansible:pearofducks/ansible-vim
|
||||||
@@ -140,6 +178,7 @@ PACKS="
|
|||||||
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
|
||||||
|
ferm:vim-scripts/ferm.vim
|
||||||
fish:dag/vim-fish
|
fish:dag/vim-fish
|
||||||
fsharp:fsharp/vim-fsharp:_BASIC
|
fsharp:fsharp/vim-fsharp:_BASIC
|
||||||
git:tpope/vim-git
|
git:tpope/vim-git
|
||||||
@@ -147,9 +186,11 @@ PACKS="
|
|||||||
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
|
||||||
|
haproxy:CH-DanReif/haproxy.vim
|
||||||
haskell:neovimhaskell/haskell-vim
|
haskell:neovimhaskell/haskell-vim
|
||||||
haxe:yaymukund/vim-haxe
|
haxe:yaymukund/vim-haxe
|
||||||
html5:othree/html5.vim
|
html5:othree/html5.vim
|
||||||
@@ -207,7 +248,7 @@ PACKS="
|
|||||||
stylus:wavded/vim-stylus
|
stylus:wavded/vim-stylus
|
||||||
swift:keith/swift.vim
|
swift:keith/swift.vim
|
||||||
sxhkd:baskerville/vim-sxhkdrc
|
sxhkd:baskerville/vim-sxhkdrc
|
||||||
systemd:kurayama/systemd-vim-syntax
|
systemd:wgwoods/vim-systemd-syntax
|
||||||
terraform:hashivim/vim-terraform
|
terraform:hashivim/vim-terraform
|
||||||
textile:timcharper/textile.vim
|
textile:timcharper/textile.vim
|
||||||
thrift:solarnz/thrift.vim
|
thrift:solarnz/thrift.vim
|
||||||
@@ -227,12 +268,12 @@ PACKS="
|
|||||||
"
|
"
|
||||||
|
|
||||||
rm -rf tmp
|
rm -rf tmp
|
||||||
rm -rf $DIRS_RM
|
rm -rf "${DIRS_RM[@]}"
|
||||||
mkdir tmp
|
mkdir tmp
|
||||||
|
|
||||||
printf "Downloading packs..."
|
printf "Downloading packs..."
|
||||||
download "$PACKS"
|
download "$(sed '/^#/d' <<<"$PACKS")"
|
||||||
extract "$PACKS"
|
extract "$(sed '/^#/d' <<<"$PACKS")"
|
||||||
update_readme
|
update_readme
|
||||||
|
|
||||||
rm -rf tmp
|
rm -rf tmp
|
||||||
|
|||||||
@@ -12,8 +12,10 @@ endif
|
|||||||
runtime compiler/rustc.vim
|
runtime compiler/rustc.vim
|
||||||
let current_compiler = "cargo"
|
let current_compiler = "cargo"
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
if exists(':CompilerSet') != 2
|
if exists(':CompilerSet') != 2
|
||||||
command -nargs=* CompilerSet setlocal <args>
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
@@ -25,6 +27,12 @@ else
|
|||||||
CompilerSet makeprg=cargo\ $*
|
CompilerSet makeprg=cargo\ $*
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
augroup RustCargoQuickFixHooks
|
||||||
|
autocmd!
|
||||||
|
autocmd QuickFixCmdPre make call cargo#quickfix#CmdPre()
|
||||||
|
autocmd QuickFixCmdPost make call cargo#quickfix#CmdPost()
|
||||||
|
augroup END
|
||||||
|
|
||||||
" Ignore general cargo progress messages
|
" Ignore general cargo progress messages
|
||||||
CompilerSet errorformat+=
|
CompilerSet errorformat+=
|
||||||
\%-G%\\s%#Downloading%.%#,
|
\%-G%\\s%#Downloading%.%#,
|
||||||
@@ -33,9 +41,13 @@ CompilerSet errorformat+=
|
|||||||
\%-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=%.%#,
|
\%-Gnote:\ Run\ with\ \`RUST_BACKTRACE=%.%#,
|
||||||
\%.%#panicked\ at\ \\'%m\\'\\,\ %f:%l
|
\%.%#panicked\ at\ \\'%m\\'\\,\ %f:%l:%c
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
15
compiler/credo.vim
Normal file
15
compiler/credo.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
|
||||||
|
|
||||||
|
if exists('current_compiler')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = 'credo'
|
||||||
|
|
||||||
|
if exists(":CompilerSet") != 2
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
CompilerSet errorformat=%f:%l:\ %t:\ %m
|
||||||
|
CompilerSet makeprg=mix\ credo\ suggest\ --format=flycheck
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -30,8 +30,8 @@ CompilerSet errorformat=
|
|||||||
\%W%f:%l:\ warning:\ %m,
|
\%W%f:%l:\ warning:\ %m,
|
||||||
\%E%f:%l:in\ %*[^:]:\ %m,
|
\%E%f:%l:in\ %*[^:]:\ %m,
|
||||||
\%E%f:%l:\ %m,
|
\%E%f:%l:\ %m,
|
||||||
\%-C%\tfrom\ %f:%l:in\ %.%#,
|
\%-C%\t%\\d%#:%#\ %#from\ %f:%l:in\ %.%#,
|
||||||
\%-Z%\tfrom\ %f:%l,
|
\%-Z%\t%\\d%#:%#\ %#from\ %f:%l,
|
||||||
\%-Z%p^,
|
\%-Z%p^,
|
||||||
\%-G%.%#
|
\%-G%.%#
|
||||||
|
|
||||||
|
|||||||
15
compiler/mix.vim
Normal file
15
compiler/mix.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
|
||||||
|
|
||||||
|
if exists('current_compiler')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = 'mix'
|
||||||
|
|
||||||
|
if exists(":CompilerSet") != 2
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
CompilerSet errorformat=%A%t%*[^:]:\ %m,%C%f:%l:\ %m,%C%f:%l,%Z
|
||||||
|
CompilerSet makeprg=mix
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -13,7 +13,7 @@ endif
|
|||||||
let s:cpo_save = &cpo
|
let s:cpo_save = &cpo
|
||||||
set cpo-=C
|
set cpo-=C
|
||||||
|
|
||||||
CompilerSet makeprg=nim\ c\ --verbosity:0\ $*\ %:p
|
CompilerSet makeprg=nim\ c\ --verbosity:0\ --listfullpaths\ $*\ %:p
|
||||||
|
|
||||||
CompilerSet errorformat=
|
CompilerSet errorformat=
|
||||||
\%-GHint:\ %m,
|
\%-GHint:\ %m,
|
||||||
|
|||||||
15
compiler/nix-build.vim
Normal file
15
compiler/nix-build.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1
|
||||||
|
|
||||||
|
if exists('current_compiler')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = 'nix-build'
|
||||||
|
|
||||||
|
if exists(":CompilerSet") != 2
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
CompilerSet errorformat=error:\ %m\ at\ %f:%l:%c,builder\ for\ \'%m\'\ failed\ with\ exit\ code\ %n,fixed-output\ derivation\ produced\ path\ \'%s\'\ with\ %m
|
||||||
|
CompilerSet makeprg=nix-build
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -22,12 +22,12 @@ CompilerSet makeprg=rake
|
|||||||
|
|
||||||
CompilerSet errorformat=
|
CompilerSet errorformat=
|
||||||
\%D(in\ %f),
|
\%D(in\ %f),
|
||||||
\%\\s%#from\ %f:%l:%m,
|
\%\\s%#%\\d%#:%#\ %#from\ %f:%l:%m,
|
||||||
\%\\s%#from\ %f:%l:,
|
\%\\s%#%\\d%#:%#\ %#from\ %f:%l:,
|
||||||
\%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%\\d%#:%.%#,
|
\%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%\\d%\\+:%.%#,
|
||||||
\%\\s%##\ %f:%l%\\&%.%#%\\D:%\\d%#,
|
\%\\s%##\ %f:%l%\\&%.%#%\\D:%\\d%\\+,
|
||||||
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
|
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%\\+:%.%#,
|
||||||
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
|
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%\\+:%.%#,
|
||||||
\%\\s%#%f:%l:,
|
\%\\s%#%f:%l:,
|
||||||
\%m\ [%f:%l]:,
|
\%m\ [%f:%l]:,
|
||||||
\%+Erake\ aborted!,
|
\%+Erake\ aborted!,
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ CompilerSet errorformat=
|
|||||||
\%E%.%#:in\ `load':\ %f:%l:%m,
|
\%E%.%#:in\ `load':\ %f:%l:%m,
|
||||||
\%E%f:%l:in\ `%*[^']':\ %m,
|
\%E%f:%l:in\ `%*[^']':\ %m,
|
||||||
\%-Z\ \ \ \ \ %\\+\#\ %f:%l:%.%#,
|
\%-Z\ \ \ \ \ %\\+\#\ %f:%l:%.%#,
|
||||||
\%E\ \ %\\d%\\+)%.%#,
|
\%E\ \ \ \ \ Failure/Error:\ %m,
|
||||||
|
\%E\ \ \ \ \ Failure/Error:,
|
||||||
\%C\ \ \ \ \ %m,
|
\%C\ \ \ \ \ %m,
|
||||||
\%C%\\s%#,
|
\%C%\\s%#,
|
||||||
\%-G%.%#
|
\%-G%.%#
|
||||||
|
|||||||
@@ -23,21 +23,21 @@ set cpo-=C
|
|||||||
" default settings runs script normally
|
" default settings runs script normally
|
||||||
" add '-c' switch to run syntax check only:
|
" add '-c' switch to run syntax check only:
|
||||||
"
|
"
|
||||||
" CompilerSet makeprg=ruby\ -wc\ $*
|
" CompilerSet makeprg=ruby\ -c
|
||||||
"
|
"
|
||||||
" or add '-c' at :make command line:
|
" or add '-c' at :make command line:
|
||||||
"
|
"
|
||||||
" :make -c %<CR>
|
" :make -c %<CR>
|
||||||
"
|
"
|
||||||
CompilerSet makeprg=ruby\ -w\ $*
|
CompilerSet makeprg=ruby
|
||||||
|
|
||||||
CompilerSet errorformat=
|
CompilerSet errorformat=
|
||||||
\%+E%f:%l:\ parse\ error,
|
\%+E%f:%l:\ parse\ error,
|
||||||
\%W%f:%l:\ warning:\ %m,
|
\%W%f:%l:\ warning:\ %m,
|
||||||
\%E%f:%l:in\ %*[^:]:\ %m,
|
\%E%f:%l:in\ %*[^:]:\ %m,
|
||||||
\%E%f:%l:\ %m,
|
\%E%f:%l:\ %m,
|
||||||
\%-C%\tfrom\ %f:%l:in\ %.%#,
|
\%-C%\t%\\d%#:%#\ %#from\ %f:%l:in\ %.%#,
|
||||||
\%-Z%\tfrom\ %f:%l,
|
\%-Z%\t%\\d%#:%#\ %#from\ %f:%l,
|
||||||
\%-Z%p^,
|
\%-Z%p^,
|
||||||
\%-G%.%#
|
\%-G%.%#
|
||||||
|
|
||||||
|
|||||||
@@ -11,30 +11,23 @@ if exists("current_compiler")
|
|||||||
endif
|
endif
|
||||||
let current_compiler = "rustc"
|
let current_compiler = "rustc"
|
||||||
|
|
||||||
let s:cpo_save = &cpo
|
" vint: -ProhibitAbbreviationOption
|
||||||
|
let s:save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
if exists(":CompilerSet") != 2
|
if exists(":CompilerSet") != 2
|
||||||
command -nargs=* CompilerSet setlocal <args>
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists("g:rustc_makeprg_no_percent") && g:rustc_makeprg_no_percent != 0
|
if get(g:, 'rustc_makeprg_no_percent', 0)
|
||||||
CompilerSet makeprg=rustc
|
CompilerSet makeprg=rustc
|
||||||
else
|
else
|
||||||
CompilerSet makeprg=rustc\ \%
|
CompilerSet makeprg=rustc\ \%
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Old errorformat (before nightly 2016/08/10)
|
|
||||||
CompilerSet errorformat=
|
|
||||||
\%f:%l:%c:\ %t%*[^:]:\ %m,
|
|
||||||
\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m,
|
|
||||||
\%-G%f:%l\ %s,
|
|
||||||
\%-G%*[\ ]^,
|
|
||||||
\%-G%*[\ ]^%*[~],
|
|
||||||
\%-G%*[\ ]...
|
|
||||||
|
|
||||||
" New errorformat (after nightly 2016/08/10)
|
" New errorformat (after nightly 2016/08/10)
|
||||||
CompilerSet errorformat+=
|
CompilerSet errorformat=
|
||||||
\%-G,
|
\%-G,
|
||||||
\%-Gerror:\ aborting\ %.%#,
|
\%-Gerror:\ aborting\ %.%#,
|
||||||
\%-Gerror:\ Could\ not\ compile\ %.%#,
|
\%-Gerror:\ Could\ not\ compile\ %.%#,
|
||||||
@@ -42,9 +35,23 @@ CompilerSet errorformat+=
|
|||||||
\%Eerror[E%n]:\ %m,
|
\%Eerror[E%n]:\ %m,
|
||||||
\%Wwarning:\ %m,
|
\%Wwarning:\ %m,
|
||||||
\%Inote:\ %m,
|
\%Inote:\ %m,
|
||||||
\%C\ %#-->\ %f:%l:%c
|
\%C\ %#-->\ %f:%l:%c,
|
||||||
|
\%E\ \ left:%m,%C\ right:%m\ %f:%l:%c,%Z
|
||||||
|
|
||||||
let &cpo = s:cpo_save
|
" Old errorformat (before nightly 2016/08/10)
|
||||||
unlet s:cpo_save
|
CompilerSet errorformat+=
|
||||||
|
\%f:%l:%c:\ %t%*[^:]:\ %m,
|
||||||
|
\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m,
|
||||||
|
\%-G%f:%l\ %s,
|
||||||
|
\%-G%*[\ ]^,
|
||||||
|
\%-G%*[\ ]^%*[~],
|
||||||
|
\%-G%*[\ ]...
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -69,3 +69,7 @@ augroup filetypedetect
|
|||||||
autocmd BufNewFile,BufRead *.swift set filetype=swift
|
autocmd BufNewFile,BufRead *.swift set filetype=swift
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
" Fix for https://github.com/sheerun/vim-polyglot/issues/236#issuecomment-387984954
|
||||||
|
if (!exists('g:graphql_javascript_tags'))
|
||||||
|
let g:graphql_javascript_tags = ['gql', 'graphql', 'Relay.QL']
|
||||||
|
endif
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/
|
|||||||
syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens
|
syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens
|
||||||
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 typeof 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,jsFlowArrow,jsFlowReturnParens
|
syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster,jsFlowArrow,jsFlowReturnParens
|
||||||
@@ -23,7 +23,7 @@ syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/
|
|||||||
syntax region jsFlowReturnArray 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 fold
|
||||||
syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp,jsFlowReturnArrow fold
|
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 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,jsFlowReturnArray
|
||||||
syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword,jsFlowReturnObject
|
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
|
||||||
@@ -31,8 +31,9 @@ syntax match jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=
|
|||||||
|
|
||||||
syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs
|
syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs
|
||||||
syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
|
syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
|
||||||
|
syntax region jsFlowClassFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs
|
||||||
|
|
||||||
syntax region jsFlowTypeStatement start=/type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend
|
syntax region jsFlowTypeStatement start=/\(opaque\s\+\)\?type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend
|
||||||
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/=/ end=/[\n;]/ contains=@jsFlowCluster,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 /=/ containedin=jsFlowTypeValue
|
||||||
syntax match jsFlowTypeOperator contained /=/
|
syntax match jsFlowTypeOperator contained /=/
|
||||||
@@ -83,6 +84,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
|
|||||||
HiLink jsFlowReturnGroup jsFlowGroup
|
HiLink jsFlowReturnGroup jsFlowGroup
|
||||||
HiLink jsFlowFunctionGroup PreProc
|
HiLink jsFlowFunctionGroup PreProc
|
||||||
HiLink jsFlowClassGroup PreProc
|
HiLink jsFlowClassGroup PreProc
|
||||||
|
HiLink jsFlowClassFunctionGroup PreProc
|
||||||
HiLink jsFlowArrowArguments PreProc
|
HiLink jsFlowArrowArguments PreProc
|
||||||
HiLink jsFlowArrow PreProc
|
HiLink jsFlowArrow PreProc
|
||||||
HiLink jsFlowReturnArrow PreProc
|
HiLink jsFlowReturnArrow PreProc
|
||||||
|
|||||||
@@ -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\|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 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\|inherit[dD]oc\|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
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1
|
|||||||
if exists('+regexpengine') && ('®expengine' == 0)
|
if exists('+regexpengine') && ('®expengine' == 0)
|
||||||
setlocal regexpengine=1
|
setlocal regexpengine=1
|
||||||
endif
|
endif
|
||||||
|
set isfname+=@-@
|
||||||
set path+=./../templates,./../files,templates,files
|
set path+=./../templates,./../files,templates,files
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haskell') == -1
|
|
||||||
|
|
||||||
if exists("g:loaded_haskellvim_cabal")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
let g:loaded_haskellvim_cabal = 1
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -51,6 +51,7 @@ command! -buffer -nargs=? CrystalSpecSwitch call crystal_lang#switch_spec_file(<
|
|||||||
command! -buffer -nargs=? CrystalSpecRunAll call crystal_lang#run_all_spec(<f-args>)
|
command! -buffer -nargs=? CrystalSpecRunAll call crystal_lang#run_all_spec(<f-args>)
|
||||||
command! -buffer -nargs=? CrystalSpecRunCurrent call crystal_lang#run_current_spec(<f-args>)
|
command! -buffer -nargs=? CrystalSpecRunCurrent call crystal_lang#run_current_spec(<f-args>)
|
||||||
command! -buffer -nargs=* -bar CrystalFormat call crystal_lang#format(<q-args>, 0)
|
command! -buffer -nargs=* -bar CrystalFormat call crystal_lang#format(<q-args>, 0)
|
||||||
|
command! -buffer -nargs=* CrystalExpand echo crystal_lang#expand(expand('%'), getpos('.'), <q-args>).output
|
||||||
|
|
||||||
nnoremap <buffer><Plug>(crystal-jump-to-definition) :<C-u>CrystalDef<CR>
|
nnoremap <buffer><Plug>(crystal-jump-to-definition) :<C-u>CrystalDef<CR>
|
||||||
nnoremap <buffer><Plug>(crystal-show-context) :<C-u>CrystalContext<CR>
|
nnoremap <buffer><Plug>(crystal-show-context) :<C-u>CrystalContext<CR>
|
||||||
|
|||||||
@@ -32,11 +32,7 @@ let &l:path =
|
|||||||
setlocal includeexpr=elixir#util#get_filename(v:fname)
|
setlocal includeexpr=elixir#util#get_filename(v:fname)
|
||||||
setlocal suffixesadd=.ex,.exs,.eex,.erl,.yrl,.hrl
|
setlocal suffixesadd=.ex,.exs,.eex,.erl,.yrl,.hrl
|
||||||
|
|
||||||
if empty(&formatprg)
|
let &l:define = 'def\(macro\|guard\|delegate\)\=p\='
|
||||||
setlocal formatprg=mix\ format\ -
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &l:define = 'def\(macro|guard|delegate\)p'
|
|
||||||
|
|
||||||
silent! setlocal formatoptions-=t formatoptions+=croqlj
|
silent! setlocal formatoptions-=t formatoptions+=croqlj
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,18 @@ command -buffer ElmShowDocs call elm#ShowDocs()
|
|||||||
command -buffer ElmBrowseDocs call elm#BrowseDocs()
|
command -buffer ElmBrowseDocs call elm#BrowseDocs()
|
||||||
command -buffer ElmFormat call elm#Format()
|
command -buffer ElmFormat call elm#Format()
|
||||||
|
|
||||||
|
" Commands cleanup
|
||||||
|
let b:undo_ftplugin = "
|
||||||
|
\ delcommand ElmMake
|
||||||
|
\|delcommand ElmMakeMain
|
||||||
|
\|delcommand ElmTest
|
||||||
|
\|delcommand ElmRepl
|
||||||
|
\|delcommand ElmErrorDetail
|
||||||
|
\|delcommand ElmShowDocs
|
||||||
|
\|delcommand ElmBrowseDocs
|
||||||
|
\|delcommand ElmFormat
|
||||||
|
\"
|
||||||
|
|
||||||
if get(g:, 'elm_setup_keybindings', 1)
|
if get(g:, 'elm_setup_keybindings', 1)
|
||||||
nmap <buffer> <LocalLeader>m <Plug>(elm-make)
|
nmap <buffer> <LocalLeader>m <Plug>(elm-make)
|
||||||
nmap <buffer> <LocalLeader>b <Plug>(elm-make-main)
|
nmap <buffer> <LocalLeader>b <Plug>(elm-make-main)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
|||||||
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
|
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
|
||||||
" Only do this when not done yet for this buffer
|
" Only do this when not done yet for this buffer
|
||||||
if exists("b:did_ftplugin")
|
if get(b:, 'did_ftplugin') =~# '\<eruby\>'
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -25,6 +25,8 @@ endif
|
|||||||
|
|
||||||
if &filetype =~ '^eruby\.'
|
if &filetype =~ '^eruby\.'
|
||||||
let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
|
let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
|
||||||
|
elseif &filetype =~ '^.*\.eruby\>'
|
||||||
|
let b:eruby_subtype = matchstr(&filetype,'^.\{-\}\ze\.eruby\>')
|
||||||
elseif !exists("b:eruby_subtype")
|
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\+')
|
||||||
@@ -47,11 +49,14 @@ elseif !exists("b:eruby_subtype")
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
|
if &filetype =~# '^eruby\>'
|
||||||
|
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
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
let s:did_ftplugin = get(b:, 'did_ftplugin', 1)
|
||||||
unlet! b:did_ftplugin
|
unlet! b:did_ftplugin
|
||||||
|
|
||||||
" Override our defaults if these were set by an included ftplugin.
|
" Override our defaults if these were set by an included ftplugin.
|
||||||
@@ -68,8 +73,23 @@ if exists("b:match_words")
|
|||||||
unlet b:match_words
|
unlet b:match_words
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let s:cfilemap = v:version >= 704 ? maparg('<Plug><cfile>', 'c', 0, 1) : {}
|
||||||
|
if !get(s:cfilemap, 'buffer') || !s:cfilemap.expr || s:cfilemap.rhs =~# 'ErubyAtCursor()'
|
||||||
|
let s:cfilemap = {}
|
||||||
|
endif
|
||||||
|
if !has_key(s:cfilemap, 'rhs')
|
||||||
|
let s:cfilemap.rhs = "substitute(&l:inex =~# '\\<v:fname\\>' && len(expand('<cfile>')) ? eval(substitute(&l:inex, '\\<v:fname\\>', '\\=string(expand(\"<cfile>\"))', 'g')) : '', '^$', \"\\022\\006\",'')"
|
||||||
|
endif
|
||||||
|
let s:ctagmap = v:version >= 704 ? maparg('<Plug><ctag>', 'c', 0, 1) : {}
|
||||||
|
if !get(s:ctagmap, 'buffer') || !s:ctagmap.expr || s:ctagmap.rhs =~# 'ErubyAtCursor()'
|
||||||
|
let s:ctagmap = {}
|
||||||
|
endif
|
||||||
|
let s:include = &l:include
|
||||||
|
let s:path = &l:path
|
||||||
|
let s:suffixesadd = &l:suffixesadd
|
||||||
|
|
||||||
runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
|
runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
|
||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = s:did_ftplugin . '.eruby'
|
||||||
|
|
||||||
" Combine the new set of values with those previously included.
|
" Combine the new set of values with those previously included.
|
||||||
if exists("b:undo_ftplugin")
|
if exists("b:undo_ftplugin")
|
||||||
@@ -82,6 +102,15 @@ if exists("b:match_words")
|
|||||||
let s:match_words = b:match_words . ',' . s:match_words
|
let s:match_words = b:match_words . ',' . s:match_words
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if len(s:include)
|
||||||
|
let &l:include = s:include
|
||||||
|
endif
|
||||||
|
let &l:path = s:path . (s:path =~# ',$\|^$' ? '' : ',') . &l:path
|
||||||
|
let &l:suffixesadd = s:suffixesadd . (s:suffixesadd =~# ',$\|^$' ? '' : ',') . &l:suffixesadd
|
||||||
|
exe 'cmap <buffer><script><expr> <Plug><cfile> ErubyAtCursor() ? ' . maparg('<Plug><cfile>', 'c') . ' : ' . s:cfilemap.rhs
|
||||||
|
exe 'cmap <buffer><script><expr> <Plug><ctag> ErubyAtCursor() ? ' . maparg('<Plug><ctag>', 'c') . ' : ' . get(s:ctagmap, 'rhs', '"\022\027"')
|
||||||
|
unlet s:cfilemap s:ctagmap s:include s:path s:suffixesadd
|
||||||
|
|
||||||
" Change the browse dialog on Win32 to show mainly eRuby-related files
|
" Change the browse dialog on Win32 to show mainly eRuby-related files
|
||||||
if has("gui_win32")
|
if has("gui_win32")
|
||||||
let b:browsefilter="eRuby Files (*.erb, *.rhtml)\t*.erb;*.rhtml\n" . s:browsefilter
|
let b:browsefilter="eRuby Files (*.erb, *.rhtml)\t*.erb;*.rhtml\n" . s:browsefilter
|
||||||
@@ -101,6 +130,11 @@ let b:undo_ftplugin = "setl cms< "
|
|||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
function! ErubyAtCursor() abort
|
||||||
|
let groups = map(['erubyBlock', 'erubyComment', 'erubyExpression', 'erubyOneLiner'], 'hlID(v:val)')
|
||||||
|
return !empty(filter(synstack(line('.'), col('.')), 'index(groups, v:val) >= 0'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
" vim: nowrap sw=2 sts=2 ts=8:
|
" vim: nowrap sw=2 sts=2 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ endif
|
|||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
if !exists('b:git_dir')
|
if !exists('b:git_dir')
|
||||||
if expand('%:p') =~# '[\/]\.git[\/]modules[\/]'
|
if expand('%:p') =~# '[\/]\.git[\/]modules[\/]\|:[\/][\/]\|^\a\a\+:'
|
||||||
" Stay out of the way
|
" Stay out of the way
|
||||||
elseif expand('%:p') =~# '[\/]\.git[\/]worktrees'
|
elseif expand('%:p') =~# '[\/]\.git[\/]worktrees'
|
||||||
let b:git_dir = matchstr(expand('%:p'),'.*\.git[\/]worktrees[\/][^\/]\+\>')
|
let b:git_dir = matchstr(expand('%:p'),'.*\.git[\/]worktrees[\/][^\/]\+\>')
|
||||||
|
|||||||
20
ftplugin/graphql.vim
Normal file
20
ftplugin/graphql.vim
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
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+=$,@-@
|
||||||
|
setlocal softtabstop=2
|
||||||
|
setlocal shiftwidth=2
|
||||||
|
setlocal expandtab
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haskell') == -1
|
|
||||||
|
|
||||||
if exists("g:loaded_haskellvim_haskell")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
let g:loaded_haskellvim_haskell = 1
|
|
||||||
|
|
||||||
function! haskell#sortImports(line1, line2)
|
|
||||||
exe a:line1 . "," . a:line2 . "sort /import\\s\\+\\(qualified\\s\\+\\)\\?/"
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! haskell#formatImport(line1, line2)
|
|
||||||
exec a:line1 . ",". a:line2 . "s/import\\s\\+\\([A-Z].*\\)/import \\1"
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
command! -buffer -range HaskellSortImports call haskell#sortImports(<line1>, <line2>)
|
|
||||||
command! -buffer -range HaskellFormatImport call haskell#formatImport(<line1>, <line2>)
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -19,11 +19,12 @@ setlocal comments=:#
|
|||||||
setlocal commentstring=#=%s=#
|
setlocal commentstring=#=%s=#
|
||||||
setlocal cinoptions+=#1
|
setlocal cinoptions+=#1
|
||||||
setlocal define=^\\s*macro\\>
|
setlocal define=^\\s*macro\\>
|
||||||
|
setlocal fo-=t fo+=croql
|
||||||
|
|
||||||
let b:julia_vim_loaded = 1
|
let b:julia_vim_loaded = 1
|
||||||
|
|
||||||
let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<"
|
let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<"
|
||||||
\ . " define< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< omnifunc<"
|
\ . " define< fo< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< omnifunc<"
|
||||||
\ . " | unlet! b:julia_vim_loaded"
|
\ . " | unlet! b:julia_vim_loaded"
|
||||||
|
|
||||||
" MatchIt plugin support
|
" MatchIt plugin support
|
||||||
@@ -93,6 +94,14 @@ if has("gui_win32")
|
|||||||
let b:undo_ftplugin = b:undo_ftplugin . " | unlet! b:browsefilter"
|
let b:undo_ftplugin = b:undo_ftplugin . " | unlet! b:browsefilter"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Lookup documents
|
||||||
|
nnoremap <silent><buffer> <Plug>(JuliaDocPrompt) :<C-u>call julia#doc#prompt()<CR>
|
||||||
|
command! -nargs=1 -buffer -complete=customlist,julia#doc#complete JuliaDoc call julia#doc#open(<q-args>)
|
||||||
|
command! -nargs=1 -buffer JuliaDocKeywordprg call julia#doc#keywordprg(<q-args>)
|
||||||
|
setlocal keywordprg=:JuliaDocKeywordprg
|
||||||
|
let b:undo_ftplugin .= " | setlocal keywordprg<"
|
||||||
|
let b:undo_ftplugin .= " | delcommand JuliaDoc | delcommand JuliaDocKeywordprg"
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
|||||||
34
ftplugin/juliadoc.vim
Normal file
34
ftplugin/juliadoc.vim
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||||
|
|
||||||
|
" Vim filetype plugin file
|
||||||
|
" Language: Julia document
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo-=C
|
||||||
|
|
||||||
|
setlocal conceallevel=2
|
||||||
|
setlocal concealcursor=nc
|
||||||
|
setlocal wrap
|
||||||
|
|
||||||
|
if !exists('b:undo_ftplugin')
|
||||||
|
let b:undo_ftplugin = ''
|
||||||
|
endif
|
||||||
|
let b:undo_ftplugin .= 'setlocal conceallevel< concealcursor< wrap<'
|
||||||
|
|
||||||
|
" Lookup documents
|
||||||
|
nnoremap <silent><buffer> <Plug>(JuliaDocPrompt) :<C-u>call julia#doc#prompt()<CR>
|
||||||
|
command! -nargs=1 -buffer -complete=customlist,julia#doc#complete JuliaDoc call julia#doc#open(<q-args>)
|
||||||
|
command! -nargs=1 -buffer JuliaDocKeywordprg call julia#doc#keywordprg(<q-args>)
|
||||||
|
setlocal keywordprg=:JuliaDocKeywordprg
|
||||||
|
let b:undo_ftplugin .= " | setlocal keywordprg<"
|
||||||
|
let b:undo_ftplugin .= " | delcommand JuliaDoc | delcommand JuliaDocKeywordprg"
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -11,7 +11,12 @@ endif
|
|||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
|
||||||
setlocal comments=:#
|
setlocal
|
||||||
setlocal commentstring=#\ %s
|
\ comments=:#
|
||||||
|
\ commentstring=#\ %s
|
||||||
|
\ shiftwidth=2
|
||||||
|
\ softtabstop=2
|
||||||
|
\ expandtab
|
||||||
|
\ iskeyword+=-
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
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 include=^import
|
||||||
setlocal includeexpr=printf('%s.purs',substitute(v:fname,'\\.','/','g'))
|
setlocal includeexpr=printf('%s.purs',substitute(v:fname,'\\.','/','g'))
|
||||||
|
|
||||||
|
|||||||
@@ -46,19 +46,12 @@ endif
|
|||||||
setlocal formatoptions-=t formatoptions+=croql
|
setlocal formatoptions-=t formatoptions+=croql
|
||||||
|
|
||||||
setlocal include=^\\s*\\<\\(load\\>\\\|require\\>\\\|autoload\\s*:\\=[\"']\\=\\h\\w*[\"']\\=,\\)
|
setlocal include=^\\s*\\<\\(load\\>\\\|require\\>\\\|autoload\\s*:\\=[\"']\\=\\h\\w*[\"']\\=,\\)
|
||||||
setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'\%(\.rb\)\=$','.rb','')
|
|
||||||
setlocal suffixesadd=.rb
|
setlocal suffixesadd=.rb
|
||||||
|
|
||||||
if exists("&ofu") && has("ruby")
|
if exists("&ofu") && has("ruby")
|
||||||
setlocal omnifunc=rubycomplete#Complete
|
setlocal omnifunc=rubycomplete#Complete
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" To activate, :set ballooneval
|
|
||||||
if has('balloon_eval') && exists('+balloonexpr')
|
|
||||||
setlocal balloonexpr=RubyBalloonexpr()
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
" TODO:
|
" TODO:
|
||||||
"setlocal define=^\\s*def
|
"setlocal define=^\\s*def
|
||||||
|
|
||||||
@@ -143,22 +136,32 @@ if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
|||||||
\ "All Files (*.*)\t*.*\n"
|
\ "All Files (*.*)\t*.*\n"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< tags< kp<"
|
let b:undo_ftplugin = "setl inc= sua= path= tags= fo< com< cms< kp="
|
||||||
\."| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
|
\."| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
|
||||||
\."| if exists('&ofu') && has('ruby') | setl ofu< | endif"
|
\."| if exists('&ofu') && has('ruby') | setl ofu< | endif"
|
||||||
\."| if has('balloon_eval') && exists('+bexpr') | setl bexpr< | endif"
|
|
||||||
|
if get(g:, 'ruby_recommended_style', 1)
|
||||||
|
setlocal shiftwidth=2 softtabstop=2 expandtab
|
||||||
|
let b:undo_ftplugin .= ' | setl sw< sts< et<'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" To activate, :set ballooneval
|
||||||
|
if exists('+balloonexpr') && get(g:, 'ruby_balloonexpr')
|
||||||
|
setlocal balloonexpr=RubyBalloonexpr()
|
||||||
|
let b:undo_ftplugin .= "| setl bexpr="
|
||||||
|
endif
|
||||||
|
|
||||||
function! s:map(mode, flags, map) abort
|
function! s:map(mode, flags, map) abort
|
||||||
let from = matchstr(a:map, '\S\+')
|
let from = matchstr(a:map, '\S\+')
|
||||||
if empty(mapcheck(from, a:mode))
|
if empty(mapcheck(from, a:mode))
|
||||||
exe a:mode.'map' '<buffer>'.(a:0 ? a:1 : '') a:map
|
exe a:mode.'map' '<buffer>' a:map
|
||||||
let b:undo_ftplugin .= '|sil! '.a:mode.'unmap <buffer> '.from
|
let b:undo_ftplugin .= '|sil! '.a:mode.'unmap <buffer> '.from
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
cmap <buffer><script><expr> <Plug><cword> substitute(RubyCursorIdentifier(),'^$',"\022\027",'')
|
cmap <buffer><script><expr> <Plug><ctag> substitute(RubyCursorTag(),'^$',"\022\027",'')
|
||||||
cmap <buffer><script><expr> <Plug><cfile> substitute(RubyCursorFile(),'^$',"\022\006",'')
|
cmap <buffer><script><expr> <Plug><cfile> substitute(RubyCursorFile(),'^$',"\022\006",'')
|
||||||
let b:undo_ftplugin .= "| sil! cunmap <buffer> <Plug><cword>| sil! cunmap <buffer> <Plug><cfile>"
|
let b:undo_ftplugin .= "| sil! cunmap <buffer> <Plug><ctag>| sil! cunmap <buffer> <Plug><cfile>"
|
||||||
|
|
||||||
if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
|
if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
|
||||||
nmap <buffer><script> <SID>: :<C-U>
|
nmap <buffer><script> <SID>: :<C-U>
|
||||||
@@ -206,19 +209,18 @@ if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
|
|||||||
\."| sil! exe 'xunmap <buffer> iM' | sil! exe 'xunmap <buffer> aM'"
|
\."| sil! exe 'xunmap <buffer> iM' | sil! exe 'xunmap <buffer> aM'"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call s:map('c', '', '<C-R><C-W> <Plug><cword>')
|
|
||||||
call s:map('c', '', '<C-R><C-F> <Plug><cfile>')
|
call s:map('c', '', '<C-R><C-F> <Plug><cfile>')
|
||||||
|
|
||||||
cmap <buffer><script><expr> <SID>tagzv &foldopen =~# 'tag' ? '<Bar>norm! zv' : ''
|
cmap <buffer><script><expr> <SID>tagzv &foldopen =~# 'tag' ? '<Bar>norm! zv' : ''
|
||||||
call s:map('n', '<silent>', '<C-]> <SID>:exe v:count1."tag <Plug><cword>"<SID>tagzv<CR>')
|
call s:map('n', '<silent>', '<C-]> <SID>:exe v:count1."tag <Plug><ctag>"<SID>tagzv<CR>')
|
||||||
call s:map('n', '<silent>', 'g<C-]> <SID>:exe "tjump <Plug><cword>"<SID>tagzv<CR>')
|
call s:map('n', '<silent>', 'g<C-]> <SID>:exe "tjump <Plug><ctag>"<SID>tagzv<CR>')
|
||||||
call s:map('n', '<silent>', 'g] <SID>:exe "tselect <Plug><cword>"<SID>tagzv<CR>')
|
call s:map('n', '<silent>', 'g] <SID>:exe "tselect <Plug><ctag>"<SID>tagzv<CR>')
|
||||||
call s:map('n', '<silent>', '<C-W>] <SID>:exe v:count1."stag <Plug><cword>"<SID>tagzv<CR>')
|
call s:map('n', '<silent>', '<C-W>] <SID>:exe v:count1."stag <Plug><ctag>"<SID>tagzv<CR>')
|
||||||
call s:map('n', '<silent>', '<C-W><C-]> <SID>:exe v:count1."stag <Plug><cword>"<SID>tagzv<CR>')
|
call s:map('n', '<silent>', '<C-W><C-]> <SID>:exe v:count1."stag <Plug><ctag>"<SID>tagzv<CR>')
|
||||||
call s:map('n', '<silent>', '<C-W>g<C-]> <SID>:exe "stjump <Plug><cword>"<SID>tagzv<CR>')
|
call s:map('n', '<silent>', '<C-W>g<C-]> <SID>:exe "stjump <Plug><ctag>"<SID>tagzv<CR>')
|
||||||
call s:map('n', '<silent>', '<C-W>g] <SID>:exe "stselect <Plug><cword>"<SID>tagzv<CR>')
|
call s:map('n', '<silent>', '<C-W>g] <SID>:exe "stselect <Plug><ctag>"<SID>tagzv<CR>')
|
||||||
call s:map('n', '<silent>', '<C-W>} <SID>:exe v:count1."ptag <Plug><cword>"<CR>')
|
call s:map('n', '<silent>', '<C-W>} <SID>:exe v:count1."ptag <Plug><ctag>"<CR>')
|
||||||
call s:map('n', '<silent>', '<C-W>g} <SID>:exe "ptjump <Plug><cword>"<CR>')
|
call s:map('n', '<silent>', '<C-W>g} <SID>:exe "ptjump <Plug><ctag>"<CR>')
|
||||||
|
|
||||||
call s:map('n', '<silent>', 'gf <SID>c:find <Plug><cfile><CR>')
|
call s:map('n', '<silent>', 'gf <SID>c:find <Plug><cfile><CR>')
|
||||||
call s:map('n', '<silent>', '<C-W>f <SID>c:sfind <Plug><cfile><CR>')
|
call s:map('n', '<silent>', '<C-W>f <SID>c:sfind <Plug><cfile><CR>')
|
||||||
@@ -352,6 +354,10 @@ function! RubyCursorIdentifier() abort
|
|||||||
return stripped == '' ? expand("<cword>") : stripped
|
return stripped == '' ? expand("<cword>") : stripped
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! RubyCursorTag() abort
|
||||||
|
return substitute(RubyCursorIdentifier(), '^[$@]*', '', '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! RubyCursorFile() abort
|
function! RubyCursorFile() abort
|
||||||
let isfname = &isfname
|
let isfname = &isfname
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -12,83 +12,75 @@ if exists("b:did_ftplugin")
|
|||||||
endif
|
endif
|
||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
augroup rust.vim
|
augroup rust.vim
|
||||||
autocmd!
|
autocmd!
|
||||||
|
|
||||||
" Variables {{{1
|
if get(b:, 'current_compiler', '') ==# ''
|
||||||
|
if strlen(findfile('Cargo.toml', '.;')) > 0
|
||||||
|
compiler cargo
|
||||||
|
else
|
||||||
|
compiler rustc
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
" The rust source code at present seems to typically omit a leader on /*!
|
" Variables {{{1
|
||||||
" comments, so we'll use that as our default, but make it easy to switch.
|
|
||||||
" This does not affect indentation at all (I tested it with and without
|
" The rust source code at present seems to typically omit a leader on /*!
|
||||||
" leader), merely whether a leader is inserted by default or not.
|
" comments, so we'll use that as our default, but make it easy to switch.
|
||||||
if exists("g:rust_bang_comment_leader") && g:rust_bang_comment_leader != 0
|
" This does not affect indentation at all (I tested it with and without
|
||||||
|
" leader), merely whether a leader is inserted by default or not.
|
||||||
|
if get(g:, 'rust_bang_comment_leader', 0)
|
||||||
" Why is the `,s0:/*,mb:\ ,ex:*/` there, you ask? I don't understand why,
|
" Why is the `,s0:/*,mb:\ ,ex:*/` there, you ask? I don't understand why,
|
||||||
" but without it, */ gets indented one space even if there were no
|
" but without it, */ gets indented one space even if there were no
|
||||||
" leaders. I'm fairly sure that's a Vim bug.
|
" leaders. I'm fairly sure that's a Vim bug.
|
||||||
setlocal comments=s1:/*,mb:*,ex:*/,s0:/*,mb:\ ,ex:*/,:///,://!,://
|
setlocal comments=s1:/*,mb:*,ex:*/,s0:/*,mb:\ ,ex:*/,:///,://!,://
|
||||||
else
|
else
|
||||||
setlocal comments=s0:/*!,m:\ ,ex:*/,s1:/*,mb:*,ex:*/,:///,://!,://
|
setlocal comments=s0:/*!,m:\ ,ex:*/,s1:/*,mb:*,ex:*/,:///,://!,://
|
||||||
endif
|
endif
|
||||||
setlocal commentstring=//%s
|
setlocal commentstring=//%s
|
||||||
setlocal formatoptions-=t formatoptions+=croqnl
|
setlocal formatoptions-=t formatoptions+=croqnl
|
||||||
" j was only added in 7.3.541, so stop complaints about its nonexistence
|
" j was only added in 7.3.541, so stop complaints about its nonexistence
|
||||||
silent! setlocal formatoptions+=j
|
silent! setlocal formatoptions+=j
|
||||||
|
|
||||||
" smartindent will be overridden by indentexpr if filetype indent is on, but
|
" smartindent will be overridden by indentexpr if filetype indent is on, but
|
||||||
" otherwise it's better than nothing.
|
" otherwise it's better than nothing.
|
||||||
setlocal smartindent nocindent
|
setlocal smartindent nocindent
|
||||||
|
|
||||||
if !exists("g:rust_recommended_style") || g:rust_recommended_style != 0
|
if get(g:, 'rust_recommended_style', 1)
|
||||||
setlocal tabstop=4 shiftwidth=4 softtabstop=4 expandtab
|
let b:rust_set_style = 1
|
||||||
|
setlocal tabstop=8 shiftwidth=4 softtabstop=4 expandtab
|
||||||
setlocal textwidth=99
|
setlocal textwidth=99
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" This includeexpr isn't perfect, but it's a good start
|
" This includeexpr isn't perfect, but it's a good start
|
||||||
setlocal includeexpr=substitute(v:fname,'::','/','g')
|
setlocal includeexpr=substitute(v:fname,'::','/','g')
|
||||||
|
|
||||||
setlocal suffixesadd=.rs
|
setlocal suffixesadd=.rs
|
||||||
|
|
||||||
if exists("g:ftplugin_rust_source_path")
|
if exists("g:ftplugin_rust_source_path")
|
||||||
let &l:path=g:ftplugin_rust_source_path . ',' . &l:path
|
let &l:path=g:ftplugin_rust_source_path . ',' . &l:path
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists("g:loaded_delimitMate")
|
if exists("g:loaded_delimitMate")
|
||||||
if exists("b:delimitMate_excluded_regions")
|
if exists("b:delimitMate_excluded_regions")
|
||||||
let b:rust_original_delimitMate_excluded_regions = b:delimitMate_excluded_regions
|
let b:rust_original_delimitMate_excluded_regions = b:delimitMate_excluded_regions
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:delimitMate_extra_excluded_regions = ',rustLifetimeCandidate,rustGenericLifetimeCandidate'
|
autocmd User delimitMate_map :call rust#delimitmate#onMap()
|
||||||
|
autocmd User delimitMate_unmap :call rust#delimitmate#onUnmap()
|
||||||
|
endif
|
||||||
|
|
||||||
" For this buffer, when delimitMate issues the `User delimitMate_map`
|
" Integration with auto-pairs (https://github.com/jiangmiao/auto-pairs)
|
||||||
" event in the autocommand system, add the above-defined extra excluded
|
if exists("g:AutoPairsLoaded") && !get(g:, 'rust_keep_autopairs_default', 0)
|
||||||
" regions to delimitMate's state, if they have not already been added.
|
let b:AutoPairs = {'(':')', '[':']', '{':'}','"':'"', '`':'`'}
|
||||||
autocmd User <buffer>
|
endif
|
||||||
\ if expand('<afile>') ==# 'delimitMate_map' && match(
|
|
||||||
\ delimitMate#Get("excluded_regions"),
|
|
||||||
\ s:delimitMate_extra_excluded_regions) == -1
|
|
||||||
\| let b:delimitMate_excluded_regions =
|
|
||||||
\ delimitMate#Get("excluded_regions")
|
|
||||||
\ . s:delimitMate_extra_excluded_regions
|
|
||||||
\|endif
|
|
||||||
|
|
||||||
" For this buffer, when delimitMate issues the `User delimitMate_unmap`
|
if has("folding") && get(g:, 'rust_fold', 0)
|
||||||
" event in the autocommand system, delete the above-defined extra excluded
|
|
||||||
" regions from delimitMate's state (the deletion being idempotent and
|
|
||||||
" having no effect if the extra excluded regions are not present in the
|
|
||||||
" targeted part of delimitMate's state).
|
|
||||||
autocmd User <buffer>
|
|
||||||
\ if expand('<afile>') ==# 'delimitMate_unmap'
|
|
||||||
\| let b:delimitMate_excluded_regions = substitute(
|
|
||||||
\ delimitMate#Get("excluded_regions"),
|
|
||||||
\ '\C\V' . s:delimitMate_extra_excluded_regions,
|
|
||||||
\ '', 'g')
|
|
||||||
\|endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if has("folding") && exists('g:rust_fold') && g:rust_fold != 0
|
|
||||||
let b:rust_set_foldmethod=1
|
let b:rust_set_foldmethod=1
|
||||||
setlocal foldmethod=syntax
|
setlocal foldmethod=syntax
|
||||||
if g:rust_fold == 2
|
if g:rust_fold == 2
|
||||||
@@ -96,63 +88,70 @@ if has("folding") && exists('g:rust_fold') && g:rust_fold != 0
|
|||||||
else
|
else
|
||||||
setlocal foldlevel=99
|
setlocal foldlevel=99
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has('conceal') && exists('g:rust_conceal') && g:rust_conceal != 0
|
if has('conceal') && get(g:, 'rust_conceal', 0)
|
||||||
let b:rust_set_conceallevel=1
|
let b:rust_set_conceallevel=1
|
||||||
setlocal conceallevel=2
|
setlocal conceallevel=2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Motion Commands {{{1
|
" Motion Commands {{{1
|
||||||
|
|
||||||
" Bind motion commands to support hanging indents
|
" Bind motion commands to support hanging indents
|
||||||
nnoremap <silent> <buffer> [[ :call rust#Jump('n', 'Back')<CR>
|
nnoremap <silent> <buffer> [[ :call rust#Jump('n', 'Back')<CR>
|
||||||
nnoremap <silent> <buffer> ]] :call rust#Jump('n', 'Forward')<CR>
|
nnoremap <silent> <buffer> ]] :call rust#Jump('n', 'Forward')<CR>
|
||||||
xnoremap <silent> <buffer> [[ :call rust#Jump('v', 'Back')<CR>
|
xnoremap <silent> <buffer> [[ :call rust#Jump('v', 'Back')<CR>
|
||||||
xnoremap <silent> <buffer> ]] :call rust#Jump('v', 'Forward')<CR>
|
xnoremap <silent> <buffer> ]] :call rust#Jump('v', 'Forward')<CR>
|
||||||
onoremap <silent> <buffer> [[ :call rust#Jump('o', 'Back')<CR>
|
onoremap <silent> <buffer> [[ :call rust#Jump('o', 'Back')<CR>
|
||||||
onoremap <silent> <buffer> ]] :call rust#Jump('o', 'Forward')<CR>
|
onoremap <silent> <buffer> ]] :call rust#Jump('o', 'Forward')<CR>
|
||||||
|
|
||||||
" Commands {{{1
|
" Commands {{{1
|
||||||
|
|
||||||
" See |:RustRun| for docs
|
" See |:RustRun| for docs
|
||||||
command! -nargs=* -complete=file -bang -buffer RustRun call rust#Run(<bang>0, <q-args>)
|
command! -nargs=* -complete=file -bang -buffer RustRun call rust#Run(<bang>0, <q-args>)
|
||||||
|
|
||||||
" See |:RustExpand| for docs
|
" See |:RustExpand| for docs
|
||||||
command! -nargs=* -complete=customlist,rust#CompleteExpand -bang -buffer RustExpand call rust#Expand(<bang>0, <q-args>)
|
command! -nargs=* -complete=customlist,rust#CompleteExpand -bang -buffer RustExpand call rust#Expand(<bang>0, <q-args>)
|
||||||
|
|
||||||
" See |:RustEmitIr| for docs
|
" See |:RustEmitIr| for docs
|
||||||
command! -nargs=* -buffer RustEmitIr call rust#Emit("llvm-ir", <q-args>)
|
command! -nargs=* -buffer RustEmitIr call rust#Emit("llvm-ir", <q-args>)
|
||||||
|
|
||||||
" See |:RustEmitAsm| for docs
|
" See |:RustEmitAsm| for docs
|
||||||
command! -nargs=* -buffer RustEmitAsm call rust#Emit("asm", <q-args>)
|
command! -nargs=* -buffer RustEmitAsm call rust#Emit("asm", <q-args>)
|
||||||
|
|
||||||
" See |:RustPlay| for docs
|
" See |:RustPlay| for docs
|
||||||
command! -range=% RustPlay :call rust#Play(<count>, <line1>, <line2>, <f-args>)
|
command! -range=% RustPlay :call rust#Play(<count>, <line1>, <line2>, <f-args>)
|
||||||
|
|
||||||
" See |:RustFmt| for docs
|
" See |:RustFmt| for docs
|
||||||
command! -buffer RustFmt call rustfmt#Format()
|
command! -buffer RustFmt call rustfmt#Format()
|
||||||
|
|
||||||
" See |:RustFmtRange| for docs
|
" See |:RustFmtRange| for docs
|
||||||
command! -range -buffer RustFmtRange call rustfmt#FormatRange(<line1>, <line2>)
|
command! -range -buffer RustFmtRange call rustfmt#FormatRange(<line1>, <line2>)
|
||||||
|
|
||||||
" Mappings {{{1
|
" See |:RustInfo| for docs
|
||||||
|
command! -bar RustInfo call rust#debugging#Info()
|
||||||
|
|
||||||
" Bind ⌘R in MacVim to :RustRun
|
" See |:RustInfoToClipboard| for docs
|
||||||
nnoremap <silent> <buffer> <D-r> :RustRun<CR>
|
command! -bar RustInfoToClipboard call rust#debugging#InfoToClipboard()
|
||||||
" Bind ⌘⇧R in MacVim to :RustRun! pre-filled with the last args
|
|
||||||
nnoremap <buffer> <D-R> :RustRun! <C-r>=join(b:rust_last_rustc_args)<CR><C-\>erust#AppendCmdLine(' -- ' . join(b:rust_last_args))<CR>
|
|
||||||
|
|
||||||
if !exists("b:rust_last_rustc_args") || !exists("b:rust_last_args")
|
" See |:RustInfoToFile| for docs
|
||||||
|
command! -bar -nargs=1 RustInfoToFile call rust#debugging#InfoToFile(<f-args>)
|
||||||
|
|
||||||
|
" See |:RustTest| for docs
|
||||||
|
command! -buffer -nargs=* -bang RustTest call rust#Test(<bang>0, <q-args>)
|
||||||
|
|
||||||
|
if !exists("b:rust_last_rustc_args") || !exists("b:rust_last_args")
|
||||||
let b:rust_last_rustc_args = []
|
let b:rust_last_rustc_args = []
|
||||||
let b:rust_last_args = []
|
let b:rust_last_args = []
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Cleanup {{{1
|
" Cleanup {{{1
|
||||||
|
|
||||||
let b:undo_ftplugin = "
|
let b:undo_ftplugin = "
|
||||||
\ setlocal formatoptions< comments< commentstring< includeexpr< suffixesadd<
|
\ setlocal formatoptions< comments< commentstring< includeexpr< suffixesadd<
|
||||||
|
\|if exists('b:rust_set_style')
|
||||||
\|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth<
|
\|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth<
|
||||||
|
\|endif
|
||||||
\|if exists('b:rust_original_delimitMate_excluded_regions')
|
\|if exists('b:rust_original_delimitMate_excluded_regions')
|
||||||
\|let b:delimitMate_excluded_regions = b:rust_original_delimitMate_excluded_regions
|
\|let b:delimitMate_excluded_regions = b:rust_original_delimitMate_excluded_regions
|
||||||
\|unlet b:rust_original_delimitMate_excluded_regions
|
\|unlet b:rust_original_delimitMate_excluded_regions
|
||||||
@@ -173,34 +172,32 @@ let b:undo_ftplugin = "
|
|||||||
\|delcommand RustEmitIr
|
\|delcommand RustEmitIr
|
||||||
\|delcommand RustEmitAsm
|
\|delcommand RustEmitAsm
|
||||||
\|delcommand RustPlay
|
\|delcommand RustPlay
|
||||||
\|nunmap <buffer> <D-r>
|
|
||||||
\|nunmap <buffer> <D-R>
|
|
||||||
\|nunmap <buffer> [[
|
\|nunmap <buffer> [[
|
||||||
\|nunmap <buffer> ]]
|
\|nunmap <buffer> ]]
|
||||||
\|xunmap <buffer> [[
|
\|xunmap <buffer> [[
|
||||||
\|xunmap <buffer> ]]
|
\|xunmap <buffer> ]]
|
||||||
\|ounmap <buffer> [[
|
\|ounmap <buffer> [[
|
||||||
\|ounmap <buffer> ]]
|
\|ounmap <buffer> ]]
|
||||||
\|set matchpairs-=<:>
|
\|setlocal matchpairs-=<:>
|
||||||
\|unlet b:match_skip
|
\|unlet b:match_skip
|
||||||
\"
|
\"
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
" Code formatting on save
|
" Code formatting on save
|
||||||
if get(g:, "rustfmt_autosave", 0)
|
autocmd BufWritePre <buffer> silent! call rustfmt#PreWrite()
|
||||||
autocmd BufWritePre *.rs silent! call rustfmt#Format()
|
|
||||||
endif
|
|
||||||
|
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
set matchpairs+=<:>
|
setlocal matchpairs+=<:>
|
||||||
" For matchit.vim (rustArrow stops `Fn() -> X` messing things up)
|
" For matchit.vim (rustArrow stops `Fn() -> X` messing things up)
|
||||||
let b:match_skip = 's:comment\|string\|rustArrow'
|
let b:match_skip = 's:comment\|string\|rustArrow'
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
" vim: set noet sw=8 ts=8:
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
44
ftplugin/rust/tagbar.vim
Normal file
44
ftplugin/rust/tagbar.vim
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
|
"
|
||||||
|
" Support for Tagbar -- https://github.com/majutsushi/tagbar
|
||||||
|
"
|
||||||
|
if !exists(':Tagbar')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
|
if !exists('g:tagbar_type_rust')
|
||||||
|
let g:tagbar_type_rust = {
|
||||||
|
\ 'ctagstype' : 'rust',
|
||||||
|
\ 'kinds' : [
|
||||||
|
\'T:types',
|
||||||
|
\'f:functions',
|
||||||
|
\'g:enumerations',
|
||||||
|
\'s:structures',
|
||||||
|
\'m:modules',
|
||||||
|
\'c:constants',
|
||||||
|
\'t:traits',
|
||||||
|
\'i:trait implementations',
|
||||||
|
\ ]
|
||||||
|
\ }
|
||||||
|
endif
|
||||||
|
|
||||||
|
" In case you've updated/customized your ~/.ctags and prefer to use it.
|
||||||
|
if !get(g:, 'rust_use_custom_ctags_defs', 0)
|
||||||
|
let g:tagbar_type_rust.deffile = expand('<sfile>:p:h:h:h') . '/ctags/rust.ctags'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -3,9 +3,25 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'slim') == -1
|
|||||||
if exists("b:did_ftplugin")
|
if exists("b:did_ftplugin")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Define some defaults in case the included ftplugins don't set them.
|
||||||
|
let s:undo_ftplugin = ""
|
||||||
|
|
||||||
|
" Override our defaults if these were set by an included ftplugin.
|
||||||
|
if exists("b:undo_ftplugin")
|
||||||
|
let s:undo_ftplugin = b:undo_ftplugin
|
||||||
|
unlet b:undo_ftplugin
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
|
||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
let b:undo_ftplugin = "setl isk<"
|
" Combine the new set of values with those previously included.
|
||||||
|
if exists("b:undo_ftplugin")
|
||||||
|
let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl isk<" . " | " . s:undo_ftplugin
|
||||||
|
|
||||||
setlocal iskeyword+=-
|
setlocal iskeyword+=-
|
||||||
setlocal commentstring=/%s
|
setlocal commentstring=/%s
|
||||||
|
|||||||
73
ftplugin/terraform.vim
Normal file
73
ftplugin/terraform.vim
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
|
||||||
|
|
||||||
|
" terraform.vim - basic vim/terraform integration
|
||||||
|
" Maintainer: HashiVim <https://github.com/hashivim>
|
||||||
|
|
||||||
|
if exists("g:loaded_terraform") || v:version < 700 || &cp || !executable('terraform')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_terraform = 1
|
||||||
|
|
||||||
|
if !exists("g:terraform_fmt_on_save")
|
||||||
|
let g:terraform_fmt_on_save = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! s:commands(A, L, P)
|
||||||
|
return join([
|
||||||
|
\ "apply",
|
||||||
|
\ "console",
|
||||||
|
\ "destroy",
|
||||||
|
\ "env",
|
||||||
|
\ "fmt",
|
||||||
|
\ "get",
|
||||||
|
\ "graph",
|
||||||
|
\ "import",
|
||||||
|
\ "init",
|
||||||
|
\ "output",
|
||||||
|
\ "plan",
|
||||||
|
\ "providers",
|
||||||
|
\ "push",
|
||||||
|
\ "refresh",
|
||||||
|
\ "show",
|
||||||
|
\ "taint",
|
||||||
|
\ "untaint",
|
||||||
|
\ "validate",
|
||||||
|
\ "version",
|
||||||
|
\ "workspace",
|
||||||
|
\ "debug",
|
||||||
|
\ "force-unlock",
|
||||||
|
\ "state"
|
||||||
|
\ ], "\n")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Adapted from vim-hclfmt:
|
||||||
|
" https://github.com/fatih/vim-hclfmt/blob/master/autoload/fmt.vim
|
||||||
|
function! terraform#fmt()
|
||||||
|
let l:curw = winsaveview()
|
||||||
|
let l:tmpfile = tempname()
|
||||||
|
call writefile(getline(1, "$"), l:tmpfile)
|
||||||
|
let output = system("terraform fmt -write " . l:tmpfile)
|
||||||
|
if v:shell_error == 0
|
||||||
|
try | silent undojoin | catch | endtry
|
||||||
|
call rename(l:tmpfile, resolve(expand("%")))
|
||||||
|
silent edit!
|
||||||
|
let &syntax = &syntax
|
||||||
|
else
|
||||||
|
echo output
|
||||||
|
call delete(l:tmpfile)
|
||||||
|
endif
|
||||||
|
call winrestview(l:curw)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
augroup terraform
|
||||||
|
autocmd!
|
||||||
|
autocmd VimEnter *
|
||||||
|
\ command! -nargs=+ -complete=custom,s:commands Terraform execute '!terraform '.<q-args>. ' -no-color'
|
||||||
|
autocmd VimEnter * command! -nargs=0 TerraformFmt call terraform#fmt()
|
||||||
|
if get(g:, "terraform_fmt_on_save", 1)
|
||||||
|
autocmd BufWritePre *.tf call terraform#fmt()
|
||||||
|
autocmd BufWritePre *.tfvars call terraform#fmt()
|
||||||
|
endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -12,6 +12,27 @@ setlocal comments=s:{#,ex:#}
|
|||||||
setlocal formatoptions+=tcqln
|
setlocal formatoptions+=tcqln
|
||||||
" setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+
|
" setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+
|
||||||
|
|
||||||
|
if exists('b:match_words')
|
||||||
|
let b:twigMatchWords = [
|
||||||
|
\ ['block', 'endblock'],
|
||||||
|
\ ['for', 'endfor'],
|
||||||
|
\ ['macro', 'endmacro'],
|
||||||
|
\ ['if', 'elseif', 'else', 'endif'],
|
||||||
|
\ ['set', 'endset']
|
||||||
|
\]
|
||||||
|
for s:element in b:twigMatchWords
|
||||||
|
let s:pattern = ''
|
||||||
|
for s:tag in s:element[:-2]
|
||||||
|
if s:pattern != ''
|
||||||
|
let s:pattern .= ':'
|
||||||
|
endif
|
||||||
|
let s:pattern .= '{%\s*\<' . s:tag . '\>\s*\%(.*=\)\@![^}]\{-}%}'
|
||||||
|
endfor
|
||||||
|
let s:pattern .= ':{%\s*\<' . s:element[-1:][0] . '\>\s*.\{-}%}'
|
||||||
|
let b:match_words .= ',' . s:pattern
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
if exists("b:did_ftplugin")
|
||||||
let b:undo_ftplugin .= "|setlocal comments< formatoptions<"
|
let b:undo_ftplugin .= "|setlocal comments< formatoptions<"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
|
|||||||
" Maintainer: Eduardo San Martin Morote
|
" Maintainer: Eduardo San Martin Morote
|
||||||
" Author: Adriaan Zonnenberg
|
" Author: Adriaan Zonnenberg
|
||||||
|
|
||||||
if exists("b:did_ftplugin")
|
if exists('b:did_ftplugin')
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -20,11 +20,9 @@ if !exists('g:no_plugin_maps') && !exists('g:no_vue_maps')
|
|||||||
nnoremap <silent> <buffer> ][ :call search('^</\(template\<Bar>script\<Bar>style\)', 'W')<CR>
|
nnoremap <silent> <buffer> ][ :call search('^</\(template\<Bar>script\<Bar>style\)', 'W')<CR>
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists('g:loaded_ale')
|
" Run only ESLint for Vue files by default.
|
||||||
let g:ale_linters = get(g:, 'ale_linters', {})
|
" linters specifically for Vue can still be loaded.
|
||||||
let g:ale_linters.vue = get(g:ale_linters, 'vue', ['eslint'])
|
let b:ale_linter_aliases = get(get(g:, 'ale_linter_aliases', {}), 'vue', ['vue', 'javascript'])
|
||||||
let g:ale_linter_aliases = get(g:, 'ale_linter_aliases', {})
|
let b:ale_linters = get(get(g:, 'ale_linters', {}), 'vue', ['eslint', 'vls'])
|
||||||
let g:ale_linter_aliases.vue = get(g:ale_linter_aliases, 'vue', 'javascript')
|
|
||||||
endif
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
81
indent/applescript.vim
Normal file
81
indent/applescript.vim
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'applescript') == -1
|
||||||
|
|
||||||
|
"Plugin Name: applescript indent file.
|
||||||
|
"Author: mityu
|
||||||
|
"Last Change: 02-May-2017.
|
||||||
|
|
||||||
|
let s:cpo_save=&cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
setlocal indentexpr=GetAppleScriptIndent()
|
||||||
|
setlocal indentkeys+=0=end,0=else,=error
|
||||||
|
|
||||||
|
func! GetAppleScriptIndent()
|
||||||
|
let l:ignorecase_save=&ignorecase
|
||||||
|
try
|
||||||
|
let &ignorecase=0
|
||||||
|
return s:returnAppleScriptIndent()
|
||||||
|
finally
|
||||||
|
let &ignorecase=l:ignorecase_save
|
||||||
|
endtry
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! s:returnAppleScriptIndent()
|
||||||
|
let l:current_text=getline(v:lnum)
|
||||||
|
|
||||||
|
let l:prev_line=prevnonblank(v:lnum-1)
|
||||||
|
|
||||||
|
"At the start of the file, use 0 indent.
|
||||||
|
if l:prev_line==0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:prev_line_save=l:prev_line
|
||||||
|
let l:prev_line=s:prev_non_connected_line(l:prev_line)
|
||||||
|
|
||||||
|
let l:indent=indent(l:prev_line)
|
||||||
|
|
||||||
|
if l:prev_line_save-l:prev_line==1
|
||||||
|
"連結開始
|
||||||
|
let l:indent+=shiftwidth()*2
|
||||||
|
elseif l:prev_line_save-l:prev_line>=2
|
||||||
|
"絶賛連結中
|
||||||
|
"その時は前の行のインデントをそのまま流用する
|
||||||
|
return indent(l:prev_line_save)
|
||||||
|
elseif l:prev_line_save==l:prev_line && s:doesOrderConnect(getline(l:prev_line-1))
|
||||||
|
"前の行が連結される行の最終行の場合
|
||||||
|
let l:prev_line=s:prev_non_connected_line(l:prev_line-1)
|
||||||
|
if l:prev_line==0 | let l:prev_line=1 | endif
|
||||||
|
let l:indent=indent(l:prev_line)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:prev_text=getline(l:prev_line)
|
||||||
|
if l:prev_text=~'^\s*\(on\|\(tell\(.*\<to\>\)\@!\)\|repeat\|try\|if\|else\)'
|
||||||
|
let l:indent+=shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:current_text=~'^\s*\(end\|else\|on\serror\)'
|
||||||
|
let l:indent-=shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:indent
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! s:prev_non_connected_line(line)
|
||||||
|
let l:prev_line=prevnonblank(a:line)
|
||||||
|
while l:prev_line>0 && s:doesOrderConnect(getline(l:prev_line))
|
||||||
|
let l:prev_line-=1
|
||||||
|
endwhile
|
||||||
|
return l:prev_line
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! s:doesOrderConnect(text)
|
||||||
|
return a:text=~'¬$'
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
let &cpo=s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: foldmethod=marker
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -129,17 +129,17 @@ let s:access_modifier_regex = '\C^\s*\%(public\|protected\|private\)\s*\%(#.*\)\
|
|||||||
|
|
||||||
" Check if the character at lnum:col is inside a string, comment, or is ascii.
|
" Check if the character at lnum:col is inside a string, comment, or is ascii.
|
||||||
function s:IsInStringOrComment(lnum, col)
|
function s:IsInStringOrComment(lnum, col)
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# s:syng_strcom
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Check if the character at lnum:col is inside a string.
|
" Check if the character at lnum:col is inside a string.
|
||||||
function s:IsInString(lnum, col)
|
function s:IsInString(lnum, col)
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# s:syng_string
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Check if the character at lnum:col is inside a string or documentation.
|
" Check if the character at lnum:col is inside a string or documentation.
|
||||||
function s:IsInStringOrDocumentation(lnum, col)
|
function s:IsInStringOrDocumentation(lnum, col)
|
||||||
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_stringdoc
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# s:syng_stringdoc
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Check if the character at lnum:col is inside a string delimiter
|
" Check if the character at lnum:col is inside a string delimiter
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ if !exists('g:python_pep8_indent_multiline_string')
|
|||||||
let g:python_pep8_indent_multiline_string = 0
|
let g:python_pep8_indent_multiline_string = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:python_pep8_indent_hang_closing')
|
||||||
|
let g:python_pep8_indent_hang_closing = 0
|
||||||
|
endif
|
||||||
|
|
||||||
let s:block_rules = {
|
let s:block_rules = {
|
||||||
\ '^\s*elif\>': ['if', 'elif'],
|
\ '^\s*elif\>': ['if', 'elif'],
|
||||||
\ '^\s*except\>': ['try', 'except'],
|
\ '^\s*except\>': ['try', 'except'],
|
||||||
@@ -59,7 +63,7 @@ let s:stop_statement = '^\s*\(break\|continue\|raise\|return\|pass\)\>'
|
|||||||
" jedi* refers to syntax definitions from jedi-vim for call signatures, which
|
" jedi* refers to syntax definitions from jedi-vim for call signatures, which
|
||||||
" are inserted temporarily into the buffer.
|
" are inserted temporarily into the buffer.
|
||||||
let s:skip_special_chars = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
let s:skip_special_chars = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
||||||
\ '=~? "\\vstring|comment|jedi\\S"'
|
\ '=~? "\\vstring|comment|^pythonbytes%(contents)=$|jedi\\S"'
|
||||||
|
|
||||||
let s:skip_after_opening_paren = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
let s:skip_after_opening_paren = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
||||||
\ '=~? "\\vcomment|jedi\\S"'
|
\ '=~? "\\vcomment|jedi\\S"'
|
||||||
@@ -90,14 +94,6 @@ else
|
|||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:pair_sort(x, y)
|
|
||||||
if a:x[0] == a:y[0]
|
|
||||||
return a:x[1] == a:y[1] ? 0 : a:x[1] > a:y[1] ? 1 : -1
|
|
||||||
else
|
|
||||||
return a:x[0] > a:y[0] ? 1 : -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Find backwards the closest open parenthesis/bracket/brace.
|
" Find backwards the closest open parenthesis/bracket/brace.
|
||||||
function! s:find_opening_paren(...)
|
function! s:find_opening_paren(...)
|
||||||
" optional arguments: line and column (defaults to 1) to search around
|
" optional arguments: line and column (defaults to 1) to search around
|
||||||
@@ -144,15 +140,12 @@ endfunction
|
|||||||
" Find possible indent(s) of the block starter that matches the current line.
|
" Find possible indent(s) of the block starter that matches the current line.
|
||||||
function! s:find_start_of_block(lnum, types, multiple)
|
function! s:find_start_of_block(lnum, types, multiple)
|
||||||
let r = []
|
let r = []
|
||||||
let types = copy(a:types)
|
|
||||||
let re = '\V\^\s\*\('.join(a:types, '\|').'\)\>'
|
let re = '\V\^\s\*\('.join(a:types, '\|').'\)\>'
|
||||||
let lnum = a:lnum
|
let lnum = a:lnum
|
||||||
let last_indent = indent(lnum) + 1
|
let last_indent = indent(lnum) + 1
|
||||||
while lnum > 0 && last_indent > 0
|
while lnum > 0 && last_indent > 0
|
||||||
let indent = indent(lnum)
|
let indent = indent(lnum)
|
||||||
if indent < last_indent
|
if indent < last_indent
|
||||||
for type in types
|
|
||||||
let re = '\v^\s*'.type.'>'
|
|
||||||
if getline(lnum) =~# re
|
if getline(lnum) =~# re
|
||||||
if !a:multiple
|
if !a:multiple
|
||||||
return [indent]
|
return [indent]
|
||||||
@@ -160,11 +153,8 @@ function! s:find_start_of_block(lnum, types, multiple)
|
|||||||
if index(r, indent) == -1
|
if index(r, indent) == -1
|
||||||
let r += [indent]
|
let r += [indent]
|
||||||
endif
|
endif
|
||||||
" Remove any handled type, e.g. 'if'.
|
let last_indent = indent
|
||||||
call remove(types, index(types, type))
|
|
||||||
endif
|
endif
|
||||||
endfor
|
|
||||||
let last_indent = indent(lnum)
|
|
||||||
endif
|
endif
|
||||||
let lnum = prevnonblank(lnum - 1)
|
let lnum = prevnonblank(lnum - 1)
|
||||||
endwhile
|
endwhile
|
||||||
@@ -205,8 +195,11 @@ function! s:indent_like_opening_paren(lnum)
|
|||||||
\ s:skip_after_opening_paren, paren_lnum, paren_col+1)
|
\ s:skip_after_opening_paren, paren_lnum, paren_col+1)
|
||||||
let starts_with_closing_paren = getline(a:lnum) =~# '^\s*[])}]'
|
let starts_with_closing_paren = getline(a:lnum) =~# '^\s*[])}]'
|
||||||
|
|
||||||
|
let hang_closing = get(b:, 'python_pep8_indent_hang_closing',
|
||||||
|
\ get(g:, 'python_pep8_indent_hang_closing', 0))
|
||||||
|
|
||||||
if nothing_after_opening_paren
|
if nothing_after_opening_paren
|
||||||
if starts_with_closing_paren
|
if starts_with_closing_paren && !hang_closing
|
||||||
let res = base
|
let res = base
|
||||||
else
|
else
|
||||||
let res = base + s:sw()
|
let res = base + s:sw()
|
||||||
@@ -220,10 +213,13 @@ function! s:indent_like_opening_paren(lnum)
|
|||||||
" indent further to distinguish the continuation line
|
" indent further to distinguish the continuation line
|
||||||
" from the next logical line.
|
" from the next logical line.
|
||||||
if text =~# b:control_statement && res == base + s:sw()
|
if text =~# b:control_statement && res == base + s:sw()
|
||||||
return base + s:sw() * 2
|
" But only if not inside parens itself (Flake's E127).
|
||||||
else
|
let [paren_lnum, _] = s:find_opening_paren(paren_lnum)
|
||||||
return res
|
if paren_lnum <= 0
|
||||||
|
return res + s:sw()
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
return res
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Match indent of first block of this type.
|
" Match indent of first block of this type.
|
||||||
@@ -337,11 +333,11 @@ endfunction
|
|||||||
" Is the syntax at lnum (and optionally cnum) a python string?
|
" Is the syntax at lnum (and optionally cnum) a python string?
|
||||||
function! s:is_python_string(lnum, ...)
|
function! s:is_python_string(lnum, ...)
|
||||||
let line = getline(a:lnum)
|
let line = getline(a:lnum)
|
||||||
let linelen = len(line)
|
if a:0
|
||||||
if linelen < 1
|
let cols = type(a:1) != type([]) ? [a:1] : a:1
|
||||||
let linelen = 1
|
else
|
||||||
|
let cols = range(1, max([1, len(line)]))
|
||||||
endif
|
endif
|
||||||
let cols = a:0 ? type(a:1) != type([]) ? [a:1] : a:1 : range(1, linelen)
|
|
||||||
for cnum in cols
|
for cnum in cols
|
||||||
if match(map(synstack(a:lnum, cnum),
|
if match(map(synstack(a:lnum, cnum),
|
||||||
\ "synIDattr(v:val, 'name')"), 'python\S*String') == -1
|
\ "synIDattr(v:val, 'name')"), 'python\S*String') == -1
|
||||||
@@ -361,7 +357,7 @@ function! GetPythonPEPIndent(lnum)
|
|||||||
let prevline = getline(a:lnum-1)
|
let prevline = getline(a:lnum-1)
|
||||||
|
|
||||||
" Multilinestrings: continous, docstring or starting.
|
" Multilinestrings: continous, docstring or starting.
|
||||||
if s:is_python_string(a:lnum-1, len(prevline))
|
if s:is_python_string(a:lnum-1, max([1, len(prevline)]))
|
||||||
\ && (s:is_python_string(a:lnum, 1)
|
\ && (s:is_python_string(a:lnum, 1)
|
||||||
\ || match(line, '^\%("""\|''''''\)') != -1)
|
\ || match(line, '^\%("""\|''''''\)') != -1)
|
||||||
|
|
||||||
@@ -379,8 +375,8 @@ function! GetPythonPEPIndent(lnum)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if s:is_python_string(a:lnum-1)
|
if s:is_python_string(a:lnum-1)
|
||||||
" Previous line is (completely) a string.
|
" Previous line is (completely) a string: keep current indent.
|
||||||
return indent(a:lnum-1)
|
return -1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if match(prevline, '^\s*\%("""\|''''''\)') != -1
|
if match(prevline, '^\s*\%("""\|''''''\)') != -1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ endif
|
|||||||
let b:did_indent = 1
|
let b:did_indent = 1
|
||||||
|
|
||||||
setlocal cindent
|
setlocal cindent
|
||||||
setlocal cinoptions+=j1,J1
|
setlocal cinoptions+=j1,J1,(2s,u2s,U1,m1,+2s
|
||||||
|
|
||||||
setlocal indentexpr=DartIndent()
|
setlocal indentexpr=DartIndent()
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
|||||||
" URL: https://github.com/vim-ruby/vim-ruby
|
" URL: https://github.com/vim-ruby/vim-ruby
|
||||||
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
|
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
|
||||||
if exists("b:did_indent")
|
if get(b:, 'did_indent') =~# '\<eruby\>'
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -14,12 +14,14 @@ runtime! indent/ruby.vim
|
|||||||
unlet! b:did_indent
|
unlet! b:did_indent
|
||||||
setlocal indentexpr=
|
setlocal indentexpr=
|
||||||
|
|
||||||
if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=# 'eruby'
|
if &filetype =~# '^eruby\>'
|
||||||
|
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
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
unlet! b:did_indent
|
let b:did_indent = get(b:, 'did_indent', 1) . '.eruby'
|
||||||
|
|
||||||
" Force HTML indent to not keep state.
|
" Force HTML indent to not keep state.
|
||||||
let b:html_indent_usestate = 0
|
let b:html_indent_usestate = 0
|
||||||
@@ -33,8 +35,6 @@ if &l:indentexpr == ''
|
|||||||
endif
|
endif
|
||||||
let b:eruby_subtype_indentexpr = &l:indentexpr
|
let b:eruby_subtype_indentexpr = &l:indentexpr
|
||||||
|
|
||||||
let b:did_indent = 1
|
|
||||||
|
|
||||||
setlocal indentexpr=GetErubyIndent()
|
setlocal indentexpr=GetErubyIndent()
|
||||||
setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
|
setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
|
||||||
|
|
||||||
|
|||||||
@@ -26,17 +26,6 @@ if exists("*GoIndent")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" use shiftwidth function only if it's available
|
|
||||||
if exists('*shiftwidth')
|
|
||||||
func s:sw()
|
|
||||||
return shiftwidth()
|
|
||||||
endfunc
|
|
||||||
else
|
|
||||||
func s:sw()
|
|
||||||
return &sw
|
|
||||||
endfunc
|
|
||||||
endif
|
|
||||||
|
|
||||||
function! GoIndent(lnum)
|
function! GoIndent(lnum)
|
||||||
let prevlnum = prevnonblank(a:lnum-1)
|
let prevlnum = prevnonblank(a:lnum-1)
|
||||||
if prevlnum == 0
|
if prevlnum == 0
|
||||||
@@ -51,19 +40,23 @@ function! GoIndent(lnum)
|
|||||||
|
|
||||||
let ind = previ
|
let ind = previ
|
||||||
|
|
||||||
|
if prevl =~ ' = `[^`]*$'
|
||||||
|
" previous line started a multi-line raw string
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
if prevl =~ '[({]\s*$'
|
if prevl =~ '[({]\s*$'
|
||||||
" previous line opened a block
|
" previous line opened a block
|
||||||
let ind += s:sw()
|
let ind += shiftwidth()
|
||||||
endif
|
endif
|
||||||
if prevl =~# '^\s*\(case .*\|default\):$'
|
if prevl =~# '^\s*\(case .*\|default\):$'
|
||||||
" previous line is part of a switch statement
|
" previous line is part of a switch statement
|
||||||
let ind += s:sw()
|
let ind += shiftwidth()
|
||||||
endif
|
endif
|
||||||
" TODO: handle if the previous line is a label.
|
" TODO: handle if the previous line is a label.
|
||||||
|
|
||||||
if thisl =~ '^\s*[)}]'
|
if thisl =~ '^\s*[)}]'
|
||||||
" this line closed a block
|
" this line closed a block
|
||||||
let ind -= s:sw()
|
let ind -= shiftwidth()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Colons are tricky.
|
" Colons are tricky.
|
||||||
@@ -71,7 +64,7 @@ function! GoIndent(lnum)
|
|||||||
" We ignore trying to deal with jump labels because (a) they're rare, and
|
" We ignore trying to deal with jump labels because (a) they're rare, and
|
||||||
" (b) they're hard to disambiguate from a composite literal key.
|
" (b) they're hard to disambiguate from a composite literal key.
|
||||||
if thisl =~# '^\s*\(case .*\|default\):$'
|
if thisl =~# '^\s*\(case .*\|default\):$'
|
||||||
let ind -= s:sw()
|
let ind -= shiftwidth()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ind
|
return ind
|
||||||
|
|||||||
81
indent/graphql.vim
Normal file
81
indent/graphql.vim
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal autoindent
|
||||||
|
setlocal nocindent
|
||||||
|
setlocal nolisp
|
||||||
|
setlocal nosmartindent
|
||||||
|
|
||||||
|
setlocal indentexpr=GetGraphQLIndent()
|
||||||
|
setlocal indentkeys=0{,0},0),0[,0],0#,!^F,o,O,e
|
||||||
|
|
||||||
|
" If our indentation function already exists, we have nothing more to do.
|
||||||
|
if exists('*GetGraphQLIndent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpoptions
|
||||||
|
set cpoptions&vim
|
||||||
|
|
||||||
|
" Check if the character at lnum:col is inside a string.
|
||||||
|
function s:InString(lnum, col)
|
||||||
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') is# 'graphqlString'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function GetGraphQLIndent()
|
||||||
|
" If this is the first non-blank line, we have nothing more to do because
|
||||||
|
" all of our indentation rules are based on matching against earlier lines.
|
||||||
|
let l:prevlnum = prevnonblank(v:lnum - 1)
|
||||||
|
if l:prevlnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:line = getline(v:lnum)
|
||||||
|
|
||||||
|
" If this line contains just a closing bracket, find its matching opening
|
||||||
|
" bracket and indent the closing backet to match.
|
||||||
|
let l:col = matchend(l:line, '^\s*[]})]')
|
||||||
|
if l:col > 0 && !s:InString(v:lnum, l:col)
|
||||||
|
let l:bracket = l:line[l:col - 1]
|
||||||
|
call cursor(v:lnum, l:col)
|
||||||
|
|
||||||
|
if l:bracket is# '}'
|
||||||
|
let l:matched = searchpair('{', '', '}', 'bW')
|
||||||
|
elseif l:bracket is# ']'
|
||||||
|
let l:matched = searchpair('\[', '', '\]', 'bW')
|
||||||
|
elseif l:bracket is# ')'
|
||||||
|
let l:matched = searchpair('(', '', ')', 'bW')
|
||||||
|
else
|
||||||
|
let l:matched = -1
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:matched > 0 ? indent(l:matched) : virtcol('.') - 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If we're inside of a multiline string, continue with the same indentation.
|
||||||
|
if s:InString(v:lnum, matchend(l:line, '^\s*') + 1)
|
||||||
|
return indent(v:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If the previous line contained an opening bracket, and we are still in it,
|
||||||
|
" add indent depending on the bracket type.
|
||||||
|
if getline(l:prevlnum) =~# '[[{(]\s*$'
|
||||||
|
return indent(l:prevlnum) + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Default to the existing indentation level.
|
||||||
|
return indent(l:prevlnum)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpoptions = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -42,12 +42,6 @@ if !exists('g:haskell_indent_let')
|
|||||||
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
|
||||||
@@ -73,7 +67,7 @@ if !exists('g:haskell_indent_guard')
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
setlocal indentexpr=GetHaskellIndent()
|
setlocal indentexpr=GetHaskellIndent()
|
||||||
setlocal indentkeys=0},0),0],!^F,o,O,0=where,0=let,0=deriving,<space>
|
setlocal indentkeys=!^F,o,O,0{,0},0(,0),0[,0],0,,0=where,0=let,0=deriving,0=in\ ,0=::\ ,0=\-\>\ ,0=\=\>\ ,0=\|\ ,=\=\
|
||||||
|
|
||||||
function! s:isInBlock(hlstack)
|
function! s:isInBlock(hlstack)
|
||||||
return index(a:hlstack, 'haskellDelimiter') > -1 || index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1 || index(a:hlstack, 'haskellBlockComment') > -1 || index(a:hlstack, 'haskellPragma') > -1
|
return index(a:hlstack, 'haskellDelimiter') > -1 || index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1 || index(a:hlstack, 'haskellBlockComment') > -1 || index(a:hlstack, 'haskellPragma') > -1
|
||||||
@@ -115,25 +109,26 @@ endfunction
|
|||||||
" backtrack to find guard clause
|
" backtrack to find guard clause
|
||||||
function! s:indentGuard(pos, prevline)
|
function! s:indentGuard(pos, prevline)
|
||||||
let l:l = a:prevline
|
let l:l = a:prevline
|
||||||
let l:c = 1
|
let l:c = v:lnum - 1
|
||||||
|
let l:s = indent(l:c)
|
||||||
|
|
||||||
while v:lnum != l:c
|
while l:c >= 1
|
||||||
" empty line, stop looking
|
if l:s == 0 && strlen(l:l) > 0
|
||||||
if l:l =~ '^$'
|
" top-level start, stop looking
|
||||||
return a:pos
|
return g:haskell_indent_guard
|
||||||
" guard found
|
elseif l:l =~ '^\s\+[|,=]\s\+'
|
||||||
elseif l:l =~ '^\s*|\s\+'
|
" guard block found
|
||||||
return match(l:l, '|')
|
return match(l:l, '[|,=]')
|
||||||
|
else
|
||||||
|
if l:s > 0 && l:s <= a:pos
|
||||||
" found less deeper indentation (not starting with `,` or `=`)
|
" found less deeper indentation (not starting with `,` or `=`)
|
||||||
" stop looking
|
" stop looking
|
||||||
else
|
return l:s + g:haskell_indent_guard
|
||||||
let l:m = match(l:l, '\S')
|
|
||||||
if l:l !~ '^\s*[=,]' && l:m <= a:pos
|
|
||||||
return l:m + g:haskell_indent_guard
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let l:c += 1
|
let l:c -= 1
|
||||||
let l:l = getline(v:lnum - l:c)
|
let l:l = getline(l:c)
|
||||||
|
let l:s = indent(l:c)
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
return -1
|
return -1
|
||||||
@@ -196,7 +191,7 @@ function! GetHaskellIndent()
|
|||||||
|
|
||||||
" operator at end of previous line
|
" operator at end of previous line
|
||||||
if l:prevline =~ '[!#$%&*+./<>?@\\^|~-]\s*$'
|
if l:prevline =~ '[!#$%&*+./<>?@\\^|~-]\s*$'
|
||||||
return match(l:prevline, '\S') + &shiftwidth
|
return indent(v:lnum - 1) + &shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" let foo =
|
" let foo =
|
||||||
@@ -207,7 +202,7 @@ function! GetHaskellIndent()
|
|||||||
|
|
||||||
" let x = 1 in
|
" let x = 1 in
|
||||||
" >>>>x
|
" >>>>x
|
||||||
if l:prevline =~ '\C\<let\>\s\+.\+\<in\>\?$' && l:line !~ '\C^\s*\<in\>'
|
if l:prevline =~ '\C\<let\>.\{-}\<in\>\s*$' && l:line !~ '\C^\s*\<in\>'
|
||||||
return match(l:prevline, '\C\<let\>') + g:haskell_indent_let
|
return match(l:prevline, '\C\<let\>') + g:haskell_indent_let
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -215,9 +210,6 @@ function! GetHaskellIndent()
|
|||||||
" let y = 2
|
" let y = 2
|
||||||
"
|
"
|
||||||
" let x = 1
|
" let x = 1
|
||||||
" >in x
|
|
||||||
"
|
|
||||||
" let x = 1
|
|
||||||
" >>>>y = 2
|
" >>>>y = 2
|
||||||
"
|
"
|
||||||
" let x = 1
|
" let x = 1
|
||||||
@@ -228,21 +220,11 @@ 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
|
return l:s
|
||||||
endif
|
endif
|
||||||
elseif l:line =~ '\C^\s*\<in\>'
|
|
||||||
let l:s = match(l:prevline, '\C\<let\>')
|
|
||||||
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
|
|
||||||
return l:s + g:haskell_indent_in
|
|
||||||
endif
|
|
||||||
elseif l:line =~ '\s=\s'
|
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
|
||||||
|
|
||||||
@@ -263,7 +245,7 @@ function! GetHaskellIndent()
|
|||||||
" >>foo
|
" >>foo
|
||||||
"
|
"
|
||||||
if l:prevline =~ '\C\<where\>\s*$'
|
if l:prevline =~ '\C\<where\>\s*$'
|
||||||
return match(l:prevline, '\S') + get(g:, 'haskell_indent_after_bare_where', &shiftwidth)
|
return indent(v:lnum - 1) + get(g:, 'haskell_indent_after_bare_where', &shiftwidth)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" do
|
" do
|
||||||
@@ -272,7 +254,7 @@ function! GetHaskellIndent()
|
|||||||
" foo =
|
" foo =
|
||||||
" >>bar
|
" >>bar
|
||||||
if l:prevline =~ '\C\(\<do\>\|=\)\s*$'
|
if l:prevline =~ '\C\(\<do\>\|=\)\s*$'
|
||||||
return match(l:prevline, '\S') + &shiftwidth
|
return indent(v:lnum - 1) + &shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" do foo
|
" do foo
|
||||||
@@ -288,7 +270,7 @@ function! GetHaskellIndent()
|
|||||||
" >>bar -> quux
|
" >>bar -> quux
|
||||||
if l:prevline =~ '\C\<case\>.\+\<of\>\s*$'
|
if l:prevline =~ '\C\<case\>.\+\<of\>\s*$'
|
||||||
if get(g:,'haskell_indent_case_alternative', 0)
|
if get(g:,'haskell_indent_case_alternative', 0)
|
||||||
return match(l:prevline, '\S') + &shiftwidth
|
return indent(v:lnum - 1) + &shiftwidth
|
||||||
else
|
else
|
||||||
return match(l:prevline, '\C\<case\>') + g:haskell_indent_case
|
return match(l:prevline, '\C\<case\>') + g:haskell_indent_case
|
||||||
endif
|
endif
|
||||||
@@ -320,8 +302,8 @@ function! GetHaskellIndent()
|
|||||||
|
|
||||||
" newtype Foo = Foo
|
" newtype Foo = Foo
|
||||||
" >>deriving
|
" >>deriving
|
||||||
if l:prevline =~ '\C\s*\<\(newtype\|data\)\>[^{]\+' && l:line =~ '\C^\s*\<deriving\>'
|
if l:prevline =~ '\C^\s*\<\(newtype\|data\)\>[^{]\+' && l:line =~ '\C^\s*\<deriving\>'
|
||||||
return match(l:prevline, '\S') + &shiftwidth
|
return indent(v:lnum - 1) + &shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" foo :: Int
|
" foo :: Int
|
||||||
@@ -363,9 +345,9 @@ function! GetHaskellIndent()
|
|||||||
else
|
else
|
||||||
let l:m = matchstr(l:line, '^\s*\zs\<\S\+\>\ze')
|
let l:m = matchstr(l:line, '^\s*\zs\<\S\+\>\ze')
|
||||||
let l:l = l:prevline
|
let l:l = l:prevline
|
||||||
let l:c = 1
|
let l:c = v:lnum - 1
|
||||||
|
|
||||||
while v:lnum != l:c
|
while l:c >= 1
|
||||||
" fun decl
|
" fun decl
|
||||||
if l:l =~ ('^\s*' . l:m . '\(\s*::\|\n\s\+::\)')
|
if l:l =~ ('^\s*' . l:m . '\(\s*::\|\n\s\+::\)')
|
||||||
let l:s = match(l:l, l:m)
|
let l:s = match(l:l, l:m)
|
||||||
@@ -378,8 +360,8 @@ function! GetHaskellIndent()
|
|||||||
elseif l:l =~ '^$'
|
elseif l:l =~ '^$'
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
let l:c += 1
|
let l:c -= 1
|
||||||
let l:l = getline(v:lnum - l:c)
|
let l:l = getline(l:c)
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
@@ -425,8 +407,8 @@ function! GetHaskellIndent()
|
|||||||
|
|
||||||
" foo
|
" foo
|
||||||
" >>{
|
" >>{
|
||||||
if l:line =~ '^\s*{ '
|
if l:line =~ '^\s*{'
|
||||||
let l:s = match(l:prevline, '\S')
|
let l:s = indent(v:lnum - 1)
|
||||||
if l:s >= 0
|
if l:s >= 0
|
||||||
return l:s + &shiftwidth
|
return l:s + &shiftwidth
|
||||||
endif
|
endif
|
||||||
@@ -444,14 +426,27 @@ function! GetHaskellIndent()
|
|||||||
return match(l:prevline, 'in') - g:haskell_indent_in
|
return match(l:prevline, 'in') - g:haskell_indent_in
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return match(l:prevline, '\S') + get(g:, 'haskell_indent_before_where', &shiftwidth)
|
return indent(v:lnum - 1) + get(g:, 'haskell_indent_before_where', &shiftwidth)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" let x = 1
|
" let x = 1
|
||||||
" y = 2
|
" y = 2
|
||||||
" >in x + 1
|
" >in x + 1
|
||||||
if l:line =~ '\C^\s*\<in\>'
|
if l:line =~ '\C^\s*\<in\>'
|
||||||
return match(l:prevline, '\S') - (4 - g:haskell_indent_in)
|
let l:s = 0
|
||||||
|
let l:c = v:lnum - 1
|
||||||
|
|
||||||
|
while l:s <= 0 && l:c >= 1
|
||||||
|
let l:l = getline(l:c)
|
||||||
|
let l:s = match(l:l, '\C\<let\>')
|
||||||
|
if l:s >= 1 && s:isSYN('haskellLet', l:c, l:s + 1)
|
||||||
|
break
|
||||||
|
elseif l:l =~ '^\S'
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
let l:c -= 1
|
||||||
|
endwhile
|
||||||
|
return l:s + g:haskell_indent_in
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" data Foo
|
" data Foo
|
||||||
@@ -496,7 +491,7 @@ function! GetHaskellIndent()
|
|||||||
" foo
|
" foo
|
||||||
" >>:: Int
|
" >>:: Int
|
||||||
if l:line =~ '^\s*::\s'
|
if l:line =~ '^\s*::\s'
|
||||||
return match(l:prevline, '\S') + &shiftwidth
|
return indent(v:lnum - 1) + &shiftwidth
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" indent closing brace, paren or bracket
|
" indent closing brace, paren or bracket
|
||||||
|
|||||||
1407
indent/html.vim
1407
indent/html.vim
File diff suppressed because it is too large
Load Diff
@@ -89,22 +89,22 @@ function s:SynAt(l,c)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:ParseCino(f)
|
function s:ParseCino(f)
|
||||||
let [divider, n, cstr] = [0] + matchlist(&cino,
|
let [s, n, divider] = [strridx(&cino, a:f)+1, '', 0]
|
||||||
\ '\%(.*,\)\=\%(\%d'.char2nr(a:f).'\(-\)\=\([.s0-9]*\)\)\=')[1:2]
|
while s && &cino[ s ] =~ '[^,]'
|
||||||
for c in split(cstr,'\zs')
|
if &cino[ s ] == '.'
|
||||||
if c == '.' && !divider
|
|
||||||
let divider = 1
|
let divider = 1
|
||||||
elseif c ==# 's'
|
elseif &cino[ s ] ==# 's'
|
||||||
if n !~ '\d'
|
if n !~ '\d'
|
||||||
return n . s:sw() + 0
|
return n . s:sw() + 0
|
||||||
endif
|
endif
|
||||||
let n = str2nr(n) * s:sw()
|
let n = str2nr(n) * s:sw()
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
let [n, divider] .= [c, 0]
|
let [n, divider] .= [&cino[ s ], 0]
|
||||||
endif
|
endif
|
||||||
endfor
|
let s += 1
|
||||||
return str2nr(n) / max([str2nr(divider),1])
|
endwhile
|
||||||
|
return str2nr(n) / max([divider, 1])
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Optimized {skip} expr, only callable from the search loop which
|
" Optimized {skip} expr, only callable from the search loop which
|
||||||
@@ -208,18 +208,15 @@ function s:ExprCol()
|
|||||||
let bal = 0
|
let bal = 0
|
||||||
while s:SearchLoop('[{}?:]','bW',s:skip_expr)
|
while s:SearchLoop('[{}?:]','bW',s:skip_expr)
|
||||||
if s:LookingAt() == ':'
|
if s:LookingAt() == ':'
|
||||||
if getline('.')[col('.')-2] == ':'
|
let bal -= !search('\m:\%#','bW')
|
||||||
call cursor(0,col('.')-1)
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
let bal -= 1
|
|
||||||
elseif s:LookingAt() == '?'
|
elseif s:LookingAt() == '?'
|
||||||
if getline('.')[col('.'):col('.')+1] =~ '^\.\d\@!'
|
if getline('.')[col('.'):col('.')+1] =~ '^\.\d\@!'
|
||||||
continue
|
" ?. conditional chain, not ternary start
|
||||||
elseif !bal
|
elseif !bal
|
||||||
return 1
|
return 1
|
||||||
endif
|
else
|
||||||
let bal += 1
|
let bal += 1
|
||||||
|
endif
|
||||||
elseif s:LookingAt() == '{'
|
elseif s:LookingAt() == '{'
|
||||||
return !s:IsBlock()
|
return !s:IsBlock()
|
||||||
elseif !s:GetPair('{','}','bW',s:skip_expr)
|
elseif !s:GetPair('{','}','bW',s:skip_expr)
|
||||||
@@ -316,8 +313,8 @@ function s:IsContOne(cont)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function s:IsSwitch()
|
function s:IsSwitch()
|
||||||
return search('\m\C\%'.join(b:js_cache[1:],'l\%').
|
return search(printf('\m\C\%%%dl\%%%dc%s',b:js_cache[1],b:js_cache[2],
|
||||||
\ 'c{\_s*\%(\%(\/\/.*\_$\|\/\*\_.\{-}\*\/\)\@>\_s*\)*\%(case\|default\)\>','nW'.s:z)
|
\ '{\_s*\%(\%(\/\/.*\_$\|\/\*\_.\{-}\*\/\)\@>\_s*\)*\%(case\|default\)\>'),'nW'.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
|
||||||
@@ -367,8 +364,8 @@ function GetJavascriptIndent()
|
|||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:l1 = max([0,prevnonblank(v:lnum) - (s:rel ? 2000 : 1000),
|
let nest = get(get(b:,'hi_indent',{}),'blocklnr')
|
||||||
\ get(get(b:,'hi_indent',{}),'blocklnr')])
|
let s:l1 = max([0, prevnonblank(v:lnum) - (s:rel ? 2000 : 1000), nest])
|
||||||
call cursor(v:lnum,1)
|
call cursor(v:lnum,1)
|
||||||
if s:PreviousToken() is ''
|
if s:PreviousToken() is ''
|
||||||
return
|
return
|
||||||
@@ -376,7 +373,7 @@ function GetJavascriptIndent()
|
|||||||
let [l:lnum, lcol, pline] = getpos('.')[1:2] + [getline('.')[:col('.')-1]]
|
let [l:lnum, lcol, pline] = getpos('.')[1:2] + [getline('.')[:col('.')-1]]
|
||||||
|
|
||||||
let l:line = substitute(l:line,'^\s*','','')
|
let l:line = substitute(l:line,'^\s*','','')
|
||||||
let l:line_raw = l:line
|
let l:line_s = l:line[0]
|
||||||
if l:line[:1] == '/*'
|
if l:line[:1] == '/*'
|
||||||
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')
|
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')
|
||||||
endif
|
endif
|
||||||
@@ -450,7 +447,7 @@ function GetJavascriptIndent()
|
|||||||
let pval = s:ParseCino('(')
|
let pval = s:ParseCino('(')
|
||||||
if !pval
|
if !pval
|
||||||
let [Wval, vcol] = [s:ParseCino('W'), virtcol('.')]
|
let [Wval, vcol] = [s:ParseCino('W'), virtcol('.')]
|
||||||
if search('\m\S','W',num)
|
if search('\m'.get(g:,'javascript_indent_W_pat','\S'),'W',num)
|
||||||
return s:ParseCino('w') ? vcol : virtcol('.')-1
|
return s:ParseCino('w') ? vcol : virtcol('.')-1
|
||||||
endif
|
endif
|
||||||
return Wval ? s:Nat(num_ind + Wval) : vcol
|
return Wval ? s:Nat(num_ind + Wval) : vcol
|
||||||
@@ -460,7 +457,7 @@ function GetJavascriptIndent()
|
|||||||
|
|
||||||
" main return
|
" main return
|
||||||
if l:line =~ '^[])}]\|^|}'
|
if l:line =~ '^[])}]\|^|}'
|
||||||
if l:line_raw[0] == ')'
|
if l:line_s == ')'
|
||||||
if s:ParseCino('M')
|
if s:ParseCino('M')
|
||||||
return indent(l:lnum)
|
return indent(l:lnum)
|
||||||
elseif num && &cino =~# 'm' && !s:ParseCino('m')
|
elseif num && &cino =~# 'm' && !s:ParseCino('m')
|
||||||
@@ -470,10 +467,8 @@ function GetJavascriptIndent()
|
|||||||
return num_ind
|
return num_ind
|
||||||
elseif num
|
elseif num
|
||||||
return s:Nat(num_ind + get(l:,'case_offset',s:sw()) + l:switch_offset + b_l + is_op)
|
return s:Nat(num_ind + get(l:,'case_offset',s:sw()) + l:switch_offset + b_l + is_op)
|
||||||
endif
|
elseif nest
|
||||||
let nest = get(get(b:,'hi_indent',{}),'blocklnr')
|
return indent(nextnonblank(nest+1)) + b_l + is_op
|
||||||
if nest
|
|
||||||
return indent(nest) + s:sw() + b_l + is_op
|
|
||||||
endif
|
endif
|
||||||
return b_l + is_op
|
return b_l + is_op
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -21,19 +21,19 @@ if exists("*GetJuliaIndent")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:skipPatterns = '\<julia\%(Comprehension\%(For\|If\)\|RangeEnd\|CommentL\|\%([bsv]\|ip\|big\|MIME\|Shell\|Printf\|Doc\)\=String\|RegEx\|SymbolS\?\)\>'
|
let s:skipPatterns = '\<julia\%(Comprehension\%(For\|If\)\|RangeEnd\|Comment[LM]\|\%([bsv]\|ip\|big\|MIME\|Shell\|Printf\|Doc\)\=String\|RegEx\|SymbolS\?\)\>'
|
||||||
|
|
||||||
function JuliaMatch(lnum, str, regex, st, ...)
|
function JuliaMatch(lnum, str, regex, st, ...)
|
||||||
let s = a:st
|
let s = a:st
|
||||||
let e = a:0 > 0 ? a:1 : -1
|
let e = a:0 > 0 ? a:1 : -1
|
||||||
while 1
|
while 1
|
||||||
let f = match(a:str, a:regex, s)
|
let f = match(a:str, '\C' . a:regex, s)
|
||||||
if e >= 0 && f >= e
|
if e >= 0 && f >= e
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
if f >= 0
|
if f >= 0
|
||||||
let attr = synIDattr(synID(a:lnum,f+1,1),"name")
|
let attr = synIDattr(synID(a:lnum,f+1,1),"name")
|
||||||
if attr =~ s:skipPatterns
|
if attr =~# s:skipPatterns
|
||||||
let s = f+1
|
let s = f+1
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
@@ -50,8 +50,9 @@ function GetJuliaNestingStruct(lnum, ...)
|
|||||||
let e = a:0 > 1 ? a:2 : -1
|
let e = a:0 > 1 ? a:2 : -1
|
||||||
let blocks_stack = []
|
let blocks_stack = []
|
||||||
let num_closed_blocks = 0
|
let num_closed_blocks = 0
|
||||||
|
let tt = get(b:, 'julia_syntax_version', 10) == 6 ? '\|\%(\%(abstract\|primitive\)\s\+\)\@<!type' : ''
|
||||||
while 1
|
while 1
|
||||||
let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\=\|while\|for\|try\|catch\|finally\|\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|\%(\%(abstract\|primitive\)\s\+\)\@<!type\|immutable\|let\|\%(bare\)\?module\|quote\|do\)\>', s, e)
|
let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\?\|while\|for\|try\|catch\|finally\|\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|immutable\|let\|\%(bare\)\?module\|quote\|do'.tt.'\)\>', s, e)
|
||||||
let fe = JuliaMatch(a:lnum, line, '@\@<!\<end\>', s, e)
|
let fe = JuliaMatch(a:lnum, line, '@\@<!\<end\>', s, e)
|
||||||
|
|
||||||
if fb < 0 && fe < 0
|
if fb < 0 && fe < 0
|
||||||
@@ -84,7 +85,7 @@ function GetJuliaNestingStruct(lnum, ...)
|
|||||||
let i = JuliaMatch(a:lnum, line, '@\@<!\<else\>', s)
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<else\>', s)
|
||||||
if i >= 0 && i == fb
|
if i >= 0 && i == fb
|
||||||
let s = i+1
|
let s = i+1
|
||||||
if len(blocks_stack) > 0 && blocks_stack[-1] =~ '\<\%(else\)\=if\>'
|
if len(blocks_stack) > 0 && blocks_stack[-1] =~# '\<\%(else\)\=if\>'
|
||||||
let blocks_stack[-1] = 'else'
|
let blocks_stack[-1] = 'else'
|
||||||
else
|
else
|
||||||
call add(blocks_stack, 'else')
|
call add(blocks_stack, 'else')
|
||||||
@@ -133,9 +134,9 @@ function GetJuliaNestingStruct(lnum, ...)
|
|||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|\%(staged\)\?function\|macro\|begin\|\%(mutable\s\+\)\?struct\|\%(\%(abstract\|primitive\)\s\+\)\?type\|immutable\|let\|quote\|do\)\>', s)
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|\%(staged\)\?function\|macro\|begin\|\%(mutable\s\+\)\?struct\|\%(abstract\|primitive\)\s\+type\|immutable\|let\|quote\|do'.tt.'\)\>', s)
|
||||||
if i >= 0 && i == fb
|
if i >= 0 && i == fb
|
||||||
if match(line, '\<\%(mutable\|abstract\|primitive\)', i) != -1
|
if match(line, '\C\<\%(mutable\|abstract\|primitive\)', i) != -1
|
||||||
let s = i+11
|
let s = i+11
|
||||||
else
|
else
|
||||||
let s = i+1
|
let s = i+1
|
||||||
@@ -290,16 +291,11 @@ function LastBlockIndent(lnum)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function GetJuliaIndent()
|
function GetJuliaIndent()
|
||||||
let s:save_ignorecase = &ignorecase
|
|
||||||
set noignorecase
|
|
||||||
|
|
||||||
" Find a non-blank line above the current line.
|
" Find a non-blank line above the current line.
|
||||||
let lnum = prevnonblank(v:lnum - 1)
|
let lnum = prevnonblank(v:lnum - 1)
|
||||||
|
|
||||||
" At the start of the file use zero indent.
|
" At the start of the file use zero indent.
|
||||||
if lnum == 0
|
if lnum == 0
|
||||||
let &ignorecase = s:save_ignorecase
|
|
||||||
unlet s:save_ignorecase
|
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -387,8 +383,6 @@ function GetJuliaIndent()
|
|||||||
let num_closed_blocks -= 1
|
let num_closed_blocks -= 1
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
let &ignorecase = s:save_ignorecase
|
|
||||||
unlet s:save_ignorecase
|
|
||||||
return ind
|
return ind
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|||||||
@@ -7,15 +7,15 @@ setlocal indentexpr=GetMarkdownIndent()
|
|||||||
setlocal nolisp
|
setlocal nolisp
|
||||||
setlocal autoindent
|
setlocal autoindent
|
||||||
|
|
||||||
" Automatically insert bullets
|
|
||||||
setlocal formatoptions+=r
|
|
||||||
" Do not automatically insert bullets when auto-wrapping with text-width
|
|
||||||
setlocal formatoptions-=c
|
|
||||||
" Accept various markers as bullets
|
|
||||||
setlocal comments=b:*,b:+,b:-
|
|
||||||
|
|
||||||
" Automatically continue blockquote on line break
|
" Automatically continue blockquote on line break
|
||||||
setlocal comments+=b:>
|
setlocal formatoptions+=r
|
||||||
|
setlocal comments=b:>
|
||||||
|
if get(g:, "vim_markdown_auto_insert_bullets", 1)
|
||||||
|
" Do not automatically insert bullets when auto-wrapping with text-width
|
||||||
|
setlocal formatoptions-=c
|
||||||
|
" Accept various markers as bullets
|
||||||
|
setlocal comments+=b:*,b:+,b:-
|
||||||
|
endif
|
||||||
|
|
||||||
" Only define the function once
|
" Only define the function once
|
||||||
if exists("*GetMarkdownIndent") | finish | endif
|
if exists("*GetMarkdownIndent") | finish | endif
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ endif
|
|||||||
let b:did_indent = 1
|
let b:did_indent = 1
|
||||||
|
|
||||||
setlocal indentexpr=GetNixIndent()
|
setlocal indentexpr=GetNixIndent()
|
||||||
setlocal indentkeys+=0=then,0=else,0=inherit,*<Return>
|
setlocal indentkeys+=0=then,0=else,0=inherit,0=in,*<Return>
|
||||||
|
|
||||||
if exists("*GetNixIndent")
|
if exists("*GetNixIndent")
|
||||||
finish
|
finish
|
||||||
@@ -21,6 +21,8 @@ let s:cpo_save = &cpo
|
|||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
let s:skip_syntax = '\%(Comment\|String\)$'
|
let s:skip_syntax = '\%(Comment\|String\)$'
|
||||||
|
let s:binding_open = '\%(\<let\>\)'
|
||||||
|
let s:binding_close = '\%(\<in\>\)'
|
||||||
let s:block_open = '\%({\|[\)'
|
let s:block_open = '\%({\|[\)'
|
||||||
let s:block_close = '\%(}\|]\)'
|
let s:block_close = '\%(}\|]\)'
|
||||||
|
|
||||||
@@ -33,10 +35,25 @@ function! GetNixIndent()
|
|||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Skip indentation for single line comments explicitly, in case a
|
||||||
|
" comment was just inserted (eg. visual block mode)
|
||||||
|
if getline(v:lnum) =~ '^\s*#'
|
||||||
|
return indent(v:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
if synIDattr(synID(v:lnum, 1, 1), "name") !~ s:skip_syntax
|
if synIDattr(synID(v:lnum, 1, 1), "name") !~ s:skip_syntax
|
||||||
let current_line = getline(v:lnum)
|
let current_line = getline(v:lnum)
|
||||||
let last_line = getline(lnum)
|
let last_line = getline(lnum)
|
||||||
|
|
||||||
|
if current_line =~ '^\s*in\>'
|
||||||
|
let save_cursor = getcurpos()
|
||||||
|
normal ^
|
||||||
|
let bslnum = searchpair(s:binding_open, '', s:binding_close, 'bnW',
|
||||||
|
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "StringSpecial$"')
|
||||||
|
call setpos('.', save_cursor)
|
||||||
|
return indent(bslnum)
|
||||||
|
endif
|
||||||
|
|
||||||
if last_line =~ s:block_open . '\s*$'
|
if last_line =~ s:block_open . '\s*$'
|
||||||
let ind += &sw
|
let ind += &sw
|
||||||
endif
|
endif
|
||||||
@@ -45,11 +62,15 @@ function! GetNixIndent()
|
|||||||
let ind -= &sw
|
let ind -= &sw
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if last_line =~ '[(=]$'
|
||||||
|
let ind += &sw
|
||||||
|
endif
|
||||||
|
|
||||||
if last_line =~ '\<let\s*$'
|
if last_line =~ '\<let\s*$'
|
||||||
let ind += &sw
|
let ind += &sw
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if getline(v:lnum - 1) =~ '^\<in\s*$'
|
if last_line =~ '^\<in\s*$'
|
||||||
let ind += &sw
|
let ind += &sw
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -63,7 +84,7 @@ function! GetNixIndent()
|
|||||||
|
|
||||||
let ind = indent(v:lnum)
|
let ind = indent(v:lnum)
|
||||||
let bslnum = searchpair('''''', '', '''''', 'bnW',
|
let bslnum = searchpair('''''', '', '''''', 'bnW',
|
||||||
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "InterpolationSpecial$"')
|
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "StringSpecial$"')
|
||||||
|
|
||||||
if ind <= indent(bslnum)
|
if ind <= indent(bslnum)
|
||||||
let ind = indent(bslnum) + &sw
|
let ind = indent(bslnum) + &sw
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ function! GetPurescriptIndent()
|
|||||||
return s
|
return s
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline =~ '^\S.*::' && line !~ '^\s*\(\.\|->\|→\|=>\|⇒\)' && !~ '^instance'
|
if prevline =~ '^\S.*::' && line !~ '^\s*\(\.\|->\|→\|=>\|⇒\)' && prevline !~ '^instance'
|
||||||
" f :: String
|
" f :: String
|
||||||
" -> String
|
" -> String
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ if !exists('g:python_pep8_indent_multiline_string')
|
|||||||
let g:python_pep8_indent_multiline_string = 0
|
let g:python_pep8_indent_multiline_string = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:python_pep8_indent_hang_closing')
|
||||||
|
let g:python_pep8_indent_hang_closing = 0
|
||||||
|
endif
|
||||||
|
|
||||||
let s:block_rules = {
|
let s:block_rules = {
|
||||||
\ '^\s*elif\>': ['if', 'elif'],
|
\ '^\s*elif\>': ['if', 'elif'],
|
||||||
\ '^\s*except\>': ['try', 'except'],
|
\ '^\s*except\>': ['try', 'except'],
|
||||||
@@ -59,7 +63,7 @@ let s:stop_statement = '^\s*\(break\|continue\|raise\|return\|pass\)\>'
|
|||||||
" jedi* refers to syntax definitions from jedi-vim for call signatures, which
|
" jedi* refers to syntax definitions from jedi-vim for call signatures, which
|
||||||
" are inserted temporarily into the buffer.
|
" are inserted temporarily into the buffer.
|
||||||
let s:skip_special_chars = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
let s:skip_special_chars = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
||||||
\ '=~? "\\vstring|comment|jedi\\S"'
|
\ '=~? "\\vstring|comment|^pythonbytes%(contents)=$|jedi\\S"'
|
||||||
|
|
||||||
let s:skip_after_opening_paren = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
let s:skip_after_opening_paren = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
|
||||||
\ '=~? "\\vcomment|jedi\\S"'
|
\ '=~? "\\vcomment|jedi\\S"'
|
||||||
@@ -90,14 +94,6 @@ else
|
|||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:pair_sort(x, y)
|
|
||||||
if a:x[0] == a:y[0]
|
|
||||||
return a:x[1] == a:y[1] ? 0 : a:x[1] > a:y[1] ? 1 : -1
|
|
||||||
else
|
|
||||||
return a:x[0] > a:y[0] ? 1 : -1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Find backwards the closest open parenthesis/bracket/brace.
|
" Find backwards the closest open parenthesis/bracket/brace.
|
||||||
function! s:find_opening_paren(...)
|
function! s:find_opening_paren(...)
|
||||||
" optional arguments: line and column (defaults to 1) to search around
|
" optional arguments: line and column (defaults to 1) to search around
|
||||||
@@ -144,15 +140,12 @@ endfunction
|
|||||||
" Find possible indent(s) of the block starter that matches the current line.
|
" Find possible indent(s) of the block starter that matches the current line.
|
||||||
function! s:find_start_of_block(lnum, types, multiple)
|
function! s:find_start_of_block(lnum, types, multiple)
|
||||||
let r = []
|
let r = []
|
||||||
let types = copy(a:types)
|
|
||||||
let re = '\V\^\s\*\('.join(a:types, '\|').'\)\>'
|
let re = '\V\^\s\*\('.join(a:types, '\|').'\)\>'
|
||||||
let lnum = a:lnum
|
let lnum = a:lnum
|
||||||
let last_indent = indent(lnum) + 1
|
let last_indent = indent(lnum) + 1
|
||||||
while lnum > 0 && last_indent > 0
|
while lnum > 0 && last_indent > 0
|
||||||
let indent = indent(lnum)
|
let indent = indent(lnum)
|
||||||
if indent < last_indent
|
if indent < last_indent
|
||||||
for type in types
|
|
||||||
let re = '\v^\s*'.type.'>'
|
|
||||||
if getline(lnum) =~# re
|
if getline(lnum) =~# re
|
||||||
if !a:multiple
|
if !a:multiple
|
||||||
return [indent]
|
return [indent]
|
||||||
@@ -160,11 +153,8 @@ function! s:find_start_of_block(lnum, types, multiple)
|
|||||||
if index(r, indent) == -1
|
if index(r, indent) == -1
|
||||||
let r += [indent]
|
let r += [indent]
|
||||||
endif
|
endif
|
||||||
" Remove any handled type, e.g. 'if'.
|
let last_indent = indent
|
||||||
call remove(types, index(types, type))
|
|
||||||
endif
|
endif
|
||||||
endfor
|
|
||||||
let last_indent = indent(lnum)
|
|
||||||
endif
|
endif
|
||||||
let lnum = prevnonblank(lnum - 1)
|
let lnum = prevnonblank(lnum - 1)
|
||||||
endwhile
|
endwhile
|
||||||
@@ -205,8 +195,11 @@ function! s:indent_like_opening_paren(lnum)
|
|||||||
\ s:skip_after_opening_paren, paren_lnum, paren_col+1)
|
\ s:skip_after_opening_paren, paren_lnum, paren_col+1)
|
||||||
let starts_with_closing_paren = getline(a:lnum) =~# '^\s*[])}]'
|
let starts_with_closing_paren = getline(a:lnum) =~# '^\s*[])}]'
|
||||||
|
|
||||||
|
let hang_closing = get(b:, 'python_pep8_indent_hang_closing',
|
||||||
|
\ get(g:, 'python_pep8_indent_hang_closing', 0))
|
||||||
|
|
||||||
if nothing_after_opening_paren
|
if nothing_after_opening_paren
|
||||||
if starts_with_closing_paren
|
if starts_with_closing_paren && !hang_closing
|
||||||
let res = base
|
let res = base
|
||||||
else
|
else
|
||||||
let res = base + s:sw()
|
let res = base + s:sw()
|
||||||
@@ -220,10 +213,13 @@ function! s:indent_like_opening_paren(lnum)
|
|||||||
" indent further to distinguish the continuation line
|
" indent further to distinguish the continuation line
|
||||||
" from the next logical line.
|
" from the next logical line.
|
||||||
if text =~# b:control_statement && res == base + s:sw()
|
if text =~# b:control_statement && res == base + s:sw()
|
||||||
return base + s:sw() * 2
|
" But only if not inside parens itself (Flake's E127).
|
||||||
else
|
let [paren_lnum, _] = s:find_opening_paren(paren_lnum)
|
||||||
return res
|
if paren_lnum <= 0
|
||||||
|
return res + s:sw()
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
return res
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Match indent of first block of this type.
|
" Match indent of first block of this type.
|
||||||
@@ -337,11 +333,11 @@ endfunction
|
|||||||
" Is the syntax at lnum (and optionally cnum) a python string?
|
" Is the syntax at lnum (and optionally cnum) a python string?
|
||||||
function! s:is_python_string(lnum, ...)
|
function! s:is_python_string(lnum, ...)
|
||||||
let line = getline(a:lnum)
|
let line = getline(a:lnum)
|
||||||
let linelen = len(line)
|
if a:0
|
||||||
if linelen < 1
|
let cols = type(a:1) != type([]) ? [a:1] : a:1
|
||||||
let linelen = 1
|
else
|
||||||
|
let cols = range(1, max([1, len(line)]))
|
||||||
endif
|
endif
|
||||||
let cols = a:0 ? type(a:1) != type([]) ? [a:1] : a:1 : range(1, linelen)
|
|
||||||
for cnum in cols
|
for cnum in cols
|
||||||
if match(map(synstack(a:lnum, cnum),
|
if match(map(synstack(a:lnum, cnum),
|
||||||
\ "synIDattr(v:val, 'name')"), 'python\S*String') == -1
|
\ "synIDattr(v:val, 'name')"), 'python\S*String') == -1
|
||||||
@@ -361,7 +357,7 @@ function! GetPythonPEPIndent(lnum)
|
|||||||
let prevline = getline(a:lnum-1)
|
let prevline = getline(a:lnum-1)
|
||||||
|
|
||||||
" Multilinestrings: continous, docstring or starting.
|
" Multilinestrings: continous, docstring or starting.
|
||||||
if s:is_python_string(a:lnum-1, len(prevline))
|
if s:is_python_string(a:lnum-1, max([1, len(prevline)]))
|
||||||
\ && (s:is_python_string(a:lnum, 1)
|
\ && (s:is_python_string(a:lnum, 1)
|
||||||
\ || match(line, '^\%("""\|''''''\)') != -1)
|
\ || match(line, '^\%("""\|''''''\)') != -1)
|
||||||
|
|
||||||
@@ -379,8 +375,8 @@ function! GetPythonPEPIndent(lnum)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if s:is_python_string(a:lnum-1)
|
if s:is_python_string(a:lnum-1)
|
||||||
" Previous line is (completely) a string.
|
" Previous line is (completely) a string: keep current indent.
|
||||||
return indent(a:lnum-1)
|
return -1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if match(prevline, '^\s*\%("""\|''''''\)') != -1
|
if match(prevline, '^\s*\%("""\|''''''\)') != -1
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ let s:skip_expr =
|
|||||||
let s:ruby_indent_keywords =
|
let s:ruby_indent_keywords =
|
||||||
\ '^\s*\zs\<\%(module\|class\|if\|for' .
|
\ '^\s*\zs\<\%(module\|class\|if\|for' .
|
||||||
\ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue' .
|
\ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue' .
|
||||||
\ '\|\%(public\|protected\|private\)\=\s*def\):\@!\>' .
|
\ '\|\%(\K\k*[!?]\?\)\=\s*def\):\@!\>' .
|
||||||
\ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
|
\ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
|
||||||
\ '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
|
\ '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ let s:ruby_deindent_keywords =
|
|||||||
let s:end_start_regex =
|
let s:end_start_regex =
|
||||||
\ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
|
\ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
|
||||||
\ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' .
|
\ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' .
|
||||||
\ '\|\%(public\|protected\|private\)\=\s*def\):\@!\>' .
|
\ '\|\%(\K\k*[!?]\?\)\=\s*def\):\@!\>' .
|
||||||
\ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
|
\ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
|
||||||
|
|
||||||
" Regex that defines the middle-match for the 'end' keyword.
|
" Regex that defines the middle-match for the 'end' keyword.
|
||||||
@@ -195,8 +195,29 @@ function! GetRubyIndent(...) abort
|
|||||||
|
|
||||||
" 2.3. Work on the previous line. {{{2
|
" 2.3. Work on the previous line. {{{2
|
||||||
" -------------------------------
|
" -------------------------------
|
||||||
|
|
||||||
|
" Special case: we don't need the real s:PrevNonBlankNonString for an empty
|
||||||
|
" line inside a string. And that call can be quite expensive in that
|
||||||
|
" particular situation.
|
||||||
let indent_callback_names = [
|
let indent_callback_names = [
|
||||||
\ 's:EmptyInsideString',
|
\ 's:EmptyInsideString',
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
for callback_name in indent_callback_names
|
||||||
|
" Decho "Running: ".callback_name
|
||||||
|
let indent = call(function(callback_name), [indent_info])
|
||||||
|
|
||||||
|
if indent >= 0
|
||||||
|
" Decho "Match: ".callback_name." indent=".indent." info=".string(indent_info)
|
||||||
|
return indent
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Previous line number
|
||||||
|
let indent_info.plnum = s:PrevNonBlankNonString(indent_info.clnum - 1)
|
||||||
|
let indent_info.pline = getline(indent_info.plnum)
|
||||||
|
|
||||||
|
let indent_callback_names = [
|
||||||
\ 's:StartOfFile',
|
\ 's:StartOfFile',
|
||||||
\ 's:AfterAccessModifier',
|
\ 's:AfterAccessModifier',
|
||||||
\ 's:ContinuedLine',
|
\ 's:ContinuedLine',
|
||||||
@@ -208,10 +229,6 @@ function! GetRubyIndent(...) abort
|
|||||||
\ 's:AfterIndentKeyword',
|
\ 's:AfterIndentKeyword',
|
||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
" Previous line number
|
|
||||||
let indent_info.plnum = s:PrevNonBlankNonString(indent_info.clnum - 1)
|
|
||||||
let indent_info.pline = getline(indent_info.plnum)
|
|
||||||
|
|
||||||
for callback_name in indent_callback_names
|
for callback_name in indent_callback_names
|
||||||
" Decho "Running: ".callback_name
|
" Decho "Running: ".callback_name
|
||||||
let indent = call(function(callback_name), [indent_info])
|
let indent = call(function(callback_name), [indent_info])
|
||||||
@@ -389,12 +406,17 @@ function! s:LeadingOperator(cline_info) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:EmptyInsideString(pline_info) abort
|
function! s:EmptyInsideString(pline_info) abort
|
||||||
" If the line is empty and inside a string (plnum would not be the real
|
" If the line is empty and inside a string (the previous line is a string,
|
||||||
" prevnonblank in that case), use the previous line's indent
|
" too), use the previous line's indent
|
||||||
let info = a:pline_info
|
let info = a:pline_info
|
||||||
|
|
||||||
if info.cline =~ '^\s*$' && info.plnum != prevnonblank(info.clnum - 1)
|
let plnum = prevnonblank(info.clnum - 1)
|
||||||
return indent(prevnonblank(info.clnum))
|
let pline = getline(plnum)
|
||||||
|
|
||||||
|
if info.cline =~ '^\s*$'
|
||||||
|
\ && s:IsInStringOrComment(plnum, 1)
|
||||||
|
\ && s:IsInStringOrComment(plnum, strlen(pline))
|
||||||
|
return indent(plnum)
|
||||||
endif
|
endif
|
||||||
return -1
|
return -1
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ 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: 2017 Mar 21
|
" Last Change: 2018 Jan 10
|
||||||
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
" 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.
|
||||||
@@ -13,7 +13,7 @@ endif
|
|||||||
let b:did_indent = 1
|
let b:did_indent = 1
|
||||||
|
|
||||||
setlocal cindent
|
setlocal cindent
|
||||||
setlocal cinoptions=L0,(0,Ws,J1,j1
|
setlocal cinoptions=L0,(0,Ws,J1,j1,m1
|
||||||
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,macro
|
setlocal cinwords=for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern,macro
|
||||||
@@ -31,8 +31,10 @@ if exists("*GetRustIndent")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
" Come here when loading the script the first time.
|
" Come here when loading the script the first time.
|
||||||
|
|
||||||
@@ -46,12 +48,12 @@ function! s:get_line_trimmed(lnum)
|
|||||||
" If the last character in the line is a comment, do a binary search for
|
" If the last character in the line is a comment, do a binary search for
|
||||||
" the start of the comment. synID() is slow, a linear search would take
|
" the start of the comment. synID() is slow, a linear search would take
|
||||||
" too long on a long line.
|
" too long on a long line.
|
||||||
if synIDattr(synID(a:lnum, line_len, 1), "name") =~ 'Comment\|Todo'
|
if synIDattr(synID(a:lnum, line_len, 1), "name") =~? 'Comment\|Todo'
|
||||||
let min = 1
|
let min = 1
|
||||||
let max = line_len
|
let max = line_len
|
||||||
while min < max
|
while min < max
|
||||||
let col = (min + max) / 2
|
let col = (min + max) / 2
|
||||||
if synIDattr(synID(a:lnum, col, 1), "name") =~ 'Comment\|Todo'
|
if synIDattr(synID(a:lnum, col, 1), "name") =~? 'Comment\|Todo'
|
||||||
let max = col
|
let max = col
|
||||||
else
|
else
|
||||||
let min = col + 1
|
let min = col + 1
|
||||||
@@ -71,7 +73,7 @@ function! s:is_string_comment(lnum, col)
|
|||||||
if has('syntax_items')
|
if has('syntax_items')
|
||||||
for id in synstack(a:lnum, a:col)
|
for id in synstack(a:lnum, a:col)
|
||||||
let synname = synIDattr(id, "name")
|
let synname = synIDattr(id, "name")
|
||||||
if synname == "rustString" || synname =~ "^rustComment"
|
if synname ==# "rustString" || synname =~# "^rustComment"
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
@@ -90,13 +92,13 @@ function GetRustIndent(lnum)
|
|||||||
|
|
||||||
if has('syntax_items')
|
if has('syntax_items')
|
||||||
let synname = synIDattr(synID(a:lnum, 1, 1), "name")
|
let synname = synIDattr(synID(a:lnum, 1, 1), "name")
|
||||||
if synname == "rustString"
|
if synname ==# "rustString"
|
||||||
" If the start of the line is in a string, don't change the indent
|
" If the start of the line is in a string, don't change the indent
|
||||||
return -1
|
return -1
|
||||||
elseif synname =~ '\(Comment\|Todo\)'
|
elseif synname =~? '\(Comment\|Todo\)'
|
||||||
\ && line !~ '^\s*/\*' " not /* opening line
|
\ && line !~# '^\s*/\*' " not /* opening line
|
||||||
if synname =~ "CommentML" " multi-line
|
if synname =~? "CommentML" " multi-line
|
||||||
if line !~ '^\s*\*' && getline(a:lnum - 1) =~ '^\s*/\*'
|
if line !~# '^\s*\*' && getline(a:lnum - 1) =~# '^\s*/\*'
|
||||||
" This is (hopefully) the line after a /*, and it has no
|
" This is (hopefully) the line after a /*, and it has no
|
||||||
" leader, so the correct indentation is that of the
|
" leader, so the correct indentation is that of the
|
||||||
" previous line.
|
" previous line.
|
||||||
@@ -123,22 +125,22 @@ function GetRustIndent(lnum)
|
|||||||
" Search backwards for the previous non-empty line.
|
" Search backwards for the previous non-empty line.
|
||||||
let prevlinenum = prevnonblank(a:lnum - 1)
|
let prevlinenum = prevnonblank(a:lnum - 1)
|
||||||
let prevline = s:get_line_trimmed(prevlinenum)
|
let prevline = s:get_line_trimmed(prevlinenum)
|
||||||
while prevlinenum > 1 && prevline !~ '[^[:blank:]]'
|
while prevlinenum > 1 && prevline !~# '[^[:blank:]]'
|
||||||
let prevlinenum = prevnonblank(prevlinenum - 1)
|
let prevlinenum = prevnonblank(prevlinenum - 1)
|
||||||
let prevline = s:get_line_trimmed(prevlinenum)
|
let prevline = s:get_line_trimmed(prevlinenum)
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
" Handle where clauses nicely: subsequent values should line up nicely.
|
" Handle where clauses nicely: subsequent values should line up nicely.
|
||||||
if prevline[len(prevline) - 1] == ","
|
if prevline[len(prevline) - 1] ==# ","
|
||||||
\ && prevline =~# '^\s*where\s'
|
\ && prevline =~# '^\s*where\s'
|
||||||
return indent(prevlinenum) + 6
|
return indent(prevlinenum) + 6
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if prevline[len(prevline) - 1] == ","
|
if prevline[len(prevline) - 1] ==# ","
|
||||||
\ && s:get_line_trimmed(a:lnum) !~ '^\s*[\[\]{}]'
|
\ && s:get_line_trimmed(a:lnum) !~# '^\s*[\[\]{}]'
|
||||||
\ && prevline !~ '^\s*fn\s'
|
\ && prevline !~# '^\s*fn\s'
|
||||||
\ && prevline !~ '([^()]\+,$'
|
\ && prevline !~# '([^()]\+,$'
|
||||||
\ && s:get_line_trimmed(a:lnum) !~ '^\s*\S\+\s*=>'
|
\ && s:get_line_trimmed(a:lnum) !~# '^\s*\S\+\s*=>'
|
||||||
" Oh ho! The previous line ended in a comma! I bet cindent will try to
|
" Oh ho! The previous line ended in a comma! I bet cindent will try to
|
||||||
" take this too far... For now, let's normally use the previous line's
|
" take this too far... For now, let's normally use the previous line's
|
||||||
" indent.
|
" indent.
|
||||||
@@ -197,7 +199,7 @@ function GetRustIndent(lnum)
|
|||||||
else
|
else
|
||||||
" At the module scope, inside square brackets only
|
" At the module scope, inside square brackets only
|
||||||
"if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum
|
"if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum
|
||||||
if line =~ "^\\s*]"
|
if line =~# "^\\s*]"
|
||||||
" It's the closing line, dedent it
|
" It's the closing line, dedent it
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@@ -211,7 +213,11 @@ function GetRustIndent(lnum)
|
|||||||
return cindent(a:lnum)
|
return cindent(a:lnum)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -42,11 +42,15 @@ endfunction
|
|||||||
|
|
||||||
function! s:IsExcludedFromIndentAtPosition(line, column)
|
function! s:IsExcludedFromIndentAtPosition(line, column)
|
||||||
let name = s:SyntaxNameAtPosition(a:line, a:column)
|
let name = s:SyntaxNameAtPosition(a:line, a:column)
|
||||||
return name ==# "swiftComment" || name ==# "swiftString"
|
return s:IsSyntaxNameExcludedFromIndent(name)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:IsExcludedFromIndent()
|
function! s:IsExcludedFromIndent()
|
||||||
return s:SyntaxName() ==# "swiftComment" || s:SyntaxName() ==# "swiftString"
|
return s:IsSyntaxNameExcludedFromIndent(s:SyntaxName())
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IsSyntaxNameExcludedFromIndent(name)
|
||||||
|
return a:name ==# "swiftComment" || a:name ==# "swiftString" || a:name ==# "swiftInterpolatedWrapper" || a:name ==# "swiftMultilineInterpolatedWrapper" || a:name ==# "swiftMultilineString"
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:IsCommentLine(lnum)
|
function! s:IsCommentLine(lnum)
|
||||||
@@ -103,10 +107,10 @@ function! SwiftIndent(...)
|
|||||||
return indent(openingSquare) + shiftwidth()
|
return indent(openingSquare) + shiftwidth()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if line =~ ":$"
|
if line =~ ":$" && (line =~ '^\s*case\W' || line =~ '^\s*default\W')
|
||||||
let switch = search("switch", "bWn")
|
let switch = search("switch", "bWn")
|
||||||
return indent(switch)
|
return indent(switch)
|
||||||
elseif previous =~ ":$"
|
elseif previous =~ ":$" && (previous =~ '^\s*case\W' || previous =~ '^\s*default\W')
|
||||||
return previousIndent + shiftwidth()
|
return previousIndent + shiftwidth()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -133,12 +137,26 @@ function! SwiftIndent(...)
|
|||||||
return previousIndent + shiftwidth()
|
return previousIndent + shiftwidth()
|
||||||
elseif line =~ "}.*{"
|
elseif line =~ "}.*{"
|
||||||
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
|
||||||
|
let bracketLine = getline(openingBracket)
|
||||||
|
let numOpenParensBracketLine = s:NumberOfMatches("(", bracketLine, openingBracket)
|
||||||
|
let numCloseParensBracketLine = s:NumberOfMatches(")", bracketLine, openingBracket)
|
||||||
|
if numOpenParensBracketLine > numCloseParensBracketLine
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(openingParen, column)
|
||||||
|
let openingParenCol = searchpairpos("(", "", ")", "bWn", "s:IsExcludedFromIndent()")[1]
|
||||||
|
call cursor(line, column)
|
||||||
|
return openingParenCol
|
||||||
|
endif
|
||||||
|
|
||||||
return indent(openingBracket)
|
return indent(openingBracket)
|
||||||
elseif currentCloseBrackets > currentOpenBrackets
|
elseif currentCloseBrackets > currentOpenBrackets
|
||||||
let column = col(".")
|
let column = col(".")
|
||||||
call cursor(line("."), 1)
|
let line = line(".")
|
||||||
|
call cursor(line, 1)
|
||||||
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
||||||
call cursor(line("."), column)
|
call cursor(line, column)
|
||||||
|
|
||||||
let bracketLine = getline(openingBracket)
|
let bracketLine = getline(openingBracket)
|
||||||
|
|
||||||
@@ -151,8 +169,23 @@ function! SwiftIndent(...)
|
|||||||
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
call cursor(line, column)
|
call cursor(line, column)
|
||||||
return indent(openingParen)
|
return indent(openingParen)
|
||||||
|
elseif numOpenParensBracketLine > numCloseParensBracketLine
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(openingParen, column)
|
||||||
|
let openingParenCol = searchpairpos("(", "", ")", "bWn", "s:IsExcludedFromIndent()")[1]
|
||||||
|
call cursor(line, column)
|
||||||
|
return openingParenCol
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return indent(openingBracket)
|
return indent(openingBracket)
|
||||||
|
elseif line =~ '^\s*)$'
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(line, 1)
|
||||||
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
return indent(openingParen)
|
||||||
else
|
else
|
||||||
" - Current line is blank, and the user presses 'o'
|
" - Current line is blank, and the user presses 'o'
|
||||||
return previousIndent
|
return previousIndent
|
||||||
@@ -196,8 +229,19 @@ function! SwiftIndent(...)
|
|||||||
return previousIndent + shiftwidth()
|
return previousIndent + shiftwidth()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let previousParen = match(previous, "(")
|
let previousParen = match(previous, '\v\($')
|
||||||
return indent(previousParen) + shiftwidth()
|
if previousParen != -1
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(previousNum, col([previousNum, "$"]))
|
||||||
|
let previousParen = searchpairpos("(", "", ")", "cbWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
|
||||||
|
" Match the last non escaped paren on the previous line
|
||||||
|
return previousParen[1]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if numOpenBrackets > numCloseBrackets
|
if numOpenBrackets > numCloseBrackets
|
||||||
@@ -206,7 +250,7 @@ function! SwiftIndent(...)
|
|||||||
call cursor(previousNum, column)
|
call cursor(previousNum, column)
|
||||||
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
call cursor(line, column)
|
call cursor(line, column)
|
||||||
return indent(openingParen) + shiftwidth()
|
return openingParen + 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" - Previous line has close then open braces, indent previous + 1 'sw'
|
" - Previous line has close then open braces, indent previous + 1 'sw'
|
||||||
@@ -226,11 +270,23 @@ function! SwiftIndent(...)
|
|||||||
" - Line above has (unmatched) open paren, next line needs indent
|
" - Line above has (unmatched) open paren, next line needs indent
|
||||||
if numOpenParens > 0
|
if numOpenParens > 0
|
||||||
let savePosition = getcurpos()
|
let savePosition = getcurpos()
|
||||||
|
let lastColumnOfPreviousLine = col([previousNum, "$"]) - 1
|
||||||
" 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, [previousNum, col("$")])
|
call cursor(previousNum, lastColumnOfPreviousLine)
|
||||||
let previousParen = searchpair("(", "", ")", "cbWn", "s:IsExcludedFromIndent()")
|
let previousParen = searchpairpos("(", "", ")", "cbWn", "s:IsExcludedFromIndent()")[1]
|
||||||
|
" If the paren on the last line is the last character, indent the contents
|
||||||
|
" at shiftwidth + previous indent
|
||||||
|
if previousParen == lastColumnOfPreviousLine
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
" The previous line opens a closure and doesn't close it
|
||||||
|
if numOpenBrackets > numCloseBrackets
|
||||||
|
return previousParen + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
call setpos(".", savePosition)
|
call setpos(".", savePosition)
|
||||||
return indent(previousParen) + shiftwidth()
|
return previousParen
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return cindent
|
return cindent
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ describe "My Vim plugin" do
|
|||||||
|
|
||||||
extensions.each do |ext|
|
extensions.each do |ext|
|
||||||
it "should parse #{ext} file" do
|
it "should parse #{ext} file" do
|
||||||
Timeout::timeout(5) do
|
Timeout::timeout(15) do
|
||||||
write_file "#{ext}", ""
|
write_file "#{ext}", ""
|
||||||
vim.edit "#{ext}"
|
vim.edit "#{ext}"
|
||||||
vim.insert "sample"
|
vim.insert "sample"
|
||||||
|
|||||||
@@ -3,25 +3,128 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jenkins') == -1
|
|||||||
runtime syntax/groovy.vim
|
runtime syntax/groovy.vim
|
||||||
syn keyword jenkinsfileBuiltInVariable currentBuild
|
syn keyword jenkinsfileBuiltInVariable currentBuild
|
||||||
|
|
||||||
|
syn keyword jenkinsfileSection pipeline agent stages steps
|
||||||
|
|
||||||
|
syn keyword jenkinsfileDirective environment options parameters triggers stage tools input when libraries
|
||||||
|
|
||||||
|
syn keyword jenkinsfileOption contained buildDiscarder disableConcurrentBuilds overrideIndexTriggers skipDefaultCheckout nextgroup=jenkinsfileOptionParams
|
||||||
|
syn keyword jenkinsfileOption contained skipStagesAfterUnstable checkoutToSubdirectory timeout retry timestamps nextgroup=jenkinsfileOptionParams
|
||||||
|
syn region jenkinsfileOptionParams contained start='(' end=')' transparent contains=@groovyTop
|
||||||
|
syn match jenkinsfileOptionO /[a-zA-Z]\+([^)]*)/ contains=jenkinsfileOption,jenkinsfileOptionParams transparent containedin=groovyParenT1
|
||||||
|
|
||||||
syn keyword jenkinsfileCoreStep checkout
|
syn keyword jenkinsfileCoreStep checkout
|
||||||
|
syn keyword jenkinsfileCoreStep docker skipwhite nextgroup=jenkinsFileDockerConfigBlock
|
||||||
syn keyword jenkinsfileCoreStep node
|
syn keyword jenkinsfileCoreStep node
|
||||||
syn keyword jenkinsfileCoreStep scm
|
syn keyword jenkinsfileCoreStep scm
|
||||||
syn keyword jenkinsfileCoreStep sh
|
syn keyword jenkinsfileCoreStep sh
|
||||||
syn keyword jenkinsfileCoreStep stage
|
syn keyword jenkinsfileCoreStep stage
|
||||||
|
syn keyword jenkinsfileCoreStep parallel
|
||||||
|
syn keyword jenkinsfileCoreStep steps
|
||||||
syn keyword jenkinsfileCoreStep step
|
syn keyword jenkinsfileCoreStep step
|
||||||
syn keyword jenkinsfileCoreStep tool
|
syn keyword jenkinsfileCoreStep tool
|
||||||
|
|
||||||
syn keyword jenkinsfilePluginStep docker
|
" TODO: These should probably be broken out.
|
||||||
syn keyword jenkinsfilePluginStep emailext
|
syn keyword jenkinsfileCoreStep post always changed failure success unstable aborted
|
||||||
syn keyword jenkinsfilePluginStep exwsAllocate
|
|
||||||
syn keyword jenkinsfilePluginStep exws
|
|
||||||
syn keyword jenkinsfilePluginStep httpRequest
|
|
||||||
syn keyword jenkinsfilePluginStep junit
|
|
||||||
|
|
||||||
|
syn region jenkinsFileDockerConfigBlock contained start='{' end='}' contains=groovyString,jenkinsfileDockerKeyword transparent
|
||||||
|
syn keyword jenkinsFileDockerKeyword contained image args dockerfile additionalBuildArgs
|
||||||
|
|
||||||
|
syn keyword jenkinsfilePipelineStep Applitools ArtifactoryGradleBuild Consul MavenDescriptorStep OneSky VersionNumber
|
||||||
|
syn keyword jenkinsfilePipelineStep ViolationsToBitbucketServer ViolationsToGitHub ViolationsToGitLab _OcAction _OcContextInit
|
||||||
|
syn keyword jenkinsfilePipelineStep _OcWatch acceptGitLabMR acsDeploy activateDTConfiguration addBadge addErrorBadge
|
||||||
|
syn keyword jenkinsfilePipelineStep addGitLabMRComment addInfoBadge addInteractivePromotion addShortText addWarningBadge
|
||||||
|
syn keyword jenkinsfilePipelineStep allure anchore androidApkMove androidApkUpload androidLint ansiColor ansiblePlaybook
|
||||||
|
syn keyword jenkinsfilePipelineStep ansibleTower ansibleVault appMonBuildEnvironment appMonPublishTestResults appMonRegisterTestRun
|
||||||
|
syn keyword jenkinsfilePipelineStep applatix approveReceivedEvent approveRequestedEvent aqua archive archiveArtifacts
|
||||||
|
syn keyword jenkinsfilePipelineStep arestocats artifactResolver artifactoryDistributeBuild artifactoryDownload artifactoryMavenBuild
|
||||||
|
syn keyword jenkinsfilePipelineStep artifactoryPromoteBuild artifactoryUpload awaitDeployment awaitDeploymentCompletion
|
||||||
|
syn keyword jenkinsfilePipelineStep awsCodeBuild awsIdentity azureCLI azureDownload azureFunctionAppPublish azureUpload
|
||||||
|
syn keyword jenkinsfilePipelineStep azureVMSSUpdate azureVMSSUpdateInstances azureWebAppPublish backlogPullRequest bat
|
||||||
|
syn keyword jenkinsfilePipelineStep bearychatSend benchmark bitbucketStatusNotify blazeMeterTest build buildBamboo buildImage
|
||||||
|
syn keyword jenkinsfilePipelineStep bzt cache catchError cbt cbtScreenshotsTest cbtSeleniumTest cfInvalidate cfnCreateChangeSet
|
||||||
|
syn keyword jenkinsfilePipelineStep cfnDelete cfnDeleteStackSet cfnDescribe cfnExecuteChangeSet cfnExports cfnUpdate
|
||||||
|
syn keyword jenkinsfilePipelineStep cfnUpdateStackSet cfnValidate changeAsmVer checkstyle chefSinatraStep cifsPublisher
|
||||||
|
syn keyword jenkinsfilePipelineStep cleanWs cleanup cloudshareDockerMachine cm cmake cmakeBuild cobertura codefreshLaunch
|
||||||
|
syn keyword jenkinsfilePipelineStep codefreshRun codescene codesonar collectEnv conanAddRemote conanAddUser configFileProvider
|
||||||
|
syn keyword jenkinsfilePipelineStep container containerLog contrastAgent contrastVerification copy copyArtifacts coverityResults
|
||||||
|
syn keyword jenkinsfilePipelineStep cpack createDeploymentEvent createEnvironment createEvent createMemoryDump createSummary
|
||||||
|
syn keyword jenkinsfilePipelineStep createThreadDump crxBuild crxDeploy crxDownload crxReplicate crxValidate ctest ctmInitiatePipeline
|
||||||
|
syn keyword jenkinsfilePipelineStep ctmPostPiData ctmSetPiData cucumber cucumberSlackSend currentNamespace debianPbuilder
|
||||||
|
syn keyword jenkinsfilePipelineStep deleteDir dependencyCheckAnalyzer dependencyCheckPublisher dependencyCheckUpdateOnly
|
||||||
|
syn keyword jenkinsfilePipelineStep dependencyTrackPublisher deployAPI deployArtifacts deployLambda dingding dir disk
|
||||||
|
syn keyword jenkinsfilePipelineStep dockerFingerprintFrom dockerFingerprintRun dockerNode dockerPullStep dockerPushStep
|
||||||
|
syn keyword jenkinsfilePipelineStep dockerPushWithProxyStep doktor downloadProgetPackage downstreamPublisher dropbox
|
||||||
|
syn keyword jenkinsfilePipelineStep dry ec2 ec2ShareAmi echo ecrLogin emailext emailextrecipients envVarsForTool error
|
||||||
|
syn keyword jenkinsfilePipelineStep evaluateGate eventSourceLambda executeCerberusCampaign exportPackages exportProjects
|
||||||
|
syn keyword jenkinsfilePipelineStep exws exwsAllocate figlet fileExists fileOperations findFiles findbugs fingerprint
|
||||||
|
syn keyword jenkinsfilePipelineStep flywayrunner ftp ftpPublisher gatlingArchive getArtifactoryServer getContext getLastChangesPublisher
|
||||||
|
syn keyword jenkinsfilePipelineStep git gitbisect githubNotify gitlabBuilds gitlabCommitStatus googleCloudBuild googleStorageDownload
|
||||||
|
syn keyword jenkinsfilePipelineStep googleStorageUpload gprbuild greet hipchatSend http httpRequest hub_detect hub_scan
|
||||||
|
syn keyword jenkinsfilePipelineStep hub_scan_failure hubotApprove hubotSend importPackages importProjects inNamespace
|
||||||
|
syn keyword jenkinsfilePipelineStep inSession initConanClient input invokeLambda isUnix ispwOperation ispwRegisterWebhook
|
||||||
|
syn keyword jenkinsfilePipelineStep ispwWaitForWebhook jacoco jdbc jiraAddComment jiraAddWatcher jiraAssignIssue jiraAssignableUserSearch
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraComment jiraDeleteAttachment jiraDeleteIssueLink jiraDeleteIssueRemoteLink jiraDeleteIssueRemoteLinks
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraDownloadAttachment jiraEditComment jiraEditComponent jiraEditIssue jiraEditVersion
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraGetAttachmentInfo jiraGetComment jiraGetComments jiraGetComponent jiraGetComponentIssueCount
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraGetFields jiraGetIssue jiraGetIssueLink jiraGetIssueLinkTypes jiraGetIssueRemoteLink
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraGetIssueRemoteLinks jiraGetIssueTransitions jiraGetIssueWatches jiraGetProject
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraGetProjectComponents jiraGetProjectStatuses jiraGetProjectVersions jiraGetProjects
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraGetVersion jiraIssueSelector jiraJqlSearch jiraLinkIssues jiraNewComponent jiraNewIssue
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraNewIssueRemoteLink jiraNewIssues jiraNewVersion jiraNotifyIssue jiraSearch jiraTransitionIssue
|
||||||
|
syn keyword jenkinsfilePipelineStep jiraUploadAttachment jiraUserSearch jmhReport jobDsl junit klocworkBuildSpecGeneration
|
||||||
|
syn keyword jenkinsfilePipelineStep klocworkIncremental klocworkIntegrationStep1 klocworkIntegrationStep2 klocworkIssueSync
|
||||||
|
syn keyword jenkinsfilePipelineStep klocworkQualityGateway klocworkWrapper kubernetesApply kubernetesDeploy lastChanges
|
||||||
|
syn keyword jenkinsfilePipelineStep library libraryResource liquibaseDbDoc liquibaseRollback liquibaseUpdate listAWSAccounts
|
||||||
|
syn keyword jenkinsfilePipelineStep livingDocs loadRunnerTest lock logstashSend mail marathon mattermostSend memoryMap
|
||||||
|
syn keyword jenkinsfilePipelineStep milestone mockLoad newArtifactoryServer newBuildInfo newGradleBuild newMavenBuild
|
||||||
|
syn keyword jenkinsfilePipelineStep nexusArtifactUploader nexusPolicyEvaluation nexusPublisher node nodejs nodesByLabel
|
||||||
|
syn keyword jenkinsfilePipelineStep notifyBitbucket notifyDeploymon notifyOTC nunit nvm octoPerfTest office365ConnectorSend
|
||||||
|
syn keyword jenkinsfilePipelineStep openTasks openshiftBuild openshiftCreateResource openshiftDeleteResourceByJsonYaml
|
||||||
|
syn keyword jenkinsfilePipelineStep openshiftDeleteResourceByKey openshiftDeleteResourceByLabels openshiftDeploy openshiftExec
|
||||||
|
syn keyword jenkinsfilePipelineStep openshiftImageStream openshiftScale openshiftTag openshiftVerifyBuild openshiftVerifyDeployment
|
||||||
|
syn keyword jenkinsfilePipelineStep openshiftVerifyService openstackMachine osfBuilderSuiteForSFCCDeploy p4 p4approve
|
||||||
|
syn keyword jenkinsfilePipelineStep p4publish p4sync p4tag p4unshelve pagerduty parasoftFindings pcBuild pdrone perfReport
|
||||||
|
syn keyword jenkinsfilePipelineStep perfSigReports perfpublisher plot pmd podTemplate powershell pragprog pretestedIntegrationPublisher
|
||||||
|
syn keyword jenkinsfilePipelineStep properties protecodesc publishATX publishBrakeman publishBuildInfo publishBuildRecord
|
||||||
|
syn keyword jenkinsfilePipelineStep publishConfluence publishDeployRecord publishETLogs publishEventQ publishGenerators
|
||||||
|
syn keyword jenkinsfilePipelineStep publishHTML publishLambda publishLastChanges publishSQResults publishStoplight publishTMS
|
||||||
|
syn keyword jenkinsfilePipelineStep publishTRF publishTestResult publishTraceAnalysis publishUNIT publishValgrind pullPerfSigReports
|
||||||
|
syn keyword jenkinsfilePipelineStep puppetCode puppetHiera puppetJob puppetQuery pushImage pushToCloudFoundry pwd pybat
|
||||||
|
syn keyword jenkinsfilePipelineStep pysh qc queryModuleBuildRequest questavrm r radargunreporting rancher readFile readJSON
|
||||||
|
syn keyword jenkinsfilePipelineStep readManifest readMavenPom readProperties readTrusted readXml readYaml realtimeJUnit
|
||||||
|
syn keyword jenkinsfilePipelineStep registerWebhook release resolveScm retry rocketSend rtp runConanCommand runFromAlmBuilder
|
||||||
|
syn keyword jenkinsfilePipelineStep runLoadRunnerScript runValgrind s3CopyArtifact s3Delete s3Download s3FindFiles s3Upload
|
||||||
|
syn keyword jenkinsfilePipelineStep salt sauce saucePublisher sauceconnect script selectRun sendCIMessage sendDeployableMessage
|
||||||
|
syn keyword jenkinsfilePipelineStep serviceNow_attachFile serviceNow_attachZip serviceNow_createChange serviceNow_getCTask
|
||||||
|
syn keyword jenkinsfilePipelineStep serviceNow_getChangeState serviceNow_updateChangeItem setAccountAlias setGerritReview
|
||||||
|
syn keyword jenkinsfilePipelineStep setGitHubPullRequestStatus sh sha1 signAndroidApks silkcentral silkcentralCollectResults
|
||||||
|
syn keyword jenkinsfilePipelineStep slackSend sleep sloccountPublish snsPublish snykSecurity sonarToGerrit sparkSend
|
||||||
|
syn keyword jenkinsfilePipelineStep splitTests springBoot sscm sseBuild sseBuildAndPublish sshPublisher sshagent stage
|
||||||
|
syn keyword jenkinsfilePipelineStep startET startSandbox startSession startTS stash step stepcounter stopET stopSandbox
|
||||||
|
syn keyword jenkinsfilePipelineStep stopSession stopTS submitJUnitTestResultsToqTest submitModuleBuildRequest svChangeModeStep
|
||||||
|
syn keyword jenkinsfilePipelineStep svDeployStep svExportStep svUndeployStep svn tagImage task teamconcert tee testFolder
|
||||||
|
syn keyword jenkinsfilePipelineStep testPackage testProject testiniumExecution themisRefresh themisReport throttle time
|
||||||
|
syn keyword jenkinsfilePipelineStep timeout timestamps tm tool touch triggerInputStep triggerJob typetalkSend uftScenarioLoad
|
||||||
|
syn keyword jenkinsfilePipelineStep unarchive unstash unzip updateBotPush updateGitlabCommitStatus updateIdP updateTrustPolicy
|
||||||
|
syn keyword jenkinsfilePipelineStep upload-pgyer uploadProgetPackage uploadToIncappticConnect vSphere validateDeclarativePipeline
|
||||||
|
syn keyword jenkinsfilePipelineStep vmanagerLaunch waitForCIMessage waitForJob waitForQualityGate waitForWebhook waitUntil
|
||||||
|
syn keyword jenkinsfilePipelineStep walk waptProReport warnings whitesource winRMClient withAWS withAnt withContext withCoverityEnv
|
||||||
|
syn keyword jenkinsfilePipelineStep withCredentials withDockerContainer withDockerRegistry withDockerServer withEnv withKafkaLog
|
||||||
|
syn keyword jenkinsfilePipelineStep withKubeConfig withMaven withNPM withPod withPythonEnv withSCM withSandbox withSonarQubeEnv
|
||||||
|
syn keyword jenkinsfilePipelineStep withTypetalk wrap writeFile writeJSON writeMavenPom writeProperties writeXml writeYaml
|
||||||
|
syn keyword jenkinsfilePipelineStep ws xUnitImporter xUnitUploader xldCreatePackage xldDeploy xldPublishPackage xlrCreateRelease
|
||||||
|
syn keyword jenkinsfilePipelineStep xrayScanBuild zip
|
||||||
|
|
||||||
|
hi link jenkinsfileSection Statement
|
||||||
|
hi link jenkinsfileDirective jenkinsfileSection
|
||||||
|
hi link jenkinsfileOption Function
|
||||||
hi link jenkinsfileCoreStep Function
|
hi link jenkinsfileCoreStep Function
|
||||||
hi link jenkinsfilePluginStep Include
|
hi link jenkinsfilePipelineStep Include
|
||||||
hi link jenkinsfileBuiltInVariable Identifier
|
hi link jenkinsfileBuiltInVariable Identifier
|
||||||
|
hi link jenkinsFileDockerKeyword jenkinsfilePipelineStep
|
||||||
|
|
||||||
let b:current_syntax = "Jenkinsfile"
|
let b:current_syntax = 'Jenkinsfile'
|
||||||
|
|
||||||
|
" vim:set et sw=0 ts=2 ft=vim tw=78:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -3,35 +3,30 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: Ansible YAML/Jinja templates
|
" Language: Ansible YAML/Jinja templates
|
||||||
" Maintainer: Dave Honneffer <pearofducks@gmail.com>
|
" Maintainer: Dave Honneffer <pearofducks@gmail.com>
|
||||||
" Last Change: 2015.09.06
|
" Last Change: 2018.02.08
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("main_syntax")
|
if !exists("main_syntax")
|
||||||
let main_syntax = 'yaml'
|
let main_syntax = 'yaml'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:current_syntax = ''
|
if exists('b:current_syntax')
|
||||||
unlet b:current_syntax
|
let s:current_syntax=b:current_syntax
|
||||||
runtime! syntax/yaml.vim
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
let b:current_syntax = ''
|
|
||||||
unlet b:current_syntax
|
|
||||||
syntax include @Yaml syntax/yaml.vim
|
|
||||||
|
|
||||||
let b:current_syntax = ''
|
|
||||||
unlet b:current_syntax
|
|
||||||
syntax include @Jinja syntax/jinja2.vim
|
syntax include @Jinja syntax/jinja2.vim
|
||||||
|
|
||||||
|
if exists('s:current_syntax')
|
||||||
|
let b:current_syntax=s:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
" Jinja
|
" Jinja
|
||||||
" ================================
|
" ================================
|
||||||
|
|
||||||
syn cluster jinjaSLSBlocks add=jinjaTagBlock,jinjaVarBlock,jinjaComment
|
syn cluster jinjaSLSBlocks add=jinjaTagBlock,jinjaVarBlock,jinjaComment
|
||||||
" https://github.com/mitsuhiko/jinja2/blob/6b7c0c23/ext/Vim/jinja.vim
|
" https://github.com/mitsuhiko/jinja2/blob/6b7c0c23/ext/Vim/jinja.vim
|
||||||
syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks
|
syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks
|
||||||
syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks
|
syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,yamlComment,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks
|
||||||
syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,@jinjaSLSBlocks
|
syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,@jinjaSLSBlocks
|
||||||
highlight link jinjaVariable Constant
|
highlight link jinjaVariable Constant
|
||||||
highlight link jinjaVarDelim Delimiter
|
highlight link jinjaVarDelim Delimiter
|
||||||
@@ -39,6 +34,12 @@ highlight link jinjaVarDelim Delimiter
|
|||||||
" YAML
|
" YAML
|
||||||
" ================================
|
" ================================
|
||||||
|
|
||||||
|
if exists("g:ansible_yamlKeyName")
|
||||||
|
let s:yamlKey = g:ansible_yamlKeyName
|
||||||
|
else
|
||||||
|
let s:yamlKey = "yamlBlockMappingKey"
|
||||||
|
endif
|
||||||
|
|
||||||
" Reset some YAML to plain styling
|
" Reset some YAML to plain styling
|
||||||
" the number 80 in Ansible isn't any more important than the word root
|
" the number 80 in Ansible isn't any more important than the word root
|
||||||
highlight link yamlInteger NONE
|
highlight link yamlInteger NONE
|
||||||
@@ -46,58 +47,9 @@ highlight link yamlBool NONE
|
|||||||
highlight link yamlFlowString NONE
|
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
|
||||||
|
" This is only found in stephypy/vim-yaml, since it's one line it isn't worth
|
||||||
fun! s:normal_keywords_highlight(name)
|
" making conditional
|
||||||
if a:name == 'Comment'
|
highlight link yamlConstant NONE
|
||||||
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'
|
||||||
@@ -121,7 +73,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if exists("g:ansible_name_highlight")
|
if exists("g:ansible_name_highlight")
|
||||||
syn keyword ansible_name name containedin=yamlBlockMappingKey contained
|
execute 'syn keyword ansible_name name containedin='.s:yamlKey.' contained'
|
||||||
if g:ansible_name_highlight =~ 'd'
|
if g:ansible_name_highlight =~ 'd'
|
||||||
highlight link ansible_name Comment
|
highlight link ansible_name Comment
|
||||||
else
|
else
|
||||||
@@ -129,24 +81,24 @@ if exists("g:ansible_name_highlight")
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syn keyword ansible_debug_keywords debug containedin=yamlBlockMappingKey contained
|
execute 'syn keyword ansible_debug_keywords debug containedin='.s:yamlKey.' contained'
|
||||||
highlight link ansible_debug_keywords Debug
|
highlight link ansible_debug_keywords Debug
|
||||||
|
|
||||||
if exists("g:ansible_extra_keywords_highlight")
|
if exists("g:ansible_extra_keywords_highlight")
|
||||||
syn keyword ansible_extra_special_keywords register always_run changed_when failed_when no_log args vars delegate_to ignore_errors containedin=yamlBlockMappingKey contained
|
execute 'syn keyword ansible_extra_special_keywords register always_run changed_when failed_when no_log args vars delegate_to ignore_errors containedin='.s:yamlKey.' contained'
|
||||||
highlight link ansible_extra_special_keywords Statement
|
highlight link ansible_extra_special_keywords Statement
|
||||||
endif
|
endif
|
||||||
|
|
||||||
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
|
execute 'syn keyword ansible_normal_keywords include include_tasks import_tasks until retries delay when only_if become become_user block rescue always notify containedin='.s:yamlKey.' contained'
|
||||||
if exists("g:ansible_normal_keywords_highlight")
|
if exists("g:ansible_normal_keywords_highlight")
|
||||||
call s:normal_keywords_highlight(g:ansible_normal_keywords_highlight)
|
execute 'highlight link ansible_normal_keywords '.g:ansible_normal_keywords_highlight
|
||||||
else
|
else
|
||||||
highlight link ansible_normal_keywords Statement
|
highlight link ansible_normal_keywords Statement
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syn match ansible_with_keywords "\vwith_.+" containedin=yamlBlockMappingKey contained
|
execute 'syn match ansible_with_keywords "\vwith_.+" containedin='.s:yamlKey.' contained'
|
||||||
if exists("g:ansible_with_keywords_highlight")
|
if exists("g:ansible_with_keywords_highlight")
|
||||||
call s:with_keywords_highlight(g:ansible_with_keywords_highlight)
|
execute 'highlight link ansible_with_keywords '.g:ansible_with_keywords_highlight
|
||||||
else
|
else
|
||||||
highlight link ansible_with_keywords Statement
|
highlight link ansible_with_keywords Statement
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1
|
|
||||||
|
|
||||||
" Vim syntax file
|
|
||||||
" Language: Ansible YAML/Jinja templates
|
|
||||||
" Maintainer: Dave Honneffer <pearofducks@gmail.com>
|
|
||||||
" Last Change: 2015.09.06
|
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("main_syntax")
|
|
||||||
let main_syntax = 'jinja2'
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:current_syntax = ''
|
|
||||||
unlet b:current_syntax
|
|
||||||
runtime! syntax/jinja2.vim
|
|
||||||
|
|
||||||
if exists("g:ansible_extra_syntaxes")
|
|
||||||
let s:extra_syntax = split(g:ansible_extra_syntaxes)
|
|
||||||
for syntax_name in s:extra_syntax
|
|
||||||
let b:current_syntax = ''
|
|
||||||
unlet b:current_syntax
|
|
||||||
execute 'runtime!' "syntax/" . syntax_name
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:current_syntax = "ansible_template"
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -33,12 +33,12 @@ syn region bladeComment matchgroup=bladeDelimiter start="{{--" end="--}}" c
|
|||||||
|
|
||||||
syn keyword bladeKeyword @if @elseif @foreach @forelse @for @while @can @cannot @elsecan @elsecannot @include
|
syn keyword bladeKeyword @if @elseif @foreach @forelse @for @while @can @cannot @elsecan @elsecannot @include
|
||||||
\ @includeIf @each @inject @extends @section @stack @push @unless @yield @parent @hasSection @break @continue
|
\ @includeIf @each @inject @extends @section @stack @push @unless @yield @parent @hasSection @break @continue
|
||||||
\ @unset @lang @choice @component @slot @prepend
|
\ @unset @lang @choice @component @slot @prepend @json @isset @auth @guest @switch @case @includeFirst @empty
|
||||||
\ nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
|
\ nextgroup=bladePhpParenBlock skipwhite containedin=ALLBUT,@bladeExempt
|
||||||
|
|
||||||
syn keyword bladeKeyword @else @endif @endunless @endfor @endforeach @empty @endforelse @endwhile @endcan
|
syn keyword bladeKeyword @else @endif @endunless @endfor @endforeach @endforelse @endwhile @endcan
|
||||||
\ @endcannot @stop @append @endsection @endpush @show @overwrite @verbatim @endverbatim @endcomponent
|
\ @endcannot @stop @append @endsection @endpush @show @overwrite @verbatim @endverbatim @endcomponent
|
||||||
\ @endslot @endprepend
|
\ @endslot @endprepend @endisset @endempty @endauth @endguest @endswitch
|
||||||
\ containedin=ALLBUT,@bladeExempt
|
\ containedin=ALLBUT,@bladeExempt
|
||||||
|
|
||||||
if exists('g:blade_custom_directives')
|
if exists('g:blade_custom_directives')
|
||||||
|
|||||||
@@ -19,37 +19,38 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
syn keyword carpSyntax def defn let do if while ref address set! the
|
syn keyword carpSyntax def defn let do if while ref address set! the
|
||||||
syn keyword carpSyntax defmacro defdynamic quote cons list array
|
syn keyword carpSyntax defmacro defdynamic quote cons list array fn
|
||||||
syn keyword carpSyntax expand deftype register system-include register-type
|
syn keyword carpSyntax expand deftype register system-include register-type
|
||||||
syn keyword carpSyntax defmodule copy use module defalias definterface eval
|
syn keyword carpSyntax defmodule copy use module defalias definterface eval
|
||||||
syn keyword carpSyntax expand instantiate type info help quit env build run
|
syn keyword carpSyntax expand instantiate type info help quit env build run
|
||||||
syn keyword carpSyntax cat use project-set! local-include system-include
|
syn keyword carpSyntax cat project-set! local-include
|
||||||
syn keyword carpSyntax add-cflag add-lib project load reload let-do ignore
|
syn keyword carpSyntax add-cflag add-lib project load reload let-do ignore
|
||||||
syn keyword carpSyntax fmt mac-only linux-only windows-only use-all when
|
syn keyword carpSyntax fmt mac-only linux-only windows-only use-all when
|
||||||
syn keyword carpSyntax unless defn-do comment forever-do case and* or*
|
syn keyword carpSyntax unless defn-do comment forever-do case and* or*
|
||||||
syn keyword carpSyntax str* println*
|
syn keyword carpSyntax str* println* break doc sig hidden private
|
||||||
syn match carpSyntax "\vc(a|d){1,4}r"
|
syn match carpSyntax "\vc(a|d){1,4}r"
|
||||||
|
|
||||||
syn keyword carpFunc Int Float Double Bool String Char Array Fn Ref Long λ
|
syn keyword carpFunc Int Float Double Bool String Char Array Fn Ref Long λ
|
||||||
|
syn keyword carpFunc Pattern
|
||||||
syn keyword carpFunc not or and + - * / = /= >= <= > < inc dec
|
syn keyword carpFunc not or and + - * / = /= >= <= > < inc dec
|
||||||
syn keyword carpFunc println print get-line from-string mod seed random
|
syn keyword carpFunc println print get-line from-string mod random
|
||||||
syn keyword carpFunc random-between str mask delete append count duplicate
|
syn keyword carpFunc random-between str mask delete append length duplicate
|
||||||
syn keyword carpFunc cstr chars from-chars to-int from-int sin cos sqrt acos
|
syn keyword carpFunc cstr chars from-chars to-int from-int sin cos sqrt acos
|
||||||
syn keyword carpFunc atan2 exit time srand for cond floor abs sort-with
|
syn keyword carpFunc atan2 exit time seed-random for cond floor abs sort-with
|
||||||
syn keyword carpFunc subarray prefix-array suffix-array reverse sum min max
|
syn keyword carpFunc subarray prefix-array suffix-array reverse sum min max
|
||||||
syn keyword carpFunc first last reduce format zero read-file bit-shift-left
|
syn keyword carpFunc first last reduce format zero read-file bit-shift-left
|
||||||
syn keyword carpFunc bit-shift-right bit-and bit-or bit-xor bit-not safe-add
|
syn keyword carpFunc bit-shift-right bit-and bit-or bit-xor bit-not safe-add
|
||||||
syn keyword carpFunc safe-sub safe-mul even? odd? cmp allocate repeat-indexed
|
syn keyword carpFunc safe-sub safe-mul even? odd? cmp allocate repeat-indexed
|
||||||
syn keyword carpFunc sanitize-addresses memory-balance reset-memory-balance!
|
syn keyword carpFunc sanitize-addresses memory-balance reset-memory-balance!
|
||||||
syn keyword carpFunc log-memory-balance! memory-logged assert-balanced trace
|
syn keyword carpFunc log-memory-balance! memory-logged assert-balanced trace
|
||||||
syn keyword carpFunc pi e swaop! update! char-at tail head split-by words lines
|
syn keyword carpFunc pi e swap! update! char-at tail head split-by words lines
|
||||||
syn keyword carpFunc pad-left pad-right count-char empty? random-sized substring
|
syn keyword carpFunc pad-left pad-right count-char empty? random-sized substring
|
||||||
syn keyword carpFunc prefix-string suffix-string starts-with? ends-with?
|
syn keyword carpFunc prefix-string suffix-string starts-with? ends-with?
|
||||||
syn keyword carpFunc string-join free sleep-seconds sleep-micros
|
syn keyword carpFunc string-join free sleep-seconds sleep-micros substitute
|
||||||
syn keyword carpFunc atan2 exit time srand for cond floor abs neg to-float
|
syn keyword carpFunc neg to-float match matches? find global-match match-str
|
||||||
syn keyword carpFunc from-float tan asin atan cosh sinh tanh exp frexp ldexp
|
syn keyword carpFunc from-float tan asin atan cosh sinh tanh exp frexp ldexp
|
||||||
syn keyword carpFunc log log10 modf pow ceil clamp approx refstr foreach
|
syn keyword carpFunc log log10 modf pow ceil clamp approx refstr foreach
|
||||||
syn keyword carpFunc => ==> repeat nth replicate range raw aset aset! count
|
syn keyword carpFunc => ==> repeat nth replicate range raw aset aset!
|
||||||
syn keyword carpFunc push-back pop-back sort index-of element-count
|
syn keyword carpFunc push-back pop-back sort index-of element-count
|
||||||
|
|
||||||
|
|
||||||
@@ -63,6 +64,7 @@ syn cluster carpQuotedOrNormal contains=carpDelimiter
|
|||||||
syn region carpQuotedStruc start="@("rs=s+2 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
syn region carpQuotedStruc start="@("rs=s+2 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
||||||
syn region carpQuotedStruc start="&("rs=s+2 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
syn region carpQuotedStruc start="&("rs=s+2 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
||||||
syn region carpQuotedStruc start="("rs=s+1 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
syn region carpQuotedStruc start="("rs=s+1 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
||||||
|
syn region carpQuotedStruc start="{"rs=s+1 end="}"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
||||||
syn region carpQuotedStruc start="\["rs=s+1 end="\]"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
syn region carpQuotedStruc start="\["rs=s+1 end="\]"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained
|
||||||
|
|
||||||
syn cluster carpQuotedStuff add=carpQuotedStruc
|
syn cluster carpQuotedStuff add=carpQuotedStruc
|
||||||
@@ -72,11 +74,13 @@ syn region carpStruc matchgroup=Delimiter start="&("rs=s+2 matchgroup=Delimiter
|
|||||||
syn region carpStruc matchgroup=Delimiter start="&"rs=s+1 end=![ \t()\[\]";]!me=e-1 contains=@carpNormal
|
syn region carpStruc matchgroup=Delimiter start="&"rs=s+1 end=![ \t()\[\]";]!me=e-1 contains=@carpNormal
|
||||||
syn region carpStruc matchgroup=Delimiter start="@"rs=s+1 end=![ \t()\[\]";]!me=e-1 contains=@carpNormal
|
syn region carpStruc matchgroup=Delimiter start="@"rs=s+1 end=![ \t()\[\]";]!me=e-1 contains=@carpNormal
|
||||||
syn region carpStruc matchgroup=Delimiter start="("rs=s+1 matchgroup=Delimiter end=")"re=e-1 contains=@carpNormal
|
syn region carpStruc matchgroup=Delimiter start="("rs=s+1 matchgroup=Delimiter end=")"re=e-1 contains=@carpNormal
|
||||||
|
syn region carpStruc matchgroup=Delimiter start="{"rs=s+1 matchgroup=Delimiter end="}"re=e-1 contains=@carpNormal
|
||||||
syn region carpStruc matchgroup=Delimiter start="\["rs=s+1 matchgroup=Delimiter end="\]"re=e-1 contains=@carpNormal
|
syn region carpStruc matchgroup=Delimiter start="\["rs=s+1 matchgroup=Delimiter end="\]"re=e-1 contains=@carpNormal
|
||||||
|
|
||||||
syn region carpString start=/\%(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/
|
syn region carpString start=/\%(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/
|
||||||
|
syn region carpPattern start=/\%(\\\)\@<!\#"/ skip=/\\[\\"]/ end=/"/
|
||||||
|
|
||||||
syn cluster carpNormal add=carpError,carpStruc,carpString
|
syn cluster carpNormal add=carpError,carpStruc,carpString,carpPattern
|
||||||
syn cluster carpQuotedOrNormal add=carpString
|
syn cluster carpQuotedOrNormal add=carpString
|
||||||
|
|
||||||
syn match carpNumber "\<[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?[lf]\?\>" contains=carpContainedNumberError
|
syn match carpNumber "\<[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?[lf]\?\>" contains=carpContainedNumberError
|
||||||
@@ -116,6 +120,7 @@ if version >= 508 || !exists("carp_syntax_init")
|
|||||||
HiLink carpCopy Function
|
HiLink carpCopy Function
|
||||||
|
|
||||||
HiLink carpString String
|
HiLink carpString String
|
||||||
|
HiLink carpPattern String
|
||||||
HiLink carpChar Character
|
HiLink carpChar Character
|
||||||
HiLink carpBoolean Boolean
|
HiLink carpBoolean Boolean
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,10 @@ endif
|
|||||||
let s:keepcpo= &cpo
|
let s:keepcpo= &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
syn region cmakeComment start="#" end="$" contains=cmakeTodo,cmakeLuaComment,@Spell
|
syn region cmakeBracketArgument start="\[\z(=\?\|=[0-9]*\)\[" end="\]\z1\]" contains=cmakeTodo,@Spell
|
||||||
syn region cmakeLuaComment start="\[\z(=*\)\[" end="\]\z1\]" contains=cmakeTodo,@Spell
|
|
||||||
|
syn region cmakeComment start="#" end="$" contains=cmakeTodo,@Spell
|
||||||
|
syn region cmakeBracketComment start="#\[\z(=\?\|=[0-9]*\)\[" end="\]\z1\]" contains=cmakeTodo,@Spell
|
||||||
|
|
||||||
syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained
|
syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained
|
||||||
syn region cmakeRegistry start="\[" end="]" contained oneline contains=cmakeTodo,cmakeEscaped
|
syn region cmakeRegistry start="\[" end="]" contained oneline contains=cmakeTodo,cmakeEscaped
|
||||||
@@ -358,6 +360,8 @@ syn keyword cmakeTodo
|
|||||||
\ TODO FIXME XXX
|
\ TODO FIXME XXX
|
||||||
\ contained
|
\ contained
|
||||||
|
|
||||||
|
hi def link cmakeBracketArgument String
|
||||||
|
hi def link cmakeBracketComment Comment
|
||||||
hi def link cmakeCommand Function
|
hi def link cmakeCommand Function
|
||||||
hi def link cmakeCommandConditional Conditional
|
hi def link cmakeCommandConditional Conditional
|
||||||
hi def link cmakeCommandDeprecated WarningMsg
|
hi def link cmakeCommandDeprecated WarningMsg
|
||||||
@@ -367,7 +371,6 @@ hi def link cmakeEnvironment Special
|
|||||||
hi def link cmakeEscaped Special
|
hi def link cmakeEscaped Special
|
||||||
hi def link cmakeGeneratorExpression WarningMsg
|
hi def link cmakeGeneratorExpression WarningMsg
|
||||||
hi def link cmakeGeneratorExpressions Constant
|
hi def link cmakeGeneratorExpressions Constant
|
||||||
hi def link cmakeLuaComment Comment
|
|
||||||
hi def link cmakeModule Include
|
hi def link cmakeModule Include
|
||||||
hi def link cmakeProperty Constant
|
hi def link cmakeProperty Constant
|
||||||
hi def link cmakeRegistry Underlined
|
hi def link cmakeRegistry Underlined
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ hi def link coffeeConditional Conditional
|
|||||||
syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
|
syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
|
||||||
hi def link coffeeException Exception
|
hi def link coffeeException Exception
|
||||||
|
|
||||||
syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\|debugger\|import\|export\|default\|await\)\>/
|
syn match coffeeKeyword /\<\%(new\|in\|of\|from\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\|yield\|debugger\|import\|export\|default\|await\)\>/
|
||||||
\ display
|
\ display
|
||||||
" The `own` keyword is only a keyword after `for`.
|
" The `own` keyword is only a keyword after `for`.
|
||||||
syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat
|
syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
|
|||||||
|
|
||||||
" Language: Crystal
|
" Language: Crystal
|
||||||
" Based on Ruby syntax highlight
|
" Based on Ruby syntax highlight
|
||||||
" which is made by Mirko Nasato and Doug Kearns
|
" which was made by Mirko Nasato and Doug Kearns
|
||||||
" ---------------------------------------------
|
" ---------------------------------------------
|
||||||
|
|
||||||
if exists('b:current_syntax')
|
if exists('b:current_syntax')
|
||||||
@@ -23,7 +23,7 @@ endif
|
|||||||
" Operators
|
" Operators
|
||||||
if exists('g: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
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -31,11 +31,11 @@ endif
|
|||||||
syn match crystalStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
|
syn match crystalStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
|
||||||
syn match crystalStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
|
syn match crystalStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
|
||||||
|
|
||||||
syn region crystalInterpolation matchgroup=crystalInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@crystalNotTop
|
syn region crystalInterpolation matchgroup=crystalInterpolationDelim start="#{" end="}" contained contains=ALLBUT,@crystalNotTop
|
||||||
syn match crystalInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=crystalInterpolationDelimiter,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable,crystalPredefinedVariable
|
syn match crystalInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=crystalInterpolationDelim,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable,crystalPredefinedVariable
|
||||||
syn match crystalInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
|
syn match crystalInterpolationDelim "#\ze\%(\$\|@@\=\)\w\+" display contained
|
||||||
syn match crystalInterpolation "#\$\%(-\w\|\W\)" display contained contains=crystalInterpolationDelimiter,crystalPredefinedVariable,crystalInvalidVariable
|
syn match crystalInterpolation "#\$\%(-\w\|\W\)" display contained contains=crystalInterpolationDelim,crystalPredefinedVariable,crystalInvalidVariable
|
||||||
syn match crystalInterpolationDelimiter "#\ze\$\%(-\w\|\W\)" display contained
|
syn match crystalInterpolationDelim "#\ze\$\%(-\w\|\W\)" display contained
|
||||||
syn region crystalNoInterpolation start="\\#{" end="}" contained
|
syn region crystalNoInterpolation start="\\#{" end="}" contained
|
||||||
syn match crystalNoInterpolation "\\#{" display contained
|
syn match crystalNoInterpolation "\\#{" display contained
|
||||||
syn match crystalNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained
|
syn match crystalNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained
|
||||||
@@ -129,7 +129,7 @@ syn region crystalString matchgroup=crystalStringDelimiter start="\"" end="\"" s
|
|||||||
syn region crystalString matchgroup=crystalStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@crystalStringSpecial fold
|
syn region crystalString matchgroup=crystalStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@crystalStringSpecial fold
|
||||||
|
|
||||||
" Character
|
" Character
|
||||||
syn match crystalCharLiteral "'\%([^\\]\|\\[abefnrstv'\\]\|\\\o\{1,3}\|\\x\x\{1,2}\|\\u\x\{4}\)'" contained display
|
syn match crystalCharLiteral "'\%([^\\]\|\\[abefnrstv'\\]\|\\\o\{1,3}\|\\x\x\{1,2}\|\\u\x\{4}\)'" contains=crystalStringEscape display
|
||||||
|
|
||||||
" Generalized Single Quoted String, Symbol and Array of Strings
|
" Generalized Single Quoted String, Symbol and Array of Strings
|
||||||
syn region crystalString matchgroup=crystalStringDelimiter start="%[qwi]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
|
syn region crystalString matchgroup=crystalStringDelimiter start="%[qwi]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
|
||||||
@@ -234,9 +234,11 @@ if !exists('b:crystal_no_expensive') && !exists('g:crystal_no_expensive')
|
|||||||
" statements without 'do'
|
" statements without 'do'
|
||||||
syn region crystalBlockExpression matchgroup=crystalControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@crystalNotTop fold
|
syn region crystalBlockExpression matchgroup=crystalControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@crystalNotTop fold
|
||||||
syn region crystalCaseExpression matchgroup=crystalConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@crystalNotTop fold
|
syn region crystalCaseExpression matchgroup=crystalConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@crystalNotTop fold
|
||||||
|
syn region crystalSelectExpression matchgroup=crystalConditional start="\<select\>" end="\<end\>" contains=ALLBUT,@crystalNotTop fold
|
||||||
syn region crystalConditionalExpression matchgroup=crystalConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|ifdef\|unless\)\>" end="\%(\%(\%(\.\@<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@crystalNotTop fold
|
syn region crystalConditionalExpression matchgroup=crystalConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|ifdef\|unless\)\>" end="\%(\%(\%(\.\@<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@crystalNotTop fold
|
||||||
|
|
||||||
syn match crystalConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=crystalCaseExpression
|
syn match crystalConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=crystalCaseExpression
|
||||||
|
syn match crystalConditional "\<\%(when\|else\)\>[?!]\@!" contained containedin=crystalSelectExpression
|
||||||
syn match crystalConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=crystalConditionalExpression
|
syn match crystalConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=crystalConditionalExpression
|
||||||
|
|
||||||
syn match crystalExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=crystalBlockExpression
|
syn match crystalExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=crystalBlockExpression
|
||||||
@@ -274,7 +276,8 @@ syn match crystalLinkAttr "]" contained containedin=crystalLinkAttrRegion displa
|
|||||||
if !exists('g: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 abstract
|
||||||
|
syn match crystalAttribute "\<\%(class_\)\=\%(getter\|setter\|property\)[!?]\=\s" display
|
||||||
syn match crystalControl "\<\%(abort\|at_exit\|exit\|fork\|loop\)\>[?!]\@!" display
|
syn match crystalControl "\<\%(abort\|at_exit\|exit\|fork\|loop\)\>[?!]\@!" display
|
||||||
syn keyword crystalException raise
|
syn keyword crystalException raise
|
||||||
" false positive with 'include?'
|
" false positive with 'include?'
|
||||||
@@ -356,19 +359,17 @@ hi def link crystalAccess Statement
|
|||||||
hi def link crystalAttribute Statement
|
hi def link crystalAttribute Statement
|
||||||
hi def link crystalPseudoVariable Constant
|
hi def link crystalPseudoVariable Constant
|
||||||
hi def link crystalCharLiteral Character
|
hi def link crystalCharLiteral Character
|
||||||
|
|
||||||
hi def link crystalComment Comment
|
hi def link crystalComment Comment
|
||||||
hi def link crystalTodo Todo
|
hi def link crystalTodo Todo
|
||||||
|
|
||||||
hi def link crystalStringEscape Special
|
hi def link crystalStringEscape Special
|
||||||
hi def link crystalInterpolationDelimiter Delimiter
|
hi def link crystalInterpolationDelim Delimiter
|
||||||
hi def link crystalNoInterpolation crystalString
|
hi def link crystalNoInterpolation crystalString
|
||||||
hi def link crystalSharpBang PreProc
|
hi def link crystalSharpBang PreProc
|
||||||
hi def link crystalRegexpDelimiter crystalStringDelimiter
|
hi def link crystalRegexpDelimiter crystalStringDelimiter
|
||||||
hi def link crystalSymbolDelimiter crystalStringDelimiter
|
hi def link crystalSymbolDelimiter crystalStringDelimiter
|
||||||
hi def link crystalStringDelimiter Delimiter
|
hi def link crystalStringDelimiter Delimiter
|
||||||
hi def link crystalHeredoc crystalString
|
|
||||||
hi def link crystalString String
|
hi def link crystalString String
|
||||||
|
hi def link crystalHeredoc crystalString
|
||||||
hi def link crystalRegexpEscape crystalRegexpSpecial
|
hi def link crystalRegexpEscape crystalRegexpSpecial
|
||||||
hi def link crystalRegexpQuantifier crystalRegexpSpecial
|
hi def link crystalRegexpQuantifier crystalRegexpSpecial
|
||||||
hi def link crystalRegexpAnchor crystalRegexpSpecial
|
hi def link crystalRegexpAnchor crystalRegexpSpecial
|
||||||
@@ -377,13 +378,10 @@ hi def link crystalRegexpCharClass crystalRegexpSpecial
|
|||||||
hi def link crystalRegexpSpecial Special
|
hi def link crystalRegexpSpecial Special
|
||||||
hi def link crystalRegexpComment Comment
|
hi def link crystalRegexpComment Comment
|
||||||
hi def link crystalRegexp crystalString
|
hi def link crystalRegexp crystalString
|
||||||
|
|
||||||
hi def link crystalLinkAttr PreProc
|
|
||||||
|
|
||||||
hi def link crystalMacro PreProc
|
hi def link crystalMacro PreProc
|
||||||
|
hi def link crystalLinkAttr crystalMacro
|
||||||
hi def link crystalInvalidVariable Error
|
|
||||||
hi def link crystalError Error
|
hi def link crystalError Error
|
||||||
|
hi def link crystalInvalidVariable crystalError
|
||||||
hi def link crystalSpaceError crystalError
|
hi def link crystalSpaceError crystalError
|
||||||
|
|
||||||
let b:current_syntax = 'crystal'
|
let b:current_syntax = 'crystal'
|
||||||
|
|||||||
@@ -18,25 +18,15 @@ 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*[!?]\?\>' contains=elixirUnusedVariable,elixirKernelFunction
|
syn match elixirId '\<[_a-zA-Z]\w*[!?]\?\>' contains=elixirUnusedVariable
|
||||||
|
|
||||||
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\|after\|rescue\|catch\|else\|quote\|unquote\|super\|unquote_splicing\)\>:\@!'
|
||||||
syn match elixirKeyword '\(\.\)\@<!\<\(exit\|raise\|throw\|after\|rescue\|catch\|else\)\>'
|
|
||||||
syn match elixirKeyword '\(\.\)\@<!\<\(quote\|unquote\|super\|spawn\|spawn_link\|spawn_monitor\)\>'
|
|
||||||
|
|
||||||
" Kernel functions
|
|
||||||
syn keyword elixirKernelFunction contained is_atom is_binary is_bitstring is_boolean is_float
|
|
||||||
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 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
|
syn match elixirUnusedVariable contained '\%(\.\)\@<!\<_\w*\>\%((\)\@!'
|
||||||
syn match elixirUnusedVariable contained '\v%(^|[^.])@<=<_\w*>'
|
|
||||||
|
|
||||||
syn match elixirOperator '\v\.@<!<%(and|or|in|not)>'
|
syn match elixirOperator '\v\.@<!<%(and|or|in|not)>'
|
||||||
syn match elixirOperator '!==\|!=\|!'
|
syn match elixirOperator '!==\|!=\|!'
|
||||||
@@ -88,16 +78,16 @@ syn region elixirString matchgroup=elixirStringDelimiter start=+\z('\)+ end=+
|
|||||||
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=@Spell,@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=@Spell,@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=@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,elixirComment,@elixirNotTop
|
||||||
|
|
||||||
syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString
|
syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString
|
||||||
syn match elixirString "\(\w\)\@<!?\%(\\\(x\d{1,2}\|\h{1,2}\h\@!\>\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)"
|
syn match elixirString "\(\w\)\@<!?\%(\\\(x\d{1,2}\|\h{1,2}\h\@!\>\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)"
|
||||||
|
|
||||||
syn region elixirBlock matchgroup=elixirBlockDefinition start="\<do\>:\@!" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold
|
syn region elixirBlock matchgroup=elixirBlockDefinition start="\<do\>:\@!" end="\<end\>" contains=ALLBUT,@elixirNotTop fold
|
||||||
syn region elixirElseBlock matchgroup=elixirBlockDefinition start="\<else\>:\@!" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold
|
syn region elixirElseBlock matchgroup=elixirBlockDefinition start="\<else\>:\@!" end="\<end\>" contains=ALLBUT,@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,@elixirNotTop fold
|
||||||
|
|
||||||
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 region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirAtom,elixirPseudoVariable,elixirAlias,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirAtomInterpolated,elixirRegex,elixirString,elixirStringDelimiter,elixirRegexDelimiter,elixirInterpolationDelimiter,elixirSigil,elixirAnonymousFunction,elixirComment
|
||||||
|
|
||||||
syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE
|
syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE
|
||||||
|
|
||||||
@@ -167,8 +157,8 @@ syn match elixirRecordDeclaration "[^[:space:];#<]\+" contained con
|
|||||||
syn match elixirMacroDeclaration "[^[:space:];#<,()\[\]]\+" contained nextgroup=elixirArguments skipwhite skipnl
|
syn match elixirMacroDeclaration "[^[:space:];#<,()\[\]]\+" contained nextgroup=elixirArguments skipwhite skipnl
|
||||||
syn match elixirDelegateDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl
|
syn match elixirDelegateDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl
|
||||||
syn region elixirDelegateDeclaration start='\[' end='\]' contained contains=elixirFunctionDeclaration skipwhite skipnl
|
syn region elixirDelegateDeclaration start='\[' end='\]' contained contains=elixirFunctionDeclaration skipwhite skipnl
|
||||||
syn match elixirOverridableDeclaration "[^[:space:];#<]\+" contained contains=elixirAlias skipwhite skipnl
|
syn match elixirOverridableDeclaration "[^[:space:];#<]\+" contained contains=elixirAlias,elixirAtom skipwhite skipnl
|
||||||
syn match elixirExceptionDeclaration "[^[:space:];#<]\+" contained contains=elixirAlias skipwhite skipnl
|
syn match elixirExceptionDeclaration "[^[:space:];#<]\+" contained contains=elixirAlias,elixirAtom skipwhite skipnl
|
||||||
syn match elixirCallbackDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl
|
syn match elixirCallbackDeclaration "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration skipwhite skipnl
|
||||||
|
|
||||||
" ExUnit
|
" ExUnit
|
||||||
@@ -176,7 +166,7 @@ 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 elixirBlockDefinition Keyword
|
hi def link elixirBlockDefinition Define
|
||||||
hi def link elixirDefine Define
|
hi def link elixirDefine Define
|
||||||
hi def link elixirPrivateDefine Define
|
hi def link elixirPrivateDefine Define
|
||||||
hi def link elixirGuard Define
|
hi def link elixirGuard Define
|
||||||
@@ -200,9 +190,8 @@ hi def link elixirMacroDeclaration Macro
|
|||||||
hi def link elixirInclude Include
|
hi def link elixirInclude Include
|
||||||
hi def link elixirComment Comment
|
hi def link elixirComment Comment
|
||||||
hi def link elixirTodo Todo
|
hi def link elixirTodo Todo
|
||||||
hi def link elixirKeyword Keyword
|
hi def link elixirKeyword Define
|
||||||
hi def link elixirExUnitAssert Keyword
|
hi def link elixirExUnitAssert Keyword
|
||||||
hi def link elixirKernelFunction Keyword
|
|
||||||
hi def link elixirOperator Operator
|
hi def link elixirOperator Operator
|
||||||
hi def link elixirAtom Constant
|
hi def link elixirAtom Constant
|
||||||
hi def link elixirPseudoVariable Constant
|
hi def link elixirPseudoVariable Constant
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ if exists('b:current_syntax')
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" Keywords
|
" Keywords
|
||||||
syn keyword elmConditional case else if of then
|
syn keyword elmConditional else if of then
|
||||||
syn keyword elmAlias alias
|
syn keyword elmAlias alias
|
||||||
syn keyword elmTypedef type port let in
|
syn keyword elmTypedef contained type port
|
||||||
syn keyword elmImport exposing as import module where
|
syn keyword elmImport exposing as import module where
|
||||||
|
|
||||||
" Operators
|
" Operators
|
||||||
syn match elmOperator "\([-!#$%`&\*\+./<=>\?@\\^|~:]\|\<_\>\)"
|
syn match elmOperator contained "\([-!#$%`&\*\+./<=>\?@\\^|~:]\|\<_\>\)"
|
||||||
|
|
||||||
" Types
|
" Types
|
||||||
syn match elmType "\<[A-Z][0-9A-Za-z_'-]*"
|
syn match elmType "\<[A-Z][0-9A-Za-z_'-]*"
|
||||||
@@ -29,7 +29,7 @@ syn match elmTupleFunction "\((,\+)\)"
|
|||||||
" Comments
|
" Comments
|
||||||
syn keyword elmTodo TODO FIXME XXX contained
|
syn keyword elmTodo TODO FIXME XXX contained
|
||||||
syn match elmLineComment "--.*" contains=elmTodo,@spell
|
syn match elmLineComment "--.*" contains=elmTodo,@spell
|
||||||
syn region elmComment matchgroup=elmComment start="{-|\=" end="-}" contains=elmTodo,elmComment,@spell
|
syn region elmComment matchgroup=elmComment start="{-|\=" end="-}" contains=elmTodo,elmComment,@spell fold
|
||||||
|
|
||||||
" Strings
|
" Strings
|
||||||
syn match elmStringEscape "\\u[0-9a-fA-F]\{4}" contained
|
syn match elmStringEscape "\\u[0-9a-fA-F]\{4}" contained
|
||||||
@@ -43,8 +43,18 @@ syn match elmInt "-\?\<\d\+\>\|0[xX][0-9a-fA-F]\+\>"
|
|||||||
syn match elmFloat "\(\<\d\+\.\d\+\>\)"
|
syn match elmFloat "\(\<\d\+\.\d\+\>\)"
|
||||||
|
|
||||||
" Identifiers
|
" Identifiers
|
||||||
syn match elmTopLevelDecl "^\s*[a-zA-Z][a-zA-z0-9_]*\('\)*\s\+:\s\+" contains=elmOperator
|
syn match elmTopLevelDecl "^\s*[a-zA-Z][a-zA-z0-9_]*\('\)*\s\+:\(\r\n\|\r\|\n\|\s\)\+" contains=elmOperator
|
||||||
|
|
||||||
|
" Folding
|
||||||
|
syn region elmTopLevelTypedef start="type" end="\n\(\n\n\)\@=" contains=ALL fold
|
||||||
|
syn region elmTopLevelFunction start="^[a-zA-Z].\+\n[a-zA-Z].\+=" end="^\(\n\+\)\@=" contains=ALL fold
|
||||||
|
syn region elmCaseBlock matchgroup=elmCaseBlockDefinition start="^\z\(\s\+\)\<case\>" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\n\z1\@!\(\n\n\)\@=" contains=ALL fold
|
||||||
|
syn region elmCaseItemBlock start="^\z\(\s\+\).\+->$" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\(\n\z1\S\)\@=" contains=ALL fold
|
||||||
|
syn region elmLetBlock matchgroup=elmLetBlockDefinition start="\<let\>" end="\<in\>" contains=ALL fold
|
||||||
|
|
||||||
|
hi def link elmCaseBlockDefinition Conditional
|
||||||
|
hi def link elmCaseBlockItemDefinition Conditional
|
||||||
|
hi def link elmLetBlockDefinition TypeDef
|
||||||
hi def link elmTopLevelDecl Function
|
hi def link elmTopLevelDecl Function
|
||||||
hi def link elmTupleFunction Normal
|
hi def link elmTupleFunction Normal
|
||||||
hi def link elmTodo Todo
|
hi def link elmTodo Todo
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ syn match erlangGlobalFuncRef '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\
|
|||||||
syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
|
syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
|
||||||
syn match erlangMacro '??\=[[:alnum:]_@]\+'
|
syn match erlangMacro '??\=[[:alnum:]_@]\+'
|
||||||
syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+'
|
syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+'
|
||||||
|
syn region erlangQuotedMacro start=/??\=\s*'/ end=/'/ contains=erlangQuotedAtomModifier
|
||||||
syn match erlangMap '#'
|
syn match erlangMap '#'
|
||||||
syn match erlangRecord '#\s*\l[[:alnum:]_@]*'
|
syn match erlangRecord '#\s*\l[[:alnum:]_@]*'
|
||||||
syn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier
|
syn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier
|
||||||
@@ -193,6 +194,7 @@ hi def link erlangGlobalFuncCall Function
|
|||||||
hi def link erlangGlobalFuncRef Function
|
hi def link erlangGlobalFuncRef Function
|
||||||
hi def link erlangVariable Normal
|
hi def link erlangVariable Normal
|
||||||
hi def link erlangMacro Normal
|
hi def link erlangMacro Normal
|
||||||
|
hi def link erlangQuotedMacro Normal
|
||||||
hi def link erlangRecord Normal
|
hi def link erlangRecord Normal
|
||||||
hi def link erlangQuotedRecord Normal
|
hi def link erlangQuotedRecord Normal
|
||||||
hi def link erlangMap Normal
|
hi def link erlangMap Normal
|
||||||
@@ -204,6 +206,7 @@ hi def link erlangGlobalFuncCall Normal
|
|||||||
hi def link erlangGlobalFuncRef Normal
|
hi def link erlangGlobalFuncRef Normal
|
||||||
hi def link erlangVariable Identifier
|
hi def link erlangVariable Identifier
|
||||||
hi def link erlangMacro Macro
|
hi def link erlangMacro Macro
|
||||||
|
hi def link erlangQuotedMacro Macro
|
||||||
hi def link erlangRecord Structure
|
hi def link erlangRecord Structure
|
||||||
hi def link erlangQuotedRecord Structure
|
hi def link erlangQuotedRecord Structure
|
||||||
hi def link erlangMap Structure
|
hi def link erlangMap Structure
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
|||||||
" URL: https://github.com/vim-ruby/vim-ruby
|
" URL: https://github.com/vim-ruby/vim-ruby
|
||||||
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
|
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
if &syntax !~# '\<eruby\>' || get(b:, 'current_syntax') =~# '\<eruby\>'
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -20,6 +20,8 @@ endif
|
|||||||
|
|
||||||
if &filetype =~ '^eruby\.'
|
if &filetype =~ '^eruby\.'
|
||||||
let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
|
let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
|
||||||
|
elseif &filetype =~ '^.*\.eruby\>'
|
||||||
|
let b:eruby_subtype = matchstr(&filetype,'^.\{-\}\ze\.eruby\>')
|
||||||
elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
|
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\+')
|
||||||
@@ -43,16 +45,20 @@ elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if !exists("b:eruby_nest_level")
|
if !exists("b:eruby_nest_level")
|
||||||
|
if &syntax =~# '\<eruby\.eruby\>'
|
||||||
|
let b:eruby_nest_level = strlen(substitute(substitute(&filetype,'\C\<eruby\>','@','g'),'[^@]','','g'))
|
||||||
|
else
|
||||||
let b:eruby_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g'))
|
let b:eruby_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g'))
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
if !b:eruby_nest_level
|
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 != '' && b:eruby_subtype !=? 'eruby'
|
if get(b:, 'eruby_subtype', '') !~# '^\%(eruby\)\=$' && &syntax =~# '^eruby\>'
|
||||||
exe "runtime! syntax/".b:eruby_subtype.".vim"
|
exe "runtime! syntax/".b:eruby_subtype.".vim"
|
||||||
unlet! b:current_syntax
|
|
||||||
endif
|
endif
|
||||||
|
unlet! b:current_syntax
|
||||||
syn include @rubyTop syntax/ruby.vim
|
syn include @rubyTop syntax/ruby.vim
|
||||||
|
|
||||||
syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment
|
syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment
|
||||||
@@ -67,7 +73,7 @@ exe 'syn region erubyComment matchgroup=erubyDelimiter start="<%\{1,'.b:erub
|
|||||||
hi def link erubyDelimiter PreProc
|
hi def link erubyDelimiter PreProc
|
||||||
hi def link erubyComment Comment
|
hi def link erubyComment Comment
|
||||||
|
|
||||||
let b:current_syntax = 'eruby'
|
let b:current_syntax = matchstr(&syntax, '^.*\<eruby\>')
|
||||||
|
|
||||||
if main_syntax == 'eruby'
|
if main_syntax == 'eruby'
|
||||||
unlet main_syntax
|
unlet main_syntax
|
||||||
|
|||||||
207
syntax/ferm.vim
Normal file
207
syntax/ferm.vim
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ferm') == -1
|
||||||
|
|
||||||
|
"============================================================================
|
||||||
|
" ferm syntax highlighter
|
||||||
|
"
|
||||||
|
" Language: ferm; "For Easy Rule Making", a frontend for iptables
|
||||||
|
" Ferm Info: http://ferm.foo-projects.org/
|
||||||
|
" Version: 0.03
|
||||||
|
" Date: 2013-01-09
|
||||||
|
" Maintainer: Benjamin Leopold <benjamin-at-cometsong-dot-net>
|
||||||
|
" URL: http://github.com/cometsong/ferm.vim
|
||||||
|
" Credits: Modeled after Eric Haarbauer's iptables syntax file.
|
||||||
|
"
|
||||||
|
"============================================================================
|
||||||
|
" Section: Initialization {{{1
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
" 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 = 'ferm'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't use standard HiLink, it will not work with included syntax files
|
||||||
|
if version < 508
|
||||||
|
command! -nargs=+ FermHiLink highlight link <args>
|
||||||
|
else
|
||||||
|
command! -nargs=+ FermHiLink highlight default link <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax case match
|
||||||
|
|
||||||
|
if version < 600
|
||||||
|
set iskeyword+=-
|
||||||
|
else
|
||||||
|
setlocal iskeyword+=-
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Initialize global public variables: {{{2
|
||||||
|
|
||||||
|
" Support deprecated variable name used prior to release 1.07.
|
||||||
|
if exists("g:fermSpecialDelimiters") &&
|
||||||
|
\ !exists("g:Ferm_SpecialDelimiters")
|
||||||
|
|
||||||
|
let g:Ferm_SpecialDelimiters = g:fermSpecialDelimiters
|
||||||
|
unlet g:fermSpecialDelimiters
|
||||||
|
" echohl WarningMsg | echo "Warning:" | echohl None
|
||||||
|
" echo "The g:fermSpecialDelimiters variable is deprecated."
|
||||||
|
" echo "Please use g:Ferm_SpecialDelimiters in your .vimrc instead"
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists("g:Ferm_SpecialDelimiters")
|
||||||
|
let s:Ferm_SpecialDelimiters = g:Ferm_SpecialDelimiters
|
||||||
|
else
|
||||||
|
let s:Ferm_SpecialDelimiters = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
"============================================================================
|
||||||
|
" Section: Syntax Definitions {{{1
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
syntax keyword fermLocation domain table chain policy @subchain
|
||||||
|
|
||||||
|
syntax keyword fermMatch interface outerface protocol proto
|
||||||
|
\ saddr daddr fragment sport dport syn module mod
|
||||||
|
|
||||||
|
syntax keyword fermBuiltinChain
|
||||||
|
\ INPUT OUTPUT FORWARD PREROUTING POSTROUTING
|
||||||
|
|
||||||
|
syntax match fermInterface "[eth|ppp]\d"
|
||||||
|
|
||||||
|
syntax keyword fermTable filter nat mangle raw
|
||||||
|
|
||||||
|
" TODO: check the use of duplicate terms in two syntax defs; then enable (arp|eb) tables.
|
||||||
|
"syntax keyword fermArpTables source-ip destination-ip source-mac destination-mac
|
||||||
|
"\ interface outerface h-length opcode h-type proto-type
|
||||||
|
"\ mangle-ip-s mangle-ip-d mangle-mac-s mangle-mac-d mangle-target
|
||||||
|
"syntax keyword fermEbTables proto interface outerface logical-in logical-out saddr daddr
|
||||||
|
"\ 802.3 arp ip mark_m pkttype stp vlan log
|
||||||
|
|
||||||
|
syntax keyword fermTarget
|
||||||
|
\ ACCEPT DROP QUEUE RETURN BALANCE CLASSIFY CLUSTERIP CONNMARK
|
||||||
|
\ CONNSECMARK CONNTRACK DNAT DSCP ECN HL IPMARK IPV4OPSSTRIP LOG
|
||||||
|
\ MARK MASQUERADE MIRROR NETMAP NFLOG NFQUEUE NOTRACK REDIRECT REJECT
|
||||||
|
\ ROUTE SAME SECMARK SET SNAT TARPIT TCPMSS TOS TRACE TTL ULOG XOR
|
||||||
|
|
||||||
|
syntax keyword fermModuleName contained
|
||||||
|
\ account addrtype ah childlevel comment condition connbytes connlimit
|
||||||
|
\ connmark connrate conntrack dccp dscp dstlimit ecn esp fuzzy hashlimit
|
||||||
|
\ helper icmp iprange ipv4options length limit lo mac mark mport multiport
|
||||||
|
\ nth osf owner physdev pkttype policy psd quota random realm recent
|
||||||
|
\ sctp set state string tcp tcpmss time tos ttl u32 udp unclean
|
||||||
|
|
||||||
|
syntax keyword fermModuleType
|
||||||
|
\ UNSPEC UNICAST LOCAL BROADCAST ANYCAST MULTICAST BLACKHOLE UNREACHABLE
|
||||||
|
\ PROHIBIT THROW NAT XRESOLVE INVALID ESTABLISHED NEW RELATED SYN ACK FIN
|
||||||
|
\ RST URG PSH ALL NONE
|
||||||
|
|
||||||
|
" From --reject-with option
|
||||||
|
syntax keyword fermModuleType
|
||||||
|
\ icmp-net-unreachable
|
||||||
|
\ icmp-host-unreachable
|
||||||
|
\ icmp-port-unreachable
|
||||||
|
\ icmp-proto-unreachable
|
||||||
|
\ icmp-net-prohibited
|
||||||
|
\ icmp-host-prohibited
|
||||||
|
\ icmp-admin-prohibited
|
||||||
|
|
||||||
|
" From --icmp-type option
|
||||||
|
syntax keyword fermModuleType
|
||||||
|
\ any
|
||||||
|
\ echo-reply
|
||||||
|
\ destination-unreachable
|
||||||
|
\ network-unreachable
|
||||||
|
\ host-unreachable
|
||||||
|
\ protocol-unreachable
|
||||||
|
\ port-unreachable
|
||||||
|
\ fragmentation-needed
|
||||||
|
\ source-route-failed
|
||||||
|
\ network-unknown
|
||||||
|
\ host-unknown
|
||||||
|
\ network-prohibited
|
||||||
|
\ host-prohibited
|
||||||
|
\ TOS-network-unreachable
|
||||||
|
\ TOS-host-unreachable
|
||||||
|
\ communication-prohibited
|
||||||
|
\ host-precedence-violation
|
||||||
|
\ precedence-cutoff
|
||||||
|
\ source-quench
|
||||||
|
\ redirect
|
||||||
|
\ network-redirect
|
||||||
|
\ host-redirect
|
||||||
|
\ TOS-network-redirect
|
||||||
|
\ TOS-host-redirect
|
||||||
|
\ echo-request
|
||||||
|
\ router-advertisement
|
||||||
|
\ router-solicitation
|
||||||
|
\ time-exceeded
|
||||||
|
\ ttl-zero-during-transit
|
||||||
|
\ ttl-zero-during-reassembly
|
||||||
|
\ parameter-problem
|
||||||
|
\ ip-header-bad
|
||||||
|
\ required-option-missing
|
||||||
|
\ timestamp-request
|
||||||
|
\ timestamp-reply
|
||||||
|
\ address-mask-request
|
||||||
|
\ address-mask-reply
|
||||||
|
|
||||||
|
" TODO: check ferm "$variable" & "&function" character matches
|
||||||
|
syntax match fermVariable "$[_A-Za-z0-9]+"
|
||||||
|
syntax keyword fermVarDefine @def
|
||||||
|
|
||||||
|
syntax keyword fermFunction @if @else @include @hook
|
||||||
|
\ @eq @ne @not @resolve @cat @substr @length
|
||||||
|
\ @basename @dirname @ipfilter
|
||||||
|
|
||||||
|
syntax keyword fermUserFunction "&[_A-Za-z0-9]+"
|
||||||
|
|
||||||
|
syntax region fermString start=+"+ skip=+\\"+ end=+"+
|
||||||
|
syntax region fermString start=+'+ skip=+\\'+ end=+'+
|
||||||
|
|
||||||
|
syntax region fermCommand start=+`+ skip=+\\'+ end=+`+
|
||||||
|
|
||||||
|
syntax match fermComment "#.*"
|
||||||
|
|
||||||
|
"============================================================================
|
||||||
|
" Section: Group Linking {{{1
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
FermHiLink fermLocation Title
|
||||||
|
FermHiLink fermMatch Special
|
||||||
|
FermHiLink fermTable ErrorMsg
|
||||||
|
FermHiLink fermBuiltinChain Underlined
|
||||||
|
FermHiLink fermTarget Statement
|
||||||
|
FermHiLink fermFunction Identifier
|
||||||
|
FermHiLink fermUserFunction Function
|
||||||
|
FermHiLink fermModuleName PreProc
|
||||||
|
FermHiLink fermModuleType Type
|
||||||
|
FermHiLink fermVarDefine PreProc
|
||||||
|
FermHiLink fermVariable Operator
|
||||||
|
FermHiLink fermString Constant
|
||||||
|
FermHiLink fermCommand Identifier
|
||||||
|
FermHiLink fermComment Comment
|
||||||
|
|
||||||
|
"============================================================================
|
||||||
|
" Section: Clean Up {{{1
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
delcommand FermHiLink
|
||||||
|
|
||||||
|
let b:current_syntax = "ferm"
|
||||||
|
|
||||||
|
if main_syntax == 'ferm'
|
||||||
|
unlet main_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Autoconfigure vim indentation settings
|
||||||
|
" vim:ts=4:sw=4:sts=4:fdm=marker:iskeyword+=-
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -27,7 +27,9 @@ syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\)
|
|||||||
syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
|
syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
|
||||||
syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
|
syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
|
||||||
syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
|
syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
|
||||||
|
syn match gitDiffAdded "{+.*+}" contained containedin=gitDiff
|
||||||
syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
|
syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
|
||||||
|
syn match gitDiffRemoved "\[-.*-\]" contained containedin=gitDiff
|
||||||
|
|
||||||
syn match gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
|
syn match gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
|
||||||
syn match gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
|
syn match gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
|
||||||
|
|||||||
@@ -20,11 +20,18 @@ endif
|
|||||||
syn include @gitcommitDiff syntax/diff.vim
|
syn include @gitcommitDiff syntax/diff.vim
|
||||||
syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
|
syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
|
||||||
|
|
||||||
syn match gitcommitFirstLine "\%^[^#].*" nextgroup=gitcommitBlank skipnl
|
syn match gitcommitSummary ".*\%<50v" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
|
||||||
syn match gitcommitSummary "^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
|
|
||||||
syn match gitcommitOverflow ".*" contained contains=@Spell
|
syn match gitcommitOverflow ".*" contained contains=@Spell
|
||||||
syn match gitcommitBlank "^[^#].*" contained contains=@Spell
|
syn match gitcommitBlank "^[^#].*" contained contains=@Spell
|
||||||
syn match gitcommitComment "^#.*"
|
|
||||||
|
if get(g:, "gitcommit_cleanup") is# "scissors"
|
||||||
|
syn match gitcommitFirstLine "\%^.*" nextgroup=gitcommitBlank skipnl
|
||||||
|
syn region gitcommitComment start=/^# -\+ >8 -\+$/ end=/\%$/ contains=gitcommitDiff
|
||||||
|
else
|
||||||
|
syn match gitcommitFirstLine "\%^[^#].*" nextgroup=gitcommitBlank skipnl
|
||||||
|
syn match gitcommitComment "^#.*"
|
||||||
|
endif
|
||||||
|
|
||||||
syn match gitcommitHead "^\%(# .*\n\)\+#$" contained transparent
|
syn match gitcommitHead "^\%(# .*\n\)\+#$" contained transparent
|
||||||
syn match gitcommitOnBranch "\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
|
syn match gitcommitOnBranch "\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
|
||||||
syn match gitcommitOnBranch "\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
|
syn match gitcommitOnBranch "\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
|
||||||
|
|||||||
@@ -10,18 +10,16 @@ if exists("b:current_syntax")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
setlocal iskeyword+=-
|
|
||||||
setlocal iskeyword-=_
|
|
||||||
syn case ignore
|
syn case ignore
|
||||||
syn sync minlines=10
|
syn sync minlines=10
|
||||||
|
|
||||||
syn match gitconfigComment "[#;].*"
|
syn match gitconfigComment "[#;].*"
|
||||||
syn match gitconfigSection "\%(^\s*\)\@<=\[[a-z0-9.-]\+\]"
|
syn match gitconfigSection "\%(^\s*\)\@<=\[[a-z0-9.-]\+\]"
|
||||||
syn match gitconfigSection '\%(^\s*\)\@<=\[[a-z0-9.-]\+ \+\"\%([^\\"]\|\\.\)*"\]'
|
syn match gitconfigSection '\%(^\s*\)\@<=\[[a-z0-9.-]\+ \+\"\%([^\\"]\|\\.\)*"\]'
|
||||||
syn match gitconfigVariable "\%(^\s*\)\@<=\a\k*\%(\s*\%([=#;]\|$\)\)\@=" nextgroup=gitconfigAssignment skipwhite
|
syn match gitconfigVariable "\%(^\s*\)\@<=\a[a-z0-9-]*\%(\s*\%([=#;]\|$\)\)\@=" nextgroup=gitconfigAssignment skipwhite
|
||||||
syn region gitconfigAssignment matchgroup=gitconfigNone start=+=\s*+ skip=+\\+ end=+\s*$+ contained contains=gitconfigBoolean,gitconfigNumber,gitConfigString,gitConfigEscape,gitConfigError,gitconfigComment keepend
|
syn region gitconfigAssignment matchgroup=gitconfigNone start=+=\s*+ skip=+\\+ end=+\s*$+ contained contains=gitconfigBoolean,gitconfigNumber,gitConfigString,gitConfigEscape,gitConfigError,gitconfigComment keepend
|
||||||
syn keyword gitconfigBoolean true false yes no contained
|
syn keyword gitconfigBoolean true false yes no contained
|
||||||
syn match gitconfigNumber "\d\+" contained
|
syn match gitconfigNumber "\<\d\+\>" contained
|
||||||
syn region gitconfigString matchgroup=gitconfigDelim start=+"+ skip=+\\+ end=+"+ matchgroup=gitconfigError end=+[^\\"]\%#\@!$+ contained contains=gitconfigEscape,gitconfigEscapeError
|
syn region gitconfigString matchgroup=gitconfigDelim start=+"+ skip=+\\+ end=+"+ matchgroup=gitconfigError end=+[^\\"]\%#\@!$+ contained contains=gitconfigEscape,gitconfigEscapeError
|
||||||
syn match gitconfigError +\\.+ contained
|
syn match gitconfigError +\\.+ contained
|
||||||
syn match gitconfigEscape +\\[\\"ntb]+ contained
|
syn match gitconfigEscape +\\[\\"ntb]+ contained
|
||||||
|
|||||||
168
syntax/go.vim
168
syntax/go.vim
@@ -11,102 +11,6 @@ if exists("b:current_syntax")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Set settings to default values.
|
|
||||||
if !exists("g:go_highlight_array_whitespace_error")
|
|
||||||
let g:go_highlight_array_whitespace_error = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_chan_whitespace_error")
|
|
||||||
let g:go_highlight_chan_whitespace_error = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_extra_types")
|
|
||||||
let g:go_highlight_extra_types = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_space_tab_error")
|
|
||||||
let g:go_highlight_space_tab_error = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_trailing_whitespace_error")
|
|
||||||
let g:go_highlight_trailing_whitespace_error = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_operators")
|
|
||||||
let g:go_highlight_operators = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_functions")
|
|
||||||
let g:go_highlight_functions = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_function_arguments")
|
|
||||||
let g:go_highlight_function_arguments = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_function_calls")
|
|
||||||
let g:go_highlight_function_calls = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_fields")
|
|
||||||
let g:go_highlight_fields = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_types")
|
|
||||||
let g:go_highlight_types = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_build_constraints")
|
|
||||||
let g:go_highlight_build_constraints = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_string_spellcheck")
|
|
||||||
let g:go_highlight_string_spellcheck = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_format_strings")
|
|
||||||
let g:go_highlight_format_strings = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_highlight_generate_tags")
|
|
||||||
let g:go_highlight_generate_tags = 0
|
|
||||||
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 goPackage package
|
syn keyword goPackage package
|
||||||
@@ -144,14 +48,13 @@ hi def link goUnsignedInts Type
|
|||||||
hi def link goFloats Type
|
hi def link goFloats Type
|
||||||
hi def link goComplexes Type
|
hi def link goComplexes Type
|
||||||
|
|
||||||
|
|
||||||
" Predefined functions and values
|
" Predefined functions and values
|
||||||
syn match goBuiltins /\<\v(append|cap|close|complex|copy|delete|imag|len)\ze\(/
|
syn keyword goBuiltins append cap close complex copy delete imag len
|
||||||
syn match goBuiltins /\<\v(make|new|panic|print|println|real|recover)\ze\(/
|
syn keyword goBuiltins make new panic print println real recover
|
||||||
syn keyword goBoolean true false
|
syn keyword goBoolean true false
|
||||||
syn keyword goPredefinedIdentifiers nil iota
|
syn keyword goPredefinedIdentifiers nil iota
|
||||||
|
|
||||||
hi def link goBuiltins Keyword
|
hi def link goBuiltins Identifier
|
||||||
hi def link goBoolean Boolean
|
hi def link goBoolean Boolean
|
||||||
hi def link goPredefinedIdentifiers goBoolean
|
hi def link goPredefinedIdentifiers goBoolean
|
||||||
|
|
||||||
@@ -160,7 +63,7 @@ syn keyword goTodo contained TODO FIXME XXX BUG
|
|||||||
syn cluster goCommentGroup contains=goTodo
|
syn cluster goCommentGroup contains=goTodo
|
||||||
|
|
||||||
syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell
|
syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell
|
||||||
if s:fold_comment
|
if go#config#FoldEnable('comment')
|
||||||
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell fold
|
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell fold
|
||||||
syn match goComment "\v(^\s*//.*\n)+" contains=goGenerate,@goCommentGroup,@Spell fold
|
syn match goComment "\v(^\s*//.*\n)+" contains=goGenerate,@goCommentGroup,@Spell fold
|
||||||
else
|
else
|
||||||
@@ -170,7 +73,7 @@ endif
|
|||||||
hi def link goComment Comment
|
hi def link goComment Comment
|
||||||
hi def link goTodo Todo
|
hi def link goTodo Todo
|
||||||
|
|
||||||
if g:go_highlight_generate_tags != 0
|
if go#config#HighlightGenerateTags()
|
||||||
syn match goGenerateVariables contained /\(\$GOARCH\|\$GOOS\|\$GOFILE\|\$GOLINE\|\$GOPACKAGE\|\$DOLLAR\)\>/
|
syn match goGenerateVariables contained /\(\$GOARCH\|\$GOOS\|\$GOFILE\|\$GOLINE\|\$GOPACKAGE\|\$DOLLAR\)\>/
|
||||||
syn region goGenerate start="^\s*//go:generate" end="$" contains=goGenerateVariables
|
syn region goGenerate start="^\s*//go:generate" end="$" contains=goGenerateVariables
|
||||||
hi def link goGenerate PreProc
|
hi def link goGenerate PreProc
|
||||||
@@ -195,7 +98,7 @@ hi def link goEscapeError Error
|
|||||||
|
|
||||||
" Strings and their contents
|
" Strings and their contents
|
||||||
syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError
|
syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError
|
||||||
if g:go_highlight_string_spellcheck != 0
|
if go#config#HighlightStringSpellcheck()
|
||||||
syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup,@Spell
|
syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup,@Spell
|
||||||
syn region goRawString start=+`+ end=+`+ contains=@Spell
|
syn region goRawString start=+`+ end=+`+ contains=@Spell
|
||||||
else
|
else
|
||||||
@@ -203,7 +106,7 @@ else
|
|||||||
syn region goRawString start=+`+ end=+`+
|
syn region goRawString start=+`+ end=+`+
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:go_highlight_format_strings != 0
|
if go#config#HighlightFormatStrings()
|
||||||
" [n] notation is valid for specifying explicit argument indexes
|
" [n] notation is valid for specifying explicit argument indexes
|
||||||
" 1. Match a literal % not preceded by a %.
|
" 1. Match a literal % not preceded by a %.
|
||||||
" 2. Match any number of -, #, 0, space, or +
|
" 2. Match any number of -, #, 0, space, or +
|
||||||
@@ -231,30 +134,30 @@ hi def link goCharacter Character
|
|||||||
|
|
||||||
" Regions
|
" Regions
|
||||||
syn region goParen start='(' end=')' transparent
|
syn region goParen start='(' end=')' transparent
|
||||||
if s:fold_block
|
if go#config#FoldEnable('block')
|
||||||
syn region goBlock start="{" end="}" transparent fold
|
syn region goBlock start="{" end="}" transparent fold
|
||||||
else
|
else
|
||||||
syn region goBlock start="{" end="}" transparent
|
syn region goBlock start="{" end="}" transparent
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" import
|
" import
|
||||||
if s:fold_import
|
if go#config#FoldEnable('import')
|
||||||
syn region goImport start='import (' end=')' transparent fold contains=goImport,goString,goComment
|
syn region goImport start='import (' end=')' transparent fold contains=goImport,goString,goComment
|
||||||
else
|
else
|
||||||
syn region goImport start='import (' end=')' transparent contains=goImport,goString,goComment
|
syn region goImport start='import (' end=')' transparent contains=goImport,goString,goComment
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" var, const
|
" var, const
|
||||||
if s:fold_varconst
|
if go#config#FoldEnable('varconst')
|
||||||
syn region goVar start='var (' end='^\s*)$' transparent fold
|
syn region goVar start='var (' end='^\s*)$' transparent fold
|
||||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments,goPointerOperator
|
||||||
syn region goConst start='const (' end='^\s*)$' transparent fold
|
syn region goConst start='const (' end='^\s*)$' transparent fold
|
||||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments,goPointerOperator
|
||||||
else
|
else
|
||||||
syn region goVar start='var (' end='^\s*)$' transparent
|
syn region goVar start='var (' end='^\s*)$' transparent
|
||||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments,goPointerOperator
|
||||||
syn region goConst start='const (' end='^\s*)$' transparent
|
syn region goConst start='const (' end='^\s*)$' transparent
|
||||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goArgumentName,goArgumentType,goSimpleArguments,goPointerOperator
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Single-line var, const, and import.
|
" Single-line var, const, and import.
|
||||||
@@ -288,12 +191,12 @@ hi def link goImaginary Number
|
|||||||
hi def link goImaginaryFloat Float
|
hi def link goImaginaryFloat Float
|
||||||
|
|
||||||
" Spaces after "[]"
|
" Spaces after "[]"
|
||||||
if g:go_highlight_array_whitespace_error != 0
|
if go#config#HighlightArrayWhitespaceError()
|
||||||
syn match goSpaceError display "\(\[\]\)\@<=\s\+"
|
syn match goSpaceError display "\(\[\]\)\@<=\s\+"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Spacing errors around the 'chan' keyword
|
" Spacing errors around the 'chan' keyword
|
||||||
if g:go_highlight_chan_whitespace_error != 0
|
if go#config#HighlightChanWhitespaceError()
|
||||||
" receive-only annotation on chan type
|
" receive-only annotation on chan type
|
||||||
"
|
"
|
||||||
" \(\<chan\>\)\@<!<- (only pick arrow when it doesn't come after a chan)
|
" \(\<chan\>\)\@<!<- (only pick arrow when it doesn't come after a chan)
|
||||||
@@ -311,20 +214,21 @@ if g:go_highlight_chan_whitespace_error != 0
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" Extra types commonly seen
|
" Extra types commonly seen
|
||||||
if g:go_highlight_extra_types != 0
|
if go#config#HighlightExtraTypes()
|
||||||
syn match goExtraType /\<bytes\.\(Buffer\)\>/
|
syn match goExtraType /\<bytes\.\(Buffer\)\>/
|
||||||
|
syn match goExtraType /\<context\.\(Context\)\>/
|
||||||
syn match goExtraType /\<io\.\(Reader\|ReadSeeker\|ReadWriter\|ReadCloser\|ReadWriteCloser\|Writer\|WriteCloser\|Seeker\)\>/
|
syn match goExtraType /\<io\.\(Reader\|ReadSeeker\|ReadWriter\|ReadCloser\|ReadWriteCloser\|Writer\|WriteCloser\|Seeker\)\>/
|
||||||
syn match goExtraType /\<reflect\.\(Kind\|Type\|Value\)\>/
|
syn match goExtraType /\<reflect\.\(Kind\|Type\|Value\)\>/
|
||||||
syn match goExtraType /\<unsafe\.Pointer\>/
|
syn match goExtraType /\<unsafe\.Pointer\>/
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Space-tab error
|
" Space-tab error
|
||||||
if g:go_highlight_space_tab_error != 0
|
if go#config#HighlightSpaceTabError()
|
||||||
syn match goSpaceError display " \+\t"me=e-1
|
syn match goSpaceError display " \+\t"me=e-1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Trailing white space error
|
" Trailing white space error
|
||||||
if g:go_highlight_trailing_whitespace_error != 0
|
if go#config#HighlightTrailingWhitespaceError()
|
||||||
syn match goSpaceError display excludenl "\s\+$"
|
syn match goSpaceError display excludenl "\s\+$"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -342,7 +246,7 @@ hi def link goTodo Todo
|
|||||||
syn match goVarArgs /\.\.\./
|
syn match goVarArgs /\.\.\./
|
||||||
|
|
||||||
" Operators;
|
" Operators;
|
||||||
if g:go_highlight_operators != 0
|
if go#config#HighlightOperators()
|
||||||
" match single-char operators: - + % < > ! & | ^ * =
|
" match single-char operators: - + % < > ! & | ^ * =
|
||||||
" and corresponding two-char operators: -= += %= <= >= != &= |= ^= *= ==
|
" and corresponding two-char operators: -= += %= <= >= != &= |= ^= *= ==
|
||||||
syn match goOperator /[-+%<>!&|^*=]=\?/
|
syn match goOperator /[-+%<>!&|^*=]=\?/
|
||||||
@@ -361,13 +265,13 @@ endif
|
|||||||
hi def link goOperator Operator
|
hi def link goOperator Operator
|
||||||
|
|
||||||
" Functions;
|
" Functions;
|
||||||
if g:go_highlight_functions isnot 0 || g:go_highlight_function_arguments isnot 0
|
if go#config#HighlightFunctions() || go#config#HighlightFunctionArguments()
|
||||||
syn match goDeclaration /\<func\>/ nextgroup=goReceiver,goFunction,goSimpleArguments skipwhite skipnl
|
syn match goDeclaration /\<func\>/ nextgroup=goReceiver,goFunction,goSimpleArguments skipwhite skipnl
|
||||||
syn match goReceiverVar /\w\+\ze\s\+\(\w\|\*\)/ nextgroup=goPointerOperator,goReceiverType skipwhite skipnl contained
|
syn match goReceiverVar /\w\+\ze\s\+\(\w\|\*\)/ nextgroup=goPointerOperator,goReceiverType skipwhite skipnl contained
|
||||||
syn match goPointerOperator /\*/ nextgroup=goReceiverType contained skipwhite skipnl
|
syn match goPointerOperator /\*/ nextgroup=goReceiverType contained skipwhite skipnl
|
||||||
syn match goFunction /\w\+/ nextgroup=goSimpleArguments contained skipwhite skipnl
|
syn match goFunction /\w\+/ nextgroup=goSimpleArguments contained skipwhite skipnl
|
||||||
syn match goReceiverType /\w\+/ contained
|
syn match goReceiverType /\w\+/ contained
|
||||||
if g:go_highlight_function_arguments isnot 0
|
if go#config#HighlightFunctionArguments()
|
||||||
syn match goSimpleArguments /(\(\w\|\_s\|[*\.\[\],\{\}<>-]\)*)/ contained contains=goArgumentName nextgroup=goSimpleArguments skipwhite skipnl
|
syn match goSimpleArguments /(\(\w\|\_s\|[*\.\[\],\{\}<>-]\)*)/ contained contains=goArgumentName nextgroup=goSimpleArguments skipwhite skipnl
|
||||||
syn match goArgumentName /\w\+\(\s*,\s*\w\+\)*\ze\s\+\(\w\|\.\|\*\|\[\)/ contained nextgroup=goArgumentType skipwhite skipnl
|
syn match goArgumentName /\w\+\(\s*,\s*\w\+\)*\ze\s\+\(\w\|\.\|\*\|\[\)/ contained nextgroup=goArgumentType skipwhite skipnl
|
||||||
syn match goArgumentType /\([^,)]\|\_s\)\+,\?/ contained nextgroup=goArgumentName skipwhite skipnl
|
syn match goArgumentType /\([^,)]\|\_s\)\+,\?/ contained nextgroup=goArgumentName skipwhite skipnl
|
||||||
@@ -382,19 +286,19 @@ endif
|
|||||||
hi def link goFunction Function
|
hi def link goFunction Function
|
||||||
|
|
||||||
" Function calls;
|
" Function calls;
|
||||||
if g:go_highlight_function_calls != 0
|
if go#config#HighlightFunctionCalls()
|
||||||
syn match goFunctionCall /\w\+\ze(/ contains=goBuiltins,goDeclaration
|
syn match goFunctionCall /\w\+\ze(/ contains=goBuiltins,goDeclaration
|
||||||
endif
|
endif
|
||||||
hi def link goFunctionCall Type
|
hi def link goFunctionCall Type
|
||||||
|
|
||||||
" Fields;
|
" Fields;
|
||||||
if g:go_highlight_fields != 0
|
if go#config#HighlightFields()
|
||||||
syn match goField /\.\w\+\([.\ \n\r\:\)\[,]\)\@=/hs=s+1
|
syn match goField /\.\w\+\([.\ \n\r\:\)\[,]\)\@=/hs=s+1
|
||||||
endif
|
endif
|
||||||
hi def link goField Identifier
|
hi def link goField Identifier
|
||||||
|
|
||||||
" Structs & Interfaces;
|
" Structs & Interfaces;
|
||||||
if g:go_highlight_types != 0
|
if go#config#HighlightTypes()
|
||||||
syn match goTypeConstructor /\<\w\+{\@=/
|
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
|
||||||
@@ -410,19 +314,19 @@ hi def link goTypeDecl Keyword
|
|||||||
hi def link goDeclType Keyword
|
hi def link goDeclType Keyword
|
||||||
|
|
||||||
" Variable Assignments
|
" Variable Assignments
|
||||||
if g:go_highlight_variable_assignments != 0
|
if go#config#HighlightVariableAssignments()
|
||||||
syn match goVarAssign /\v[_.[:alnum:]]+(,\s*[_.[:alnum:]]+)*\ze(\s*([-^+|^\/%&]|\*|\<\<|\>\>|\&\^)?\=[^=])/
|
syn match goVarAssign /\v[_.[:alnum:]]+(,\s*[_.[:alnum:]]+)*\ze(\s*([-^+|^\/%&]|\*|\<\<|\>\>|\&\^)?\=[^=])/
|
||||||
hi def link goVarAssign Special
|
hi def link goVarAssign Special
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Variable Declarations
|
" Variable Declarations
|
||||||
if g:go_highlight_variable_declarations != 0
|
if go#config#HighlightVariableDeclarations()
|
||||||
syn match goVarDefs /\v\w+(,\s*\w+)*\ze(\s*:\=)/
|
syn match goVarDefs /\v\w+(,\s*\w+)*\ze(\s*:\=)/
|
||||||
hi def link goVarDefs Special
|
hi def link goVarDefs Special
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Build Constraints
|
" Build Constraints
|
||||||
if g:go_highlight_build_constraints != 0
|
if go#config#HighlightBuildConstraints()
|
||||||
syn match goBuildKeyword display contained "+build"
|
syn match goBuildKeyword display contained "+build"
|
||||||
" Highlight the known values of GOOS, GOARCH, and other +build options.
|
" Highlight the known values of GOOS, GOARCH, and other +build options.
|
||||||
syn keyword goBuildDirectives contained
|
syn keyword goBuildDirectives contained
|
||||||
@@ -444,7 +348,7 @@ if g:go_highlight_build_constraints != 0
|
|||||||
hi def link goBuildKeyword PreProc
|
hi def link goBuildKeyword PreProc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:go_highlight_build_constraints != 0 || s:fold_package_comment
|
if go#config#HighlightBuildConstraints() || go#config#FoldEnable('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.
|
||||||
@@ -453,11 +357,11 @@ if g:go_highlight_build_constraints != 0 || s:fold_package_comment
|
|||||||
exe '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' : '')
|
\ . (go#config#FoldEnable('package_comment') ? ' fold' : '')
|
||||||
exe 'syn region goPackageComment start=/\v\/\*.*\n(.*\n)*\s*\*\/\npackage/'
|
exe 'syn region goPackageComment start=/\v^\s*\/\*.*\n(.*\n)*\s*\*\/\npackage/'
|
||||||
\ . ' 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' : '')
|
\ . (go#config#FoldEnable('package_comment') ? ' fold' : '')
|
||||||
hi def link goPackageComment Comment
|
hi def link goPackageComment Comment
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -470,6 +374,10 @@ function! s:hi()
|
|||||||
" :GoCoverage commands
|
" :GoCoverage commands
|
||||||
hi def goCoverageCovered ctermfg=green guifg=#A6E22E
|
hi def goCoverageCovered ctermfg=green guifg=#A6E22E
|
||||||
hi def goCoverageUncover ctermfg=red guifg=#F92672
|
hi def goCoverageUncover ctermfg=red guifg=#F92672
|
||||||
|
|
||||||
|
" :GoDebug commands
|
||||||
|
hi GoDebugBreakpoint term=standout ctermbg=117 ctermfg=0 guibg=#BAD4F5 guifg=Black
|
||||||
|
hi GoDebugCurrent term=reverse ctermbg=12 ctermfg=7 guibg=DarkBlue guifg=White
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
augroup vim-go-hi
|
augroup vim-go-hi
|
||||||
|
|||||||
17
syntax/godebugoutput.vim
Normal file
17
syntax/godebugoutput.vim
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn match godebugOutputErr '^ERR:.*'
|
||||||
|
syn match godebugOutputOut '^OUT:.*'
|
||||||
|
|
||||||
|
let b:current_syntax = "godebugoutput"
|
||||||
|
|
||||||
|
hi def link godebugOutputErr Comment
|
||||||
|
hi def link godebugOutputOut Normal
|
||||||
|
|
||||||
|
" vim: sw=2 ts=2 et
|
||||||
|
|
||||||
|
endif
|
||||||
15
syntax/godebugstacktrace.vim
Normal file
15
syntax/godebugstacktrace.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn match godebugStacktrace '^\S\+'
|
||||||
|
|
||||||
|
let b:current_syntax = "godebugoutput"
|
||||||
|
|
||||||
|
hi def link godebugStacktrace SpecialKey
|
||||||
|
|
||||||
|
" vim: sw=2 ts=2 et
|
||||||
|
|
||||||
|
endif
|
||||||
27
syntax/godebugvariables.vim
Normal file
27
syntax/godebugvariables.vim
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn match godebugTitle '^#.*'
|
||||||
|
syn match godebugVariables '^\s*\S\+\ze:'
|
||||||
|
|
||||||
|
syn keyword goType chan map bool string error
|
||||||
|
syn keyword goSignedInts int int8 int16 int32 int64 rune
|
||||||
|
syn keyword goUnsignedInts byte uint uint8 uint16 uint32 uint64 uintptr
|
||||||
|
syn keyword goFloats float32 float64
|
||||||
|
syn keyword goComplexes complex64 complex128
|
||||||
|
|
||||||
|
syn keyword goBoolean true false
|
||||||
|
|
||||||
|
let b:current_syntax = "godebugvariables"
|
||||||
|
|
||||||
|
hi def link godebugTitle Underlined
|
||||||
|
hi def link godebugVariables Statement
|
||||||
|
hi def link goType Type
|
||||||
|
hi def link goBoolean Boolean
|
||||||
|
|
||||||
|
" vim: sw=2 ts=2 et
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -12,6 +12,8 @@ runtime! syntax/gotexttmpl.vim
|
|||||||
runtime! syntax/html.vim
|
runtime! syntax/html.vim
|
||||||
unlet b:current_syntax
|
unlet b:current_syntax
|
||||||
|
|
||||||
|
syn cluster htmlPreproc add=gotplAction,goTplComment
|
||||||
|
|
||||||
let b:current_syntax = "gohtmltmpl"
|
let b:current_syntax = "gohtmltmpl"
|
||||||
|
|
||||||
" vim: sw=2 ts=2 et
|
" vim: sw=2 ts=2 et
|
||||||
|
|||||||
50
syntax/gomod.vim
Normal file
50
syntax/gomod.vim
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
|
||||||
|
|
||||||
|
" gomod.vim: Vim syntax file for go.mod file
|
||||||
|
"
|
||||||
|
" Quit when a (custom) syntax file was already loaded
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax case match
|
||||||
|
|
||||||
|
" match keywords
|
||||||
|
syntax keyword gomodModule module
|
||||||
|
syntax keyword gomodRequire require
|
||||||
|
syntax keyword gomodExclude exclude
|
||||||
|
syntax keyword gomodReplace replace
|
||||||
|
|
||||||
|
" require, exclude and replace can be also grouped into block
|
||||||
|
syntax region gomodRequire start='require (' end=')' transparent contains=gomodRequire,gomodVersion
|
||||||
|
syntax region gomodExclude start='exclude (' end=')' transparent contains=gomodExclude,gomodVersion
|
||||||
|
syntax region gomodReplace start='replace (' end=')' transparent contains=gomodReplace,gomodVersion
|
||||||
|
|
||||||
|
" set highlights
|
||||||
|
highlight default link gomodModule Keyword
|
||||||
|
highlight default link gomodRequire Keyword
|
||||||
|
highlight default link gomodExclude Keyword
|
||||||
|
highlight default link gomodReplace Keyword
|
||||||
|
|
||||||
|
" comments are always in form of // ...
|
||||||
|
syntax region gomodComment start="//" end="$" contains=@Spell
|
||||||
|
highlight default link gomodComment Comment
|
||||||
|
|
||||||
|
" make sure quoted import paths are higlighted
|
||||||
|
syntax region gomodString start=+"+ skip=+\\\\\|\\"+ end=+"+
|
||||||
|
highlight default link gomodString String
|
||||||
|
|
||||||
|
" replace operator is in the form of '=>'
|
||||||
|
syntax match gomodReplaceOperator "\v\=\>"
|
||||||
|
highlight default link gomodReplaceOperator Operator
|
||||||
|
|
||||||
|
|
||||||
|
" highlight semver, note that this is very simple. But it works for now
|
||||||
|
syntax match gomodVersion "v\d\+\.\d\+\.\d\+"
|
||||||
|
syntax match gomodVersion "v\d\+\.\d\+\.\d\+-\S*"
|
||||||
|
syntax match gomodVersion "v\d\+\.\d\+\.\d\++incompatible"
|
||||||
|
highlight default link gomodVersion Identifier
|
||||||
|
|
||||||
|
let b:current_syntax = "gomod"
|
||||||
|
|
||||||
|
endif
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user