|
|
@ -0,0 +1,207 @@ |
|
|
|
" 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. |
|
|
|
" |
|
|
|
" 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. |
|
|
|
" |
|
|
|
" - go_highlight_array_whitespace_error |
|
|
|
" Highlights white space after "[]". |
|
|
|
" - go_highlight_chan_whitespace_error |
|
|
|
" Highlights white space around the communications operator that don't follow |
|
|
|
" the standard style. |
|
|
|
" - go_highlight_extra_types |
|
|
|
" Highlights commonly used library types (io.Reader, etc.). |
|
|
|
" - go_highlight_space_tab_error |
|
|
|
" Highlights instances of tabs following spaces. |
|
|
|
" - go_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("go_highlight_array_whitespace_error") |
|
|
|
let go_highlight_array_whitespace_error = 1 |
|
|
|
endif |
|
|
|
if !exists("go_highlight_chan_whitespace_error") |
|
|
|
let go_highlight_chan_whitespace_error = 1 |
|
|
|
endif |
|
|
|
if !exists("go_highlight_extra_types") |
|
|
|
let go_highlight_extra_types = 1 |
|
|
|
endif |
|
|
|
if !exists("go_highlight_space_tab_error") |
|
|
|
let go_highlight_space_tab_error = 1 |
|
|
|
endif |
|
|
|
if !exists("go_highlight_trailing_whitespace_error") |
|
|
|
let go_highlight_trailing_whitespace_error = 1 |
|
|
|
endif |
|
|
|
|
|
|
|
syn case match |
|
|
|
|
|
|
|
syn keyword goDirective package import |
|
|
|
syn keyword goDeclaration var const type |
|
|
|
syn keyword goDeclType struct interface |
|
|
|
|
|
|
|
hi def link goDirective Statement |
|
|
|
hi def link goDeclaration Keyword |
|
|
|
hi def link goDeclType 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 |
|
|
|
|
|
|
|
" Treat func specially: it's a declaration at the start of a line, but a type |
|
|
|
" elsewhere. Order matters here. |
|
|
|
syn match goType /\<func\>/ |
|
|
|
syn match goDeclaration /^func\>/ |
|
|
|
|
|
|
|
" 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 goConstants iota true false nil |
|
|
|
|
|
|
|
hi def link goBuiltins Keyword |
|
|
|
hi def link goConstants Keyword |
|
|
|
|
|
|
|
" Comments; their contents |
|
|
|
syn keyword goTodo contained TODO FIXME XXX BUG |
|
|
|
syn cluster goCommentGroup contains=goTodo |
|
|
|
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell |
|
|
|
syn region goComment start="//" end="$" contains=@goCommentGroup,@Spell |
|
|
|
|
|
|
|
hi def link goComment Comment |
|
|
|
hi def link goTodo Todo |
|
|
|
|
|
|
|
" 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 start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup |
|
|
|
syn region goRawString 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 start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup |
|
|
|
|
|
|
|
hi def link goCharacter Character |
|
|
|
|
|
|
|
" Regions |
|
|
|
syn region goBlock start="{" end="}" transparent fold |
|
|
|
syn region goParen start='(' end=')' transparent |
|
|
|
|
|
|
|
" Integers |
|
|
|
syn match goDecimalInt "\<\d\+\([Ee]\d\+\)\?\>" |
|
|
|
syn match goHexadecimalInt "\<0x\x\+\>" |
|
|
|
syn match goOctalInt "\<0\o\+\>" |
|
|
|
syn match goOctalError "\<0\o*[89]\d*\>" |
|
|
|
|
|
|
|
hi def link goDecimalInt Integer |
|
|
|
hi def link goHexadecimalInt Integer |
|
|
|
hi def link goOctalInt Integer |
|
|
|
hi def link Integer Number |
|
|
|
|
|
|
|
" Floating point |
|
|
|
syn match goFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" |
|
|
|
syn match goFloat "\<\.\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\+\.\d*\([Ee][-+]\d\+\)\?i\>" |
|
|
|
syn match goImaginary "\<\.\d\+\([Ee][-+]\d\+\)\?i\>" |
|
|
|
syn match goImaginary "\<\d\+[Ee][-+]\d\+i\>" |
|
|
|
|
|
|
|
hi def link goImaginary Number |
|
|
|
|
|
|
|
" Spaces after "[]" |
|
|
|
if go_highlight_array_whitespace_error != 0 |
|
|
|
syn match goSpaceError display "\(\[\]\)\@<=\s\+" |
|
|
|
endif |
|
|
|
|
|
|
|
" Spacing errors around the 'chan' keyword |
|
|
|
if go_highlight_chan_whitespace_error != 0 |
|
|
|
" receive-only annotation on chan type |
|
|
|
syn match goSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@=" |
|
|
|
" send-only annotation on chan type |
|
|
|
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 go_highlight_extra_types != 0 |
|
|
|
syn match goExtraType /\<bytes\.\(Buffer\)\>/ |
|
|
|
syn match goExtraType /\<io\.\(Reader\|Writer\|ReadWriter\|ReadWriteCloser\)\>/ |
|
|
|
syn match goExtraType /\<reflect\.\(Kind\|Type\|Value\)\>/ |
|
|
|
syn match goExtraType /\<unsafe\.Pointer\>/ |
|
|
|
endif |
|
|
|
|
|
|
|
" Space-tab error |
|
|
|
if go_highlight_space_tab_error != 0 |
|
|
|
syn match goSpaceError display " \+\t"me=e-1 |
|
|
|
endif |
|
|
|
|
|
|
|
" Trailing white space error |
|
|
|
if go_highlight_trailing_whitespace_error != 0 |
|
|
|
syn match goSpaceError display excludenl "\s\+$" |
|
|
|
endif |
|
|
|
|
|
|
|
hi def link goExtraType Type |
|
|
|
hi def link goSpaceError Error |
|
|
|
|
|
|
|
" 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" |