Mercurial > vim
comparison runtime/syntax/go.vim @ 6153:1e8ebf870720
Updated runtime files.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 22 Aug 2014 19:21:47 +0200 |
parents | |
children | 84c7dc0fdcd2 |
comparison
equal
deleted
inserted
replaced
6152:9d02417f8af0 | 6153:1e8ebf870720 |
---|---|
1 " Vim syntax file | |
2 " Language: Go | |
3 " Maintainer: David Barnett (https://github.com/google/vim-ft-go) | |
4 " Last Change: 2014 Aug 16 | |
5 | |
6 " Options: | |
7 " There are some options for customizing the highlighting; the recommended | |
8 " settings are the default values, but you can write: | |
9 " let OPTION_NAME = 0 | |
10 " in your ~/.vimrc file to disable particular options. You can also write: | |
11 " let OPTION_NAME = 1 | |
12 " to enable particular options. At present, all options default to on. | |
13 " | |
14 " - g:go_highlight_array_whitespace_error | |
15 " Highlights white space after "[]". | |
16 " - g:go_highlight_chan_whitespace_error | |
17 " Highlights white space around the communications operator that don't | |
18 " follow the standard style. | |
19 " - g:go_highlight_extra_types | |
20 " Highlights commonly used library types (io.Reader, etc.). | |
21 " - g:go_highlight_space_tab_error | |
22 " Highlights instances of tabs following spaces. | |
23 " - g:go_highlight_trailing_whitespace_error | |
24 " Highlights trailing white space. | |
25 | |
26 " Quit when a (custom) syntax file was already loaded | |
27 if exists('b:current_syntax') | |
28 finish | |
29 endif | |
30 | |
31 if !exists('g:go_highlight_array_whitespace_error') | |
32 let g:go_highlight_array_whitespace_error = 1 | |
33 endif | |
34 if !exists('g:go_highlight_chan_whitespace_error') | |
35 let g:go_highlight_chan_whitespace_error = 1 | |
36 endif | |
37 if !exists('g:go_highlight_extra_types') | |
38 let g:go_highlight_extra_types = 1 | |
39 endif | |
40 if !exists('g:go_highlight_space_tab_error') | |
41 let g:go_highlight_space_tab_error = 1 | |
42 endif | |
43 if !exists('g:go_highlight_trailing_whitespace_error') | |
44 let g:go_highlight_trailing_whitespace_error = 1 | |
45 endif | |
46 | |
47 syn case match | |
48 | |
49 syn keyword goDirective package import | |
50 syn keyword goDeclaration var const type | |
51 syn keyword goDeclType struct interface | |
52 | |
53 hi def link goDirective Statement | |
54 hi def link goDeclaration Keyword | |
55 hi def link goDeclType Keyword | |
56 | |
57 " Keywords within functions | |
58 syn keyword goStatement defer go goto return break continue fallthrough | |
59 syn keyword goConditional if else switch select | |
60 syn keyword goLabel case default | |
61 syn keyword goRepeat for range | |
62 | |
63 hi def link goStatement Statement | |
64 hi def link goConditional Conditional | |
65 hi def link goLabel Label | |
66 hi def link goRepeat Repeat | |
67 | |
68 " Predefined types | |
69 syn keyword goType chan map bool string error | |
70 syn keyword goSignedInts int int8 int16 int32 int64 rune | |
71 syn keyword goUnsignedInts byte uint uint8 uint16 uint32 uint64 uintptr | |
72 syn keyword goFloats float32 float64 | |
73 syn keyword goComplexes complex64 complex128 | |
74 | |
75 hi def link goType Type | |
76 hi def link goSignedInts Type | |
77 hi def link goUnsignedInts Type | |
78 hi def link goFloats Type | |
79 hi def link goComplexes Type | |
80 | |
81 " Treat func specially: it's a declaration at the start of a line, but a type | |
82 " elsewhere. Order matters here. | |
83 syn match goType /\<func\>/ | |
84 syn match goDeclaration /^func\>/ | |
85 | |
86 " Predefined functions and values | |
87 syn keyword goBuiltins append cap close complex copy delete imag len | |
88 syn keyword goBuiltins make new panic print println real recover | |
89 syn keyword goConstants iota true false nil | |
90 | |
91 hi def link goBuiltins Keyword | |
92 hi def link goConstants Keyword | |
93 | |
94 " Comments; their contents | |
95 syn keyword goTodo contained TODO FIXME XXX BUG | |
96 syn cluster goCommentGroup contains=goTodo | |
97 syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell | |
98 syn region goComment start="//" end="$" contains=@goCommentGroup,@Spell | |
99 | |
100 hi def link goComment Comment | |
101 hi def link goTodo Todo | |
102 | |
103 " Go escapes | |
104 syn match goEscapeOctal display contained "\\[0-7]\{3}" | |
105 syn match goEscapeC display contained +\\[abfnrtv\\'"]+ | |
106 syn match goEscapeX display contained "\\x\x\{2}" | |
107 syn match goEscapeU display contained "\\u\x\{4}" | |
108 syn match goEscapeBigU display contained "\\U\x\{8}" | |
109 syn match goEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+ | |
110 | |
111 hi def link goEscapeOctal goSpecialString | |
112 hi def link goEscapeC goSpecialString | |
113 hi def link goEscapeX goSpecialString | |
114 hi def link goEscapeU goSpecialString | |
115 hi def link goEscapeBigU goSpecialString | |
116 hi def link goSpecialString Special | |
117 hi def link goEscapeError Error | |
118 | |
119 " Strings and their contents | |
120 syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError | |
121 syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup | |
122 syn region goRawString start=+`+ end=+`+ | |
123 | |
124 hi def link goString String | |
125 hi def link goRawString String | |
126 | |
127 " Characters; their contents | |
128 syn cluster goCharacterGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU | |
129 syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup | |
130 | |
131 hi def link goCharacter Character | |
132 | |
133 " Regions | |
134 syn region goBlock start="{" end="}" transparent fold | |
135 syn region goParen start='(' end=')' transparent | |
136 | |
137 " Integers | |
138 syn match goDecimalInt "\<\d\+\([Ee]\d\+\)\?\>" | |
139 syn match goHexadecimalInt "\<0x\x\+\>" | |
140 syn match goOctalInt "\<0\o\+\>" | |
141 syn match goOctalError "\<0\o*[89]\d*\>" | |
142 | |
143 hi def link goDecimalInt Integer | |
144 hi def link goHexadecimalInt Integer | |
145 hi def link goOctalInt Integer | |
146 hi def link Integer Number | |
147 | |
148 " Floating point | |
149 syn match goFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" | |
150 syn match goFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>" | |
151 syn match goFloat "\<\d\+[Ee][-+]\d\+\>" | |
152 | |
153 hi def link goFloat Float | |
154 | |
155 " Imaginary literals | |
156 syn match goImaginary "\<\d\+i\>" | |
157 syn match goImaginary "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>" | |
158 syn match goImaginary "\<\.\d\+\([Ee][-+]\d\+\)\?i\>" | |
159 syn match goImaginary "\<\d\+[Ee][-+]\d\+i\>" | |
160 | |
161 hi def link goImaginary Number | |
162 | |
163 " Spaces after "[]" | |
164 if go_highlight_array_whitespace_error != 0 | |
165 syn match goSpaceError display "\(\[\]\)\@<=\s\+" | |
166 endif | |
167 | |
168 " Spacing errors around the 'chan' keyword | |
169 if go_highlight_chan_whitespace_error != 0 | |
170 " receive-only annotation on chan type | |
171 syn match goSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@=" | |
172 " send-only annotation on chan type | |
173 syn match goSpaceError display "\(\<chan\)\@<=\s\+\(<-\)\@=" | |
174 " value-ignoring receives in a few contexts | |
175 syn match goSpaceError display "\(\(^\|[={(,;]\)\s*<-\)\@<=\s\+" | |
176 endif | |
177 | |
178 " Extra types commonly seen | |
179 if go_highlight_extra_types != 0 | |
180 syn match goExtraType /\<bytes\.\(Buffer\)\>/ | |
181 syn match goExtraType /\<io\.\(Reader\|Writer\|ReadWriter\|ReadWriteCloser\)\>/ | |
182 syn match goExtraType /\<reflect\.\(Kind\|Type\|Value\)\>/ | |
183 syn match goExtraType /\<unsafe\.Pointer\>/ | |
184 endif | |
185 | |
186 " Space-tab error | |
187 if go_highlight_space_tab_error != 0 | |
188 syn match goSpaceError display " \+\t"me=e-1 | |
189 endif | |
190 | |
191 " Trailing white space error | |
192 if go_highlight_trailing_whitespace_error != 0 | |
193 syn match goSpaceError display excludenl "\s\+$" | |
194 endif | |
195 | |
196 hi def link goExtraType Type | |
197 hi def link goSpaceError Error | |
198 | |
199 " Search backwards for a global declaration to start processing the syntax. | |
200 "syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/ | |
201 | |
202 " There's a bug in the implementation of grouphere. For now, use the | |
203 " following as a more expensive/less precise workaround. | |
204 syn sync minlines=500 | |
205 | |
206 let b:current_syntax = 'go' | |
207 | |
208 " vim: sw=2 sts=2 et |