diff options
Diffstat (limited to 'syntax/vlang.vim')
-rw-r--r-- | syntax/vlang.vim | 266 |
1 files changed, 134 insertions, 132 deletions
diff --git a/syntax/vlang.vim b/syntax/vlang.vim index 9d802f00..883de7d3 100644 --- a/syntax/vlang.vim +++ b/syntax/vlang.vim @@ -51,189 +51,191 @@ 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 +syn match vDeclType "\<\(struct\|interface\|type\|enum\)\>" +syn keyword vDeclaration pub mut var const +hi def link vDeclType Keyword +hi def link vDeclaration Keyword + +syn keyword vDirective module import +hi def link vDirective Statement + +syn region vIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match vIncluded display contained "<[^>]*>" +syn match vFlagDefinition display contained "\s\i[^\n]*" +hi def link vIncluded vString +hi def link vFlagDefinition vString + +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 vInclude Include +hi def link vFlag Include +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 +syn keyword vStatement defer go goto return break continue +hi def link vStatement Statement + +syn keyword vConditional if else match or +hi def link vConditional Conditional + +syn keyword vRepeat for in +hi def link vRepeat Repeat + +syn match vCodeGen /$if\>/ +" XXX Enable when compile-time code-gen is implemented in V +" syn match vCodeGen /\.fields\>/ +" syn match vCodeGen /\.$\i*\>/ +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 +syn keyword vType chan map bool string error voidptr +syn keyword vSignedInts int i8 i16 i64 rune intptr +syn keyword vUnsignedInts byte u16 u32 u64 byteptr +syn keyword vFloats f32 f64 floatptr +" XXX Enable when complex numbers are implemented in V +" 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 +" XXX Enable when complex numbers implemented in V +" 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\>/ +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\)\>/ +syn keyword vBuiltins assert C +syn keyword vBuiltins complex exit imag +syn keyword vBuiltins print println eprint eprintln +syn keyword vBuiltins malloc copy memdup isnil +syn keyword vBuiltins panic recover +syn match vBuiltins /\<json\.\(encode\|decode\)\>/ +hi def link vBuiltins Keyword -hi def link vBuiltins Keyword -hi def link vConstants Keyword +syn keyword vConstants true false +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 +syn keyword vTodo contained TODO FIXME XXX BUG +hi def link vTodo Todo + +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 + +" V escapes +syn match vStringVar display contained +\$[0-9A-Za-z\._]*\([(][^)]*[)]\)\?+ +syn match vStringVar display contained "\${[^}]*}" +syn match vStringSpeChar display contained +\\[abfnrtv\\'"]+ +syn match vStringX display contained "\\x\x\{1,2}" +syn match vStringU display contained "\\u\x\{4}" +syn match vStringBigU display contained "\\U\x\{8}" +syn match vStringError display contained +\\[^0-7xuUabfnrtv\\'"]+ + +hi def link vStringVar Special +hi def link vStringSpeChar Special +hi def link vStringX Special +hi def link vStringU Special +hi def link vStringBigU Special +hi def link vStringError Error + +" Characters and their contents +syn cluster vCharacterGroup contains=vStringSpeChar,vStringVar,vStringX,vStringU,vStringBigU +syn region vCharacter start=+`+ end=+`+ contains=@vCharacterGroup +hi def link vCharacter Character " 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=+`+ +syn cluster vStringGroup contains=@vCharacterGroup,vStringError -hi def link vString String -hi def link vRawString String +syn region vString start=+"+ skip=+\\\\\|\\'+ end=+"+ contains=@vStringGroup +syn region vString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@vStringGroup -" Characters; their contents -syn cluster vCharacterGroup contains=vEscapeOctal,vEscapeC,vEscapeVar,vEscapeX,vEscapeU,vEscapeBigU -syn region vCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@vCharacterGroup +syn region vRawString start=+r"+ skip=+\\\\\|\\'+ end=+"+ +syn region vRawString start=+r'+ skip=+\\\\\|\\'+ end=+'+ -hi def link vCharacter Character +hi def link vString String +hi def link vRawString String " Regions -syn region vBlock start="{" end="}" transparent fold -syn region vParen start='(' end=')' transparent +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 +syn match vDecimalInt "\<\d\+\([Ee]\d\+\)\?\>" +syn match vOctalInt "\<0o\o\+\>" + +hi def link vDecimalInt 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\+\>" +syn match vFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" +syn match vFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>" +syn match vFloat "\<\d\+[Ee][-+]\d\+\>" -hi def link vFloat Float +hi def link vFloat Float +hi def link Float Number " 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 +" XXX Enable when complex numbers are implemented in V +" 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 +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 +syn match vFuncDeclaration display "\s*\zsfn\s*\i*\s*<[^>]*>" contains=vFunctionName,vDeclaration,vGenericBrackets -hi def link vGenericBrackets Identifier +hi def link vGenericBrackets Identifier " Spaces after "[]" -if v_highlight_array_whitespace_error != 0 - syn match vSpaceError display "\(\[\]\)\@<=\s\+" +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 +if v_highlight_chan_whitespace_error != 0 " receive-only annotation on chan type - syn match vSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@=" + syn match vSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@=" " send-only annotation on chan type - syn match vSpaceError display "\(\<chan\)\@<=\s\+\(<-\)\@=" + syn match vSpaceError display "\(\<chan\)\@<=\s\+\(<-\)\@=" " value-ignoring receives in a few contexts - syn match vSpaceError display "\(\(^\|[={(,;]\)\s*<-\)\@<=\s\+" + 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 +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\+$" +if v_highlight_trailing_whitespace_error != 0 + syn match vSpaceError display excludenl "\s\+$" endif -hi def link vSpaceError Error +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 + 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 +hi def link vFunctionCall Special " Fields; if v_highlight_fields @@ -245,14 +247,14 @@ if v_highlight_fields " - 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\+\ + syn match vField /\.\w\+\ \%(\%([\/\-\+*%]\)\|\ \%([\[\]{}<\>\)]\)\|\ \%([\!=\^|&]\)\|\ \%([\n\r\ ]\)\|\ \%([,\:.]\)\)\@=/hs=s+1 endif -hi def link vField Identifier +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\)\>/ |