summaryrefslogtreecommitdiffstats
path: root/syntax/vlang.vim
diff options
context:
space:
mode:
Diffstat (limited to 'syntax/vlang.vim')
-rw-r--r--syntax/vlang.vim266
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\)\>/