diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2019-12-07 17:39:31 +0100 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2019-12-07 17:39:31 +0100 |
commit | 4d8423c962e2b4172de48992bcfec965478f928b (patch) | |
tree | def9075bf938101360a834f872f1e131aabfeb3e | |
parent | e204a7223b4334ed1c556a4564a8048888b69fe8 (diff) | |
download | vim-polyglot-4.1.3.tar.gz vim-polyglot-4.1.3.zip |
Add v language, closes #437v4.1.3
-rw-r--r-- | README.md | 3 | ||||
-rwxr-xr-x | build | 1 | ||||
-rw-r--r-- | ftdetect/polyglot.vim | 8 | ||||
-rw-r--r-- | ftplugin/vlang.vim | 6 | ||||
-rw-r--r-- | indent/vlang.vim | 69 | ||||
-rw-r--r-- | syntax/vlang.vim | 268 |
6 files changed, 354 insertions, 1 deletions
@@ -10,7 +10,7 @@ A collection of language packs for Vim. > One to rule them all, one to find them, one to bring them all and in the darkness bind them. - It **won't affect your startup time**, as scripts are loaded only on demand\*. -- It **installs and updates 120+ times faster** than the <!--Package Count-->146<!--/Package Count--> packages it consists of. +- It **installs and updates 120+ times faster** than the <!--Package Count-->147<!--/Package Count--> packages it consists of. - Solid syntax and indentation support (other features skipped). Only the best language packs. - All unnecessary files are ignored (like enormous documentation from php support). - No support for esoteric languages, only most popular ones (modern too, like `slim`). @@ -178,6 +178,7 @@ If you need full functionality of any plugin, please use it directly with your p - [tptp](https://github.com/c-cube/vim-tptp) (syntax) - [twig](https://github.com/lumiliet/vim-twig) (syntax, indent, ftplugin) - [typescript](https://github.com/HerringtonDarkholme/yats.vim) (syntax, indent, compiler, ftplugin) +- [v](https://github.com/ollykel/v-vim) (syntax, indent, ftplugin) - [vala](https://github.com/arrufat/vala.vim) (syntax, indent, ftplugin) - [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax) - [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax) @@ -292,6 +292,7 @@ PACKS=" tptp:c-cube/vim-tptp twig:lumiliet/vim-twig typescript:HerringtonDarkholme/yats.vim + v:ollykel/v-vim vala:arrufat/vala.vim vbnet:vim-scripts/vbnet.vim vcl:smerrill/vcl-vim-plugin diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 128d60c3..5ab23e80 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -1473,6 +1473,14 @@ autocmd BufNewFile,BufRead *.tsx setlocal filetype=typescriptreact augroup end endif +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'v') == -1 + augroup filetypedetect + " v, from vlang.vim in ollykel/v-vim +au BufNewFile,BufRead *.v set filetype=vlang +au BufNewFile,BufRead *.v set syntax=vlang + augroup end +endif + if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vala') == -1 augroup filetypedetect " vala, from vala.vim in arrufat/vala.vim diff --git a/ftplugin/vlang.vim b/ftplugin/vlang.vim new file mode 100644 index 00000000..0aafeac5 --- /dev/null +++ b/ftplugin/vlang.vim @@ -0,0 +1,6 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'v') == -1 + +setlocal commentstring=//\ %s +setlocal makeprg=v\ % + +endif diff --git a/indent/vlang.vim b/indent/vlang.vim new file mode 100644 index 00000000..58b441f9 --- /dev/null +++ b/indent/vlang.vim @@ -0,0 +1,69 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'v') == -1 + +" Based on the Go identation file. +" +" Copyright 2011 The Go Authors. All rights reserved. +" Use of this source code is governed by a BSD-style +" license that can be found in the LICENSE file. + +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal nolisp +setlocal autoindent +setlocal indentexpr=VlangIndent(v:lnum) +setlocal indentkeys+=<:>,0=},0=) + +if exists("*VlangIndent") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +function! VlangIndent(lnum) abort + let prevlnum = prevnonblank(a:lnum-1) + if prevlnum == 0 + return 0 + endif + + let prevl = substitute(getline(prevlnum), '//.*$', '', '') + let thisl = substitute(getline(a:lnum), '//.*$', '', '') + let previ = indent(prevlnum) + + let ind = previ + + if prevl =~ '[({]\s*$' + " previous line opened a block + let ind += shiftwidth() + endif + if prevl =~# '^\s*\(case .*\|default\):$' + " previous line is part of a switch statement + let ind += shiftwidth() + endif + + if thisl =~ '^\s*[)}]' + " this line closed a block + let ind -= shiftwidth() + endif + + " Colons are tricky. + " We want to outdent if it's part of a switch ("case foo:" or "default:"). + " 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. + if thisl =~# '^\s*\(case .*\|default\):$' + let ind -= shiftwidth() + endif + + return ind +endfunction + +" restore Vi compatibility settings +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: sw=2 ts=2 et + +endif diff --git a/syntax/vlang.vim b/syntax/vlang.vim new file mode 100644 index 00000000..9d802f00 --- /dev/null +++ b/syntax/vlang.vim @@ -0,0 +1,268 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'v') == -1 + +" Vim syntax file +" Language: V +" Maintainer: Oliver Kelton (https://github.com/ollykel) +" Last Change: 2019 Jun 13 +" NOTE: largely based on go.vim, maintained by David Barnett +" see David Barnett (https://github.com/google/vim-ft-go) +" Options: +" There are some options for customizing the highlighting; the recommended +" settings are the default values, but you can write: +" let OPTION_NAME = 0 +" in your ~/.vimrc file to disable particular options. You can also write: +" let OPTION_NAME = 1 +" to enable particular options. At present, all options default to on. +" +" - g:v_highlight_array_whitespace_error +" Highlights white space after "[]". +" - g:v_highlight_chan_whitespace_error +" Highlights white space around the communications operator that don't +" follow the standard style. +" Highlights commonly used library types (io.Reader, etc.). +" - g:v_highlight_space_tab_error +" Highlights instances of tabs following spaces. +" - g:v_highlight_trailing_whitespace_error +" Highlights trailing white space. + +" Quit when a (custom) syntax file was already loaded +if exists('b:current_syntax') + finish +endif + +if !exists('g:v_highlight_array_whitespace_error') + let g:v_highlight_array_whitespace_error = 1 +endif +if !exists('g:v_highlight_chan_whitespace_error') + let g:v_highlight_chan_whitespace_error = 1 +endif +if !exists('g:v_highlight_space_tab_error') + let g:v_highlight_space_tab_error = 1 +endif +if !exists('g:v_highlight_trailing_whitespace_error') + let g:v_highlight_trailing_whitespace_error = 1 +endif +if !exists('g:v_highlight_function_calls') + let g:v_highlight_function_calls = 1 +endif +if !exists('g:v_highlight_fields') + let g:v_highlight_fields = 1 +endif + +syn case match + +syn match vDeclType "\<\(struct\|interface\)\>" + +syn keyword vDirective module import +syn keyword vDeclaration pub mut const type enum +syn region vIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match vIncluded display contained "<[^>]*>" +syn match vFlagDefinition display contained "\s\i[^\n]*" +syn match vInclude display "^\s*\zs\(%:\|#\)\s*include\>\s*["<]" contains=vIncluded +syn match vFlag display "^\s*\zs\(%:\|#\)\s*flag\>\s*[^\n]*" contains=vFlagDefinition +syn region vShebang display start=/^#!/ end=/$/ + +hi def link vDirective Statement +hi def link vDeclaration Keyword +hi def link vDeclType Keyword +hi def link vInclude Include +hi def link vFlag Include +hi def link vIncluded vString +hi def link vFlagDefinition vString +hi def link vShebang Include + +" Keywords within functions +syn keyword vStatement defer go goto return break continue fallthrough +syn keyword vConditional if else switch match or +syn keyword vLabel case default +syn keyword vRepeat for in +syn match vCodeGen /$if\>/ +syn match vCodeGen /\.fields\>/ +syn match vCodeGen /\.$\i*\>/ + +hi def link vStatement Statement +hi def link vConditional Conditional +hi def link vLabel Label +hi def link vRepeat Repeat +hi def link vCodeGen Identifier + +" Predefined types +syn keyword vType chan map bool string error voidptr +syn keyword vSignedInts int i8 i16 i32 i64 rune intptr +syn keyword vUnsignedInts byte uint u8 u16 u32 u64 byteptr +syn keyword vFloats f32 f64 floatptr +syn keyword vComplexes complex64 complex128 + +hi def link vType Type +hi def link vSignedInts Type +hi def link vUnsignedInts Type +hi def link vFloats Type +hi def link vComplexes Type + +" Treat fn specially: it's a declaration at the start of a line, but a type +" elsewhere. Order matters here. +" syn match vType /\<fn\>/ +syn match vDeclaration /\<fn\>/ +syn match vDeclaration contained /\<fn\>/ + +" Predefined functions and values +syn keyword vBuiltins assert C cap complex copy delete exit imag +syn keyword vBuiltins print println eprint eprintln print_backtrace +syn keyword vBuiltins float_calloc ok memdup range_int real recover +syn keyword vBuiltins malloc byte_calloc float_calloc +syn keyword vBuiltins isok isnil panic on_panic +syn keyword vConstants iota true false +syn match vBuiltins /\<json\.\(encode\|decode\)\>/ + +hi def link vBuiltins Keyword +hi def link vConstants Keyword + +" Comments; their contents +syn keyword vTodo contained TODO FIXME XXX BUG +syn cluster vCommentGroup contains=vTodo +syn region vComment start="/\*" end="\*/" contains=@vCommentGroup,@Spell +syn region vComment start="//" end="$" contains=@vCommentGroup,@Spell + +hi def link vComment Comment +hi def link vTodo Todo + +" Go escapes +syn match vEscapeOctal display contained "\\[0-7]\{3}" +syn match vEscapeVar display contained "\$[0-9A-Za-z\.]*" +syn match vEscapeVar display contained "\${[^}]*}" +syn match vEscapeC display contained +\\[abfnrtv\\'"]+ +syn match vEscapeX display contained "\\x\x\{2}" +syn match vEscapeU display contained "\\u\x\{4}" +syn match vEscapeBigU display contained "\\U\x\{8}" +syn match vEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+ + +hi def link vEscapeOctal vSpecialString +hi def link vEscapeVar vSpecialString +hi def link vEscapeC vSpecialString +hi def link vEscapeX vSpecialString +hi def link vEscapeU vSpecialString +hi def link vEscapeBigU vSpecialString +hi def link vSpecialString Special +hi def link vEscapeError Error + +" Strings and their contents +syn cluster vStringGroup contains=vEscapeOctal,vEscapeVar,vEscapeC,vEscapeX,vEscapeU,vEscapeBigU,vEscapeError +syn region vString start=+"+ skip=+\\\\\|\\'+ end=+"+ contains=@vStringGroup +syn region vRawString start=+`+ end=+`+ + +hi def link vString String +hi def link vRawString String + +" Characters; their contents +syn cluster vCharacterGroup contains=vEscapeOctal,vEscapeC,vEscapeVar,vEscapeX,vEscapeU,vEscapeBigU +syn region vCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@vCharacterGroup + +hi def link vCharacter Character + +" Regions +syn region vBlock start="{" end="}" transparent fold +syn region vParen start='(' end=')' transparent + +" Integers +syn match vDecimalInt "\<\d\+\([Ee]\d\+\)\?\>" +syn match vHexadecimalInt "\<0x\x\+\>" +syn match vOctalInt "\<0\o\+\>" +syn match vOctalError "\<0\o*[89]\d*\>" + +hi def link vDecimalInt Integer +hi def link vHexadecimalInt Integer +hi def link vOctalInt Integer +hi def link Integer Number + +" Floating point +syn match vFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" +syn match vFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>" +syn match vFloat "\<\d\+[Ee][-+]\d\+\>" + +hi def link vFloat Float + +" Imaginary literals +syn match vImaginary "\<\d\+i\>" +syn match vImaginary "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>" +syn match vImaginary "\<\.\d\+\([Ee][-+]\d\+\)\?i\>" +syn match vImaginary "\<\d\+[Ee][-+]\d\+i\>" + +hi def link vImaginary Number + +" Generics +syn match vGenericBrackets display contained "[<>]" +syn match vInterfaceDeclaration display "\s*\zsinterface\s*\i*\s*<[^>]*>" contains=vDeclType,vGenericBrackets +syn match vStructDeclaration display "\s*\zsstruct\s*\i*\s*<[^>]*>" contains=vDeclType,vGenericBrackets +" vFunctionName only appears when v_highlight_function_calls set +syn match vFuncDeclaration display "\s*\zsfn\s*\i*\s*<[^>]*>" contains=vFunctionName,vDeclaration,vGenericBrackets + +hi def link vGenericBrackets Identifier + +" Spaces after "[]" +if v_highlight_array_whitespace_error != 0 + syn match vSpaceError display "\(\[\]\)\@<=\s\+" +endif + +" Spacing errors around the 'chan' keyword +if v_highlight_chan_whitespace_error != 0 + " receive-only annotation on chan type + syn match vSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@=" + " send-only annotation on chan type + syn match vSpaceError display "\(\<chan\)\@<=\s\+\(<-\)\@=" + " value-ignoring receives in a few contexts + syn match vSpaceError display "\(\(^\|[={(,;]\)\s*<-\)\@<=\s\+" +endif + +" Space-tab error +if v_highlight_space_tab_error != 0 + syn match vSpaceError display " \+\t"me=e-1 +endif + +" Trailing white space error +if v_highlight_trailing_whitespace_error != 0 + syn match vSpaceError display excludenl "\s\+$" +endif + +hi def link vSpaceError Error + +" Function calls and Fields are from: https://github.com/fatih/vim-go/blob/master/syntax/go.vim +" Function calls; +if v_highlight_function_calls + syn match vFunctionCall /\w\+\ze\s*(/ contains=vBuiltins,vDeclaration + syn match vFunctionName display contained /\s\w\+/ + hi def link vFunctionName Special +endif + +hi def link vFunctionCall Special + +" Fields; +if v_highlight_fields + " 1. Match a sequence of word characters coming after a '.' + " 2. Require the following but dont match it: ( \@= see :h E59) + " - The symbols: / - + * % OR + " - The symbols: [] {} <> ) OR + " - The symbols: \n \r space OR + " - The symbols: , : . + " 3. Have the start of highlight (hs) be the start of matched + " pattern (s) offsetted one to the right (+1) (see :h E401) + syn match vField /\.\w\+\ + \%(\%([\/\-\+*%]\)\|\ + \%([\[\]{}<\>\)]\)\|\ + \%([\!=\^|&]\)\|\ + \%([\n\r\ ]\)\|\ + \%([,\:.]\)\)\@=/hs=s+1 +endif +hi def link vField Identifier + +" Search backwards for a global declaration to start processing the syntax. +"syn sync match vSync grouphere NONE /^\(const\|var\|type\|func\)\>/ + +" There's a bug in the implementation of grouphere. For now, use the +" following as a more expensive/less precise workaround. +syn sync minlines=500 + +let b:current_syntax = 'vlang' + +" vim: sw=2 sts=2 et + +endif |