forked from aniani/vim
		
	
		
			
	
	
		
			209 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			209 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:	Go | ||
|  | " Maintainer:	David Barnett (https://github.com/google/vim-ft-go) | ||
|  | " Last Change:	2014 Aug 16 | ||
|  | 
 | ||
|  | " 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. | ||
|  | " | ||
|  | "   - g:go_highlight_array_whitespace_error | ||
|  | "     Highlights white space after "[]". | ||
|  | "   - g:go_highlight_chan_whitespace_error | ||
|  | "     Highlights white space around the communications operator that don't | ||
|  | "     follow the standard style. | ||
|  | "   - g:go_highlight_extra_types | ||
|  | "     Highlights commonly used library types (io.Reader, etc.). | ||
|  | "   - g:go_highlight_space_tab_error | ||
|  | "     Highlights instances of tabs following spaces. | ||
|  | "   - g: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('g:go_highlight_array_whitespace_error') | ||
|  |   let g:go_highlight_array_whitespace_error = 1 | ||
|  | endif | ||
|  | if !exists('g:go_highlight_chan_whitespace_error') | ||
|  |   let g:go_highlight_chan_whitespace_error = 1 | ||
|  | endif | ||
|  | if !exists('g:go_highlight_extra_types') | ||
|  |   let g:go_highlight_extra_types = 1 | ||
|  | endif | ||
|  | if !exists('g:go_highlight_space_tab_error') | ||
|  |   let g:go_highlight_space_tab_error = 1 | ||
|  | endif | ||
|  | if !exists('g:go_highlight_trailing_whitespace_error') | ||
|  |   let g: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' | ||
|  | 
 | ||
|  | " vim: sw=2 sts=2 et |