3 changed files with 513 additions and 128 deletions
@ -0,0 +1,430 @@
@@ -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 @@
@@ -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 @@
@@ -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