summaryrefslogtreecommitdiffstats
path: root/syntax/vlang.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2019-12-07 17:39:31 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2019-12-07 17:39:31 +0100
commit4d8423c962e2b4172de48992bcfec965478f928b (patch)
treedef9075bf938101360a834f872f1e131aabfeb3e /syntax/vlang.vim
parente204a7223b4334ed1c556a4564a8048888b69fe8 (diff)
downloadvim-polyglot-4.1.3.tar.gz
vim-polyglot-4.1.3.zip
Add v language, closes #437v4.1.3
Diffstat (limited to 'syntax/vlang.vim')
-rw-r--r--syntax/vlang.vim268
1 files changed, 268 insertions, 0 deletions
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