3 changed files with 513 additions and 128 deletions
@ -0,0 +1,430 @@ |
|||||||
|
" Copyright 2009 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. |
||||||
|
" |
||||||
|
" go.vim: Vim syntax file for Go. |
||||||
|
|
||||||
|
" Quit when a (custom) syntax file was already loaded |
||||||
|
if exists("b:current_syntax") |
||||||
|
finish |
||||||
|
endif |
||||||
|
|
||||||
|
let g:go_enable_all_hl = 1 |
||||||
|
|
||||||
|
syn case match |
||||||
|
|
||||||
|
syn keyword goPackage package |
||||||
|
syn keyword goImport import contained |
||||||
|
syn keyword goVar var contained |
||||||
|
syn keyword goConst const contained |
||||||
|
|
||||||
|
hi def link goPackage Statement |
||||||
|
hi def link goImport Statement |
||||||
|
hi def link goVar Keyword |
||||||
|
hi def link goConst Keyword |
||||||
|
hi def link goDeclaration Keyword |
||||||
|
|
||||||
|
" Keywords within functions |
||||||
|
syn keyword goStatement defer go goto return break continue fallthrough |
||||||
|
syn keyword goConditional if else switch select |
||||||
|
syn keyword goLabel case default |
||||||
|
syn keyword goRepeat for range |
||||||
|
|
||||||
|
hi def link goStatement Statement |
||||||
|
hi def link goConditional Conditional |
||||||
|
hi def link goLabel Label |
||||||
|
hi def link goRepeat Repeat |
||||||
|
|
||||||
|
" Predefined types |
||||||
|
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 |
||||||
|
|
||||||
|
hi def link goType Type |
||||||
|
hi def link goSignedInts Type |
||||||
|
hi def link goUnsignedInts Type |
||||||
|
hi def link goFloats Type |
||||||
|
hi def link goComplexes Type |
||||||
|
|
||||||
|
" Predefined functions and values |
||||||
|
syn keyword goBuiltins append cap close complex copy delete imag len |
||||||
|
syn keyword goBuiltins make new panic print println real recover |
||||||
|
syn keyword goBoolean true false |
||||||
|
syn keyword goPredefinedIdentifiers nil iota |
||||||
|
|
||||||
|
hi def link goBuiltins Identifier |
||||||
|
hi def link goBoolean Boolean |
||||||
|
hi def link goPredefinedIdentifiers goBoolean |
||||||
|
|
||||||
|
" Comments; their contents |
||||||
|
syn keyword goTodo contained TODO FIXME XXX BUG |
||||||
|
syn cluster goCommentGroup contains=goTodo |
||||||
|
|
||||||
|
syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell fold |
||||||
|
syn match goComment "\v(^\s*//.*\n)+" contains=goGenerate,@goCommentGroup,@Spell fold |
||||||
|
else |
||||||
|
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell |
||||||
|
endif |
||||||
|
|
||||||
|
hi def link goComment Comment |
||||||
|
hi def link goTodo Todo |
||||||
|
|
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goGenerateVariables contained /\%(\$GOARCH\|\$GOOS\|\$GOFILE\|\$GOLINE\|\$GOPACKAGE\|\$DOLLAR\)\>/ |
||||||
|
syn region goGenerate start="^\s*//go:generate" end="$" contains=goGenerateVariables |
||||||
|
hi def link goGenerate PreProc |
||||||
|
hi def link goGenerateVariables Special |
||||||
|
endif |
||||||
|
|
||||||
|
" Go escapes |
||||||
|
syn match goEscapeOctal display contained "\\[0-7]\{3}" |
||||||
|
syn match goEscapeC display contained +\\[abfnrtv\\'"]+ |
||||||
|
syn match goEscapeX display contained "\\x\x\{2}" |
||||||
|
syn match goEscapeU display contained "\\u\x\{4}" |
||||||
|
syn match goEscapeBigU display contained "\\U\x\{8}" |
||||||
|
syn match goEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+ |
||||||
|
|
||||||
|
hi def link goEscapeOctal goSpecialString |
||||||
|
hi def link goEscapeC goSpecialString |
||||||
|
hi def link goEscapeX goSpecialString |
||||||
|
hi def link goEscapeU goSpecialString |
||||||
|
hi def link goEscapeBigU goSpecialString |
||||||
|
hi def link goSpecialString Special |
||||||
|
hi def link goEscapeError Error |
||||||
|
|
||||||
|
" Strings and their contents |
||||||
|
syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup,@Spell |
||||||
|
syn region goRawString start=+`+ end=+`+ contains=@Spell |
||||||
|
else |
||||||
|
syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup |
||||||
|
syn region goRawString start=+`+ end=+`+ |
||||||
|
endif |
||||||
|
|
||||||
|
if g:go_enable_all_hl |
||||||
|
" [n] notation is valid for specifying explicit argument indexes |
||||||
|
" 1. Match a literal % not preceded by a %. |
||||||
|
" 2. Match any number of -, #, 0, space, or + |
||||||
|
" 3. Match * or [n]* or any number or nothing before a . |
||||||
|
" 4. Match * or [n]* or any number or nothing after a . |
||||||
|
" 5. Match [n] or nothing before a verb |
||||||
|
" 6. Match a formatting verb |
||||||
|
syn match goFormatSpecifier /\ |
||||||
|
\%([^%]\%(%%\)*\)\ |
||||||
|
\@<=%[-#0 +]*\ |
||||||
|
\%(\%(\%(\[\d\+\]\)\=\*\)\|\d\+\)\=\ |
||||||
|
\%(\.\%(\%(\%(\[\d\+\]\)\=\*\)\|\d\+\)\=\)\=\ |
||||||
|
\%(\[\d\+\]\)\=[vTtbcdoqxXUeEfFgGspw]/ contained containedin=goString,goRawString |
||||||
|
hi def link goFormatSpecifier goSpecialString |
||||||
|
endif |
||||||
|
|
||||||
|
hi def link goString String |
||||||
|
hi def link goRawString String |
||||||
|
|
||||||
|
" Characters; their contents |
||||||
|
syn cluster goCharacterGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU |
||||||
|
syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup |
||||||
|
|
||||||
|
hi def link goCharacter Character |
||||||
|
|
||||||
|
" Regions |
||||||
|
syn region goParen start='(' end=')' transparent |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn region goBlock start="{" end="}" transparent fold |
||||||
|
else |
||||||
|
syn region goBlock start="{" end="}" transparent |
||||||
|
endif |
||||||
|
|
||||||
|
" import |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn region goImport start='import (' end=')' transparent fold contains=goImport,goString,goComment |
||||||
|
else |
||||||
|
syn region goImport start='import (' end=')' transparent contains=goImport,goString,goComment |
||||||
|
endif |
||||||
|
|
||||||
|
" var, const |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn region goVar start='var (' end='^\s*)$' transparent fold |
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator |
||||||
|
syn region goConst start='const (' end='^\s*)$' transparent fold |
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator |
||||||
|
else |
||||||
|
syn region goVar start='var (' end='^\s*)$' transparent |
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator |
||||||
|
syn region goConst start='const (' end='^\s*)$' transparent |
||||||
|
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar,goParamName,goParamType,goSimpleParams,goPointerOperator |
||||||
|
endif |
||||||
|
|
||||||
|
" Single-line var, const, and import. |
||||||
|
syn match goSingleDecl /\%(import\|var\|const\) [^(]\@=/ contains=goImport,goVar,goConst |
||||||
|
|
||||||
|
" Integers |
||||||
|
syn match goDecimalInt "\<-\=\(0\|[1-9]_\?\(\d\|\d\+_\?\d\+\)*\)\%([Ee][-+]\=\d\+\)\=\>" |
||||||
|
syn match goDecimalError "\<-\=\(_\(\d\+_*\)\+\|\([1-9]\d*_*\)\+__\(\d\+_*\)\+\|\([1-9]\d*_*\)\+_\+\)\%([Ee][-+]\=\d\+\)\=\>" |
||||||
|
syn match goHexadecimalInt "\<-\=0[xX]_\?\(\x\+_\?\)\+\>" |
||||||
|
syn match goHexadecimalError "\<-\=0[xX]_\?\(\x\+_\?\)*\(\([^ \t0-9A-Fa-f_)]\|__\)\S*\|_\)\>" |
||||||
|
syn match goOctalInt "\<-\=0[oO]\?_\?\(\o\+_\?\)\+\>" |
||||||
|
syn match goOctalError "\<-\=0[0-7oO_]*\(\([^ \t0-7oOxX_/)\]\}\:;]\|[oO]\{2,\}\|__\)\S*\|_\|[oOxX]\)\>" |
||||||
|
syn match goBinaryInt "\<-\=0[bB]_\?\([01]\+_\?\)\+\>" |
||||||
|
syn match goBinaryError "\<-\=0[bB]_\?[01_]*\([^ \t01_)]\S*\|__\S*\|_\)\>" |
||||||
|
|
||||||
|
hi def link goDecimalInt Integer |
||||||
|
hi def link goDecimalError Error |
||||||
|
hi def link goHexadecimalInt Integer |
||||||
|
hi def link goHexadecimalError Error |
||||||
|
hi def link goOctalInt Integer |
||||||
|
hi def link goOctalError Error |
||||||
|
hi def link goBinaryInt Integer |
||||||
|
hi def link goBinaryError Error |
||||||
|
hi def link Integer Number |
||||||
|
|
||||||
|
" Floating point |
||||||
|
syn match goFloat "\<-\=\d\+\.\d*\%([Ee][-+]\=\d\+\)\=\>" |
||||||
|
syn match goFloat "\<-\=\.\d\+\%([Ee][-+]\=\d\+\)\=\>" |
||||||
|
|
||||||
|
hi def link goFloat Float |
||||||
|
|
||||||
|
" Imaginary literals |
||||||
|
syn match goImaginary "\<-\=\d\+i\>" |
||||||
|
syn match goImaginary "\<-\=\d\+[Ee][-+]\=\d\+i\>" |
||||||
|
syn match goImaginaryFloat "\<-\=\d\+\.\d*\%([Ee][-+]\=\d\+\)\=i\>" |
||||||
|
syn match goImaginaryFloat "\<-\=\.\d\+\%([Ee][-+]\=\d\+\)\=i\>" |
||||||
|
|
||||||
|
hi def link goImaginary Number |
||||||
|
hi def link goImaginaryFloat Float |
||||||
|
|
||||||
|
" Spaces after "[]" |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goSpaceError display "\%(\[\]\)\@<=\s\+" |
||||||
|
endif |
||||||
|
|
||||||
|
" Spacing errors around the 'chan' keyword |
||||||
|
if g:go_enable_all_hl |
||||||
|
" receive-only annotation on chan type |
||||||
|
" |
||||||
|
" \(\<chan\>\)\@<!<- (only pick arrow when it doesn't come after a chan) |
||||||
|
" this prevents picking up 'chan<- chan<-' but not '<- chan' |
||||||
|
syn match goSpaceError display "\%(\%(\<chan\>\)\@<!<-\)\@<=\s\+\%(\<chan\>\)\@=" |
||||||
|
|
||||||
|
" send-only annotation on chan type |
||||||
|
" |
||||||
|
" \(<-\)\@<!\<chan\> (only pick chan when it doesn't come after an arrow) |
||||||
|
" this prevents picking up '<-chan <-chan' but not 'chan <-' |
||||||
|
syn match goSpaceError display "\%(\%(<-\)\@<!\<chan\>\)\@<=\s\+\%(<-\)\@=" |
||||||
|
|
||||||
|
" value-ignoring receives in a few contexts |
||||||
|
syn match goSpaceError display "\%(\%(^\|[={(,;]\)\s*<-\)\@<=\s\+" |
||||||
|
endif |
||||||
|
|
||||||
|
" Extra types commonly seen |
||||||
|
if g:go_enable_all_hl |
||||||
|
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 /\<reflect\.\%(Kind\|Type\|Value\)\>/ |
||||||
|
syn match goExtraType /\<unsafe\.Pointer\>/ |
||||||
|
endif |
||||||
|
|
||||||
|
" Space-tab error |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goSpaceError display " \+\t"me=e-1 |
||||||
|
endif |
||||||
|
|
||||||
|
" Trailing white space error |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goSpaceError display excludenl "\s\+$" |
||||||
|
endif |
||||||
|
|
||||||
|
hi def link goExtraType Type |
||||||
|
hi def link goSpaceError Error |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" included from: https://github.com/athom/more-colorful.vim/blob/master/after/syntax/go.vim |
||||||
|
" |
||||||
|
" Comments; their contents |
||||||
|
syn keyword goTodo contained NOTE |
||||||
|
hi def link goTodo Todo |
||||||
|
|
||||||
|
syn match goVarArgs /\.\.\./ |
||||||
|
|
||||||
|
" Operators; |
||||||
|
if g:go_enable_all_hl |
||||||
|
" match single-char operators: - + % < > ! & | ^ * = |
||||||
|
" and corresponding two-char operators: -= += %= <= >= != &= |= ^= *= == |
||||||
|
syn match goOperator /[-+%<>!&|^*=]=\?/ |
||||||
|
" match / and /= |
||||||
|
syn match goOperator /\/\%(=\|\ze[^/*]\)/ |
||||||
|
" match two-char operators: << >> &^ |
||||||
|
" and corresponding three-char operators: <<= >>= &^= |
||||||
|
syn match goOperator /\%(<<\|>>\|&^\)=\?/ |
||||||
|
" match remaining two-char operators: := && || <- ++ -- |
||||||
|
syn match goOperator /:=\|||\|<-\|++\|--/ |
||||||
|
" match ... |
||||||
|
|
||||||
|
hi def link goPointerOperator goOperator |
||||||
|
hi def link goVarArgs goOperator |
||||||
|
endif |
||||||
|
hi def link goOperator Operator |
||||||
|
|
||||||
|
" Functions; |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goDeclaration /\<func\>/ nextgroup=goReceiver,goFunction,goSimpleParams skipwhite skipnl |
||||||
|
syn match goReceiverVar /\w\+\ze\s\+\%(\w\|\*\)/ nextgroup=goPointerOperator,goReceiverType skipwhite skipnl contained |
||||||
|
syn match goPointerOperator /\*/ nextgroup=goReceiverType contained skipwhite skipnl |
||||||
|
syn match goFunction /\w\+/ nextgroup=goSimpleParams contained skipwhite skipnl |
||||||
|
syn match goReceiverType /\w\+/ contained |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goSimpleParams /(\%(\w\|\_s\|[*\.\[\],\{\}<>-]\)*)/ contained contains=goParamName,goType nextgroup=goFunctionReturn skipwhite skipnl |
||||||
|
syn match goFunctionReturn /(\%(\w\|\_s\|[*\.\[\],\{\}<>-]\)*)/ contained contains=goParamName,goType skipwhite skipnl |
||||||
|
syn match goParamName /\w\+\%(\s*,\s*\w\+\)*\ze\s\+\%(\w\|\.\|\*\|\[\)/ contained nextgroup=goParamType skipwhite skipnl |
||||||
|
syn match goParamType /\%([^,)]\|\_s\)\+,\?/ contained nextgroup=goParamName skipwhite skipnl |
||||||
|
\ contains=goVarArgs,goType,goSignedInts,goUnsignedInts,goFloats,goComplexes,goDeclType,goBlock |
||||||
|
hi def link goReceiverVar goParamName |
||||||
|
hi def link goParamName Identifier |
||||||
|
endif |
||||||
|
syn match goReceiver /(\s*\w\+\%(\s\+\*\?\s*\w\+\)\?\s*)\ze\s*\w/ contained nextgroup=goFunction contains=goReceiverVar skipwhite skipnl |
||||||
|
else |
||||||
|
syn keyword goDeclaration func |
||||||
|
endif |
||||||
|
hi def link goFunction Function |
||||||
|
|
||||||
|
" Function calls; |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goFunctionCall /\w\+\ze(/ contains=goBuiltins,goDeclaration |
||||||
|
endif |
||||||
|
hi def link goFunctionCall Type |
||||||
|
|
||||||
|
" Fields; |
||||||
|
if g:go_enable_all_hl |
||||||
|
" 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 goField /\.\w\+\ |
||||||
|
\%(\%([\/\-\+*%]\)\|\ |
||||||
|
\%([\[\]{}<\>\)]\)\|\ |
||||||
|
\%([\!=\^|&]\)\|\ |
||||||
|
\%([\n\r\ ]\)\|\ |
||||||
|
\%([,\:.]\)\)\@=/hs=s+1 |
||||||
|
endif |
||||||
|
hi def link goField Identifier |
||||||
|
|
||||||
|
" Structs & Interfaces; |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goTypeConstructor /\<\w\+{\@=/ |
||||||
|
syn match goTypeDecl /\<type\>/ nextgroup=goTypeName skipwhite skipnl |
||||||
|
syn match goTypeName /\w\+/ contained nextgroup=goDeclType skipwhite skipnl |
||||||
|
syn match goDeclType /\<\%(interface\|struct\)\>/ skipwhite skipnl |
||||||
|
hi def link goReceiverType Type |
||||||
|
else |
||||||
|
syn keyword goDeclType struct interface |
||||||
|
syn keyword goDeclaration type |
||||||
|
endif |
||||||
|
hi def link goTypeConstructor Type |
||||||
|
hi def link goTypeName Type |
||||||
|
hi def link goTypeDecl Keyword |
||||||
|
hi def link goDeclType Keyword |
||||||
|
|
||||||
|
" Variable Assignments |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goVarAssign /\v[_.[:alnum:]]+(,\s*[_.[:alnum:]]+)*\ze(\s*([-^+|^\/%&]|\*|\<\<|\>\>|\&\^)?\=[^=])/ |
||||||
|
hi def link goVarAssign Special |
||||||
|
endif |
||||||
|
|
||||||
|
" Variable Declarations |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goVarDefs /\v\w+(,\s*\w+)*\ze(\s*:\=)/ |
||||||
|
hi def link goVarDefs Special |
||||||
|
endif |
||||||
|
|
||||||
|
" Build Constraints |
||||||
|
if g:go_enable_all_hl |
||||||
|
syn match goBuildKeyword display contained "+build" |
||||||
|
" Highlight the known values of GOOS, GOARCH, and other +build options. |
||||||
|
syn keyword goBuildDirectives contained |
||||||
|
\ android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 |
||||||
|
\ solaris windows 386 amd64 amd64p32 arm armbe arm64 arm64be ppc64 |
||||||
|
\ ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc |
||||||
|
\ s390 s390x sparc sparc64 cgo ignore race |
||||||
|
|
||||||
|
" Other words in the build directive are build tags not listed above, so |
||||||
|
" avoid highlighting them as comments by using a matchgroup just for the |
||||||
|
" start of the comment. |
||||||
|
" The rs=s+2 option lets the \s*+build portion be part of the inner region |
||||||
|
" instead of the matchgroup so it will be highlighted as a goBuildKeyword. |
||||||
|
syn region goBuildComment matchgroup=goBuildCommentStart |
||||||
|
\ start="//\s*+build\s"rs=s+2 end="$" |
||||||
|
\ contains=goBuildKeyword,goBuildDirectives |
||||||
|
hi def link goBuildCommentStart Comment |
||||||
|
hi def link goBuildDirectives Type |
||||||
|
hi def link goBuildKeyword PreProc |
||||||
|
endif |
||||||
|
|
||||||
|
" :GoCoverage commands |
||||||
|
hi def link goCoverageNormalText Comment |
||||||
|
|
||||||
|
function! s:hi() |
||||||
|
hi def link goSameId Search |
||||||
|
hi def link goDiagnosticError SpellBad |
||||||
|
hi def link goDiagnosticWarning SpellRare |
||||||
|
|
||||||
|
" TODO(bc): is it appropriate to define text properties in a syntax file? |
||||||
|
" The highlight groups need to be defined before the text properties types |
||||||
|
" are added, and when users have syntax enabled in their vimrc after |
||||||
|
" filetype plugin on, the highlight groups won't be defined when |
||||||
|
" ftplugin/go.vim is executed when the first go file is opened. |
||||||
|
" See https://github.com/fatih/vim-go/issues/2658. |
||||||
|
if has('textprop') |
||||||
|
if empty(prop_type_get('goSameId')) |
||||||
|
call prop_type_add('goSameId', {'highlight': 'goSameId'}) |
||||||
|
endif |
||||||
|
if empty(prop_type_get('goDiagnosticError')) |
||||||
|
call prop_type_add('goDiagnosticError', {'highlight': 'goDiagnosticError'}) |
||||||
|
endif |
||||||
|
if empty(prop_type_get('goDiagnosticWarning')) |
||||||
|
call prop_type_add('goDiagnosticWarning', {'highlight': 'goDiagnosticWarning'}) |
||||||
|
endif |
||||||
|
endif |
||||||
|
|
||||||
|
hi def link goDeclsFzfKeyword Keyword |
||||||
|
hi def link goDeclsFzfFunction Function |
||||||
|
hi def link goDeclsFzfSpecialComment SpecialComment |
||||||
|
hi def link goDeclsFzfComment Comment |
||||||
|
|
||||||
|
" :GoCoverage commands |
||||||
|
hi def goCoverageCovered ctermfg=green guifg=#A6E22E |
||||||
|
hi def goCoverageUncover ctermfg=red guifg=#F92672 |
||||||
|
|
||||||
|
" :GoDebug commands |
||||||
|
if g:go_enable_all_hl |
||||||
|
hi def GoDebugBreakpoint term=standout ctermbg=117 ctermfg=0 guibg=#BAD4F5 guifg=Black |
||||||
|
hi def GoDebugCurrent term=reverse ctermbg=12 ctermfg=7 guibg=DarkBlue guifg=White |
||||||
|
endif |
||||||
|
endfunction |
||||||
|
|
||||||
|
augroup vim-go-hi |
||||||
|
autocmd! |
||||||
|
autocmd ColorScheme * call s:hi() |
||||||
|
augroup end |
||||||
|
call s:hi() |
||||||
|
|
||||||
|
" Search backwards for a global declaration to start processing the syntax. |
||||||
|
"syn sync match goSync 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 = "go" |
||||||
|
|
||||||
|
" vim: sw=2 ts=2 et |
@ -0,0 +1,83 @@ |
|||||||
|
" 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. |
||||||
|
" |
||||||
|
" gotexttmpl.vim: Vim syntax file for Go templates. |
||||||
|
|
||||||
|
" Quit when a (custom) syntax file was already loaded |
||||||
|
if exists("b:current_syntax") |
||||||
|
finish |
||||||
|
endif |
||||||
|
|
||||||
|
syn case match |
||||||
|
|
||||||
|
" Go escapes |
||||||
|
syn match goEscapeOctal display contained "\\[0-7]\{3}" |
||||||
|
syn match goEscapeC display contained +\\[abfnrtv\\'"]+ |
||||||
|
syn match goEscapeX display contained "\\x\x\{2}" |
||||||
|
syn match goEscapeU display contained "\\u\x\{4}" |
||||||
|
syn match goEscapeBigU display contained "\\U\x\{8}" |
||||||
|
syn match goEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+ |
||||||
|
|
||||||
|
hi def link goEscapeOctal goSpecialString |
||||||
|
hi def link goEscapeC goSpecialString |
||||||
|
hi def link goEscapeX goSpecialString |
||||||
|
hi def link goEscapeU goSpecialString |
||||||
|
hi def link goEscapeBigU goSpecialString |
||||||
|
hi def link goSpecialString Special |
||||||
|
hi def link goEscapeError Error |
||||||
|
|
||||||
|
" Strings and their contents |
||||||
|
syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError |
||||||
|
syn region goString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup |
||||||
|
syn region goRawString contained start=+`+ end=+`+ |
||||||
|
|
||||||
|
hi def link goString String |
||||||
|
hi def link goRawString String |
||||||
|
|
||||||
|
" Characters; their contents |
||||||
|
syn cluster goCharacterGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU |
||||||
|
syn region goCharacter contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup |
||||||
|
|
||||||
|
hi def link goCharacter Character |
||||||
|
|
||||||
|
" Integers |
||||||
|
syn match goDecimalInt contained "\<\d\+\([Ee]\d\+\)\?\>" |
||||||
|
syn match goHexadecimalInt contained "\<0x\x\+\>" |
||||||
|
syn match goOctalInt contained "\<0\o\+\>" |
||||||
|
syn match goOctalError contained "\<0\o*[89]\d*\>" |
||||||
|
syn cluster goInt contains=goDecimalInt,goHexadecimalInt,goOctalInt |
||||||
|
" Floating point |
||||||
|
syn match goFloat contained "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" |
||||||
|
syn match goFloat contained "\<\.\d\+\([Ee][-+]\d\+\)\?\>" |
||||||
|
syn match goFloat contained "\<\d\+[Ee][-+]\d\+\>" |
||||||
|
" Imaginary literals |
||||||
|
syn match goImaginary contained "\<\d\+i\>" |
||||||
|
syn match goImaginary contained "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>" |
||||||
|
syn match goImaginary contained "\<\.\d\+\([Ee][-+]\d\+\)\?i\>" |
||||||
|
syn match goImaginary contained "\<\d\+[Ee][-+]\d\+i\>" |
||||||
|
|
||||||
|
hi def link goInt Number |
||||||
|
hi def link goFloat Number |
||||||
|
hi def link goImaginary Number |
||||||
|
|
||||||
|
" Token groups |
||||||
|
syn cluster gotplLiteral contains=goString,goRawString,goCharacter,@goInt,goFloat,goImaginary |
||||||
|
syn keyword gotplControl contained if else end range with template |
||||||
|
syn keyword gotplFunctions contained and html index js len not or print printf println urlquery eq ne lt le gt ge |
||||||
|
syn match gotplVariable contained /\$[a-zA-Z0-9_]*\>/ |
||||||
|
syn match goTplIdentifier contained /\.[^[:blank:]}]\+\>/ |
||||||
|
|
||||||
|
hi def link gotplControl Keyword |
||||||
|
hi def link gotplFunctions Function |
||||||
|
hi def link goTplVariable Special |
||||||
|
|
||||||
|
syn region gotplAction start="{{" end="}}" contains=@gotplLiteral,gotplControl,gotplFunctions,gotplVariable,goTplIdentifier display |
||||||
|
syn region goTplComment start="{{\(- \)\?/\*" end="\*/\( -\)\?}}" display |
||||||
|
|
||||||
|
hi def link gotplAction PreProc |
||||||
|
hi def link goTplComment Comment |
||||||
|
|
||||||
|
let b:current_syntax = "gotexttmpl" |
||||||
|
|
||||||
|
" vim: sw=2 ts=2 et |
@ -1,128 +0,0 @@ |
|||||||
" Vim syntax file |
|
||||||
" Language: Terraform (http://terraform.io) |
|
||||||
" Maintainer: Larry Gilbert <larry@L2G.to> |
|
||||||
" Last Change: 2014-08-09 |
|
||||||
" |
|
||||||
" Thanks to OpenLogic for their syntax-highlighting primer |
|
||||||
" (http://www.openlogic.com/wazi/bid/188101/Create-Your-Own-Syntax- |
|
||||||
" Highlighting-in-Vim) |
|
||||||
|
|
||||||
" |
|
||||||
" ++ jgerry/terraform-vim-folding |
|
||||||
" |
|
||||||
|
|
||||||
if exists("b:current_syntax") |
|
||||||
finish |
|
||||||
endif |
|
||||||
|
|
||||||
syn case match |
|
||||||
|
|
||||||
syn keyword terraSection connection output provider variable |
|
||||||
syn keyword terraValueBool true false on off yes no |
|
||||||
|
|
||||||
""" resource |
|
||||||
|
|
||||||
" find . -name "resource_*.go" -not -name "resource_*_test.go" -not -name "resource_provider.go" | sed 's/.*\/resource_//; s/\.go$//' |
|
||||||
syn keyword terraResourceTypeBI |
|
||||||
\ aws_autoscaling_group aws_security_group |
|
||||||
\ aws_db_instance aws_subnet |
|
||||||
\ aws_db_security_group aws_vpc |
|
||||||
\ aws_eip cloudflare_record |
|
||||||
\ aws_elb consul_keys |
|
||||||
\ aws_instance digitalocean_domain |
|
||||||
\ aws_internet_gateway digitalocean_droplet |
|
||||||
\ aws_launch_configuration digitalocean_record |
|
||||||
\ aws_route53_record dnsimple_record |
|
||||||
\ aws_route53_zone heroku_addon |
|
||||||
\ aws_route_table heroku_app |
|
||||||
\ aws_route_table_association heroku_domain |
|
||||||
\ aws_s3_bucket heroku_drain |
|
||||||
\ |
|
||||||
\ contained |
|
||||||
|
|
||||||
syn match terraResource /resource/ nextgroup=terraResourceTypeStr skipwhite |
|
||||||
syn region terraResourceTypeStr start=/"/ end=/"/ contains=terraResourceTypeBI |
|
||||||
\ nextgroup=terraResourceName skipwhite |
|
||||||
syn region terraResourceName start=/"/ end=/"/ |
|
||||||
\ nextgroup=terraResourceBlock skipwhite |
|
||||||
syn region terraResourceBlock start=/{/ end=/}/ fold |
|
||||||
\ contains=@terraConfigItem |
|
||||||
|
|
||||||
""" provider |
|
||||||
syn match terraProvider /provider/ nextgroup=terraProviderName skipwhite |
|
||||||
syn region terraProviderName start=/"/ end=/"/ nextgroup=terraProviderBlock skipwhite |
|
||||||
syn region terraProviderBlock start=/{/ end=/}/ fold contains=@terraConfigItem |
|
||||||
|
|
||||||
""" misc. |
|
||||||
|
|
||||||
syn match terraCommentSingle "#.*$" |
|
||||||
syn match terraAssignment "\<[a-z][a-z0-9_-]*\>" contained skipwhite |
|
||||||
\ nextgroup=terraAssignmentOp |
|
||||||
syn match terraAssignmentOp "=" nextgroup=@terraValue skipwhite |
|
||||||
syn match terraValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>" |
|
||||||
syn match terraValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>" |
|
||||||
|
|
||||||
syn region terraCommentMulti start=/\/\*/ end=/\*\// |
|
||||||
syn region terraValueString start=/"/ end=/"/ contains=terraStringInterp |
|
||||||
syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contained |
|
||||||
|
|
||||||
syn cluster terraConfigItem contains=terraAssignment |
|
||||||
syn cluster terraBlock contains=terraProviderBlock,terraResourceBlock |
|
||||||
syn cluster terraValue contains=terraValueBool,terraValueDec, |
|
||||||
\terraValueHexaDec,terraValueString |
|
||||||
|
|
||||||
highlight link terraCommentMulti Comment |
|
||||||
highlight link terraCommentSingle Comment |
|
||||||
highlight link terraAssignment Identifier |
|
||||||
highlight link terraAssignmentOp Operator |
|
||||||
highlight link terraBrackets Operator |
|
||||||
highlight link terraProvider Structure |
|
||||||
highlight link terraProviderBlock Delimiter |
|
||||||
highlight link terraProviderName String |
|
||||||
highlight link terraResource Structure |
|
||||||
highlight link terraResourceBlock Delimiter |
|
||||||
highlight link terraResourceName String |
|
||||||
highlight link terraResourceTypeBI Tag |
|
||||||
highlight link terraResourceTypeStr String |
|
||||||
highlight link terraSection Structure |
|
||||||
highlight link terraStringInterp Identifier |
|
||||||
highlight link terraValueBool Boolean |
|
||||||
highlight link terraValueDec Number |
|
||||||
highlight link terraValueHexaDec Number |
|
||||||
highlight link terraValueString String |
|
||||||
|
|
||||||
function! TerraformFolds() |
|
||||||
let thisline = getline(v:lnum) |
|
||||||
if match(thisline, '^resource') >= 0 |
|
||||||
return ">1" |
|
||||||
elseif match(thisline, '^provider') >= 0 |
|
||||||
return ">1" |
|
||||||
elseif match(thisline, '^module') >= 0 |
|
||||||
return ">1" |
|
||||||
elseif match(thisline, '^variable') >= 0 |
|
||||||
return ">1" |
|
||||||
elseif match(thisline, '^output') >= 0 |
|
||||||
return ">1" |
|
||||||
elseif match(thisline, '^data') >= 0 |
|
||||||
return ">1" |
|
||||||
elseif match(thisline, '^locals') >= 0 |
|
||||||
return ">1" |
|
||||||
elseif match(thisline, '^terraform') >= 0 |
|
||||||
return ">1" |
|
||||||
else |
|
||||||
return "=" |
|
||||||
endif |
|
||||||
endfunction |
|
||||||
setlocal foldmethod=expr |
|
||||||
setlocal foldexpr=TerraformFolds() |
|
||||||
setlocal foldlevel=0 |
|
||||||
|
|
||||||
function! TerraformFoldText() |
|
||||||
let foldsize = (v:foldend-v:foldstart) |
|
||||||
return getline(v:foldstart).' ('.foldsize.' lines)' |
|
||||||
endfunction |
|
||||||
setlocal foldtext=TerraformFoldText() |
|
||||||
|
|
||||||
setlocal noexpandtab shiftwidth=2 indentexpr= |
|
||||||
|
|
||||||
let b:current_syntax = "terraform" |
|
Loading…
Reference in new issue