7
|
1 " Vim syntax file
|
14372
|
2 " Language: C#
|
|
3 " Maintainer: Nick Jensen <nickspoon@gmail.com>
|
|
4 " Former Maintainers: Anduin Withers <awithers@anduin.com>
|
|
5 " Johannes Zellner <johannes@zellner.org>
|
29104
|
6 " Last Change: 2022-03-01
|
14372
|
7 " Filenames: *.cs
|
|
8 " License: Vim (see :h license)
|
|
9 " Repository: https://github.com/nickspoons/vim-cs
|
7
|
10 "
|
29104
|
11 " References:
|
|
12 " - ECMA-334 5th Edition: C# Language Specification
|
|
13 " https://www.ecma-international.org/publications-and-standards/standards/ecma-334/
|
|
14 " - C# Language Design: Draft 6th Edition and later proposals
|
|
15 " https://github.com/dotnet/csharplang
|
7
|
16
|
15131
|
17 if exists('b:current_syntax')
|
|
18 finish
|
7
|
19 endif
|
|
20
|
15131
|
21 let s:save_cpo = &cpoptions
|
|
22 set cpoptions&vim
|
7
|
23
|
14372
|
24 syn keyword csType bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic
|
29104
|
25 syn keyword csType nint nuint " contextual
|
|
26
|
|
27 syn keyword csStorage enum interface namespace struct
|
|
28 syn match csStorage "\<delegate\>"
|
14372
|
29 syn keyword csRepeat break continue do for foreach goto return while
|
|
30 syn keyword csConditional else if switch
|
|
31 syn keyword csLabel case default
|
29104
|
32
|
|
33 syn match csNamespaceAlias "@\=\h\w*\ze\_s*::" display
|
|
34 syn match csGlobalNamespaceAlias "global\ze\_s*::" display
|
|
35 syn cluster csNamespaceAlias contains=csGlobalNamespaceAlias,csNamespaceAlias,csNamespaceAliasQualifier
|
|
36
|
|
37 " user labels
|
23047
|
38 syn match csLabel display +^\s*\I\i*\s*:\%([^:]\)\@=+
|
29104
|
39
|
|
40 " Function pointers
|
|
41 syn match csType "\<delegate\s*\*" contains=csOpSymbols nextgroup=csManagedModifier skipwhite skipempty
|
|
42 syn keyword csManagedModifier managed unmanaged contained
|
|
43
|
|
44 " Modifiers
|
|
45 syn match csUsingModifier "\<global\ze\_s\+using\>"
|
|
46 syn keyword csAccessModifier internal private protected public
|
|
47 " TODO: in new out
|
|
48 syn keyword csModifier abstract const event override readonly sealed static virtual volatile
|
|
49 syn match csModifier "\<\%(extern\|fixed\|unsafe\)\>"
|
|
50 syn match csModifier "\<partial\ze\_s\+\%(class\|struct\|interface\|record\|void\)\>"
|
|
51
|
14372
|
52 syn keyword csException try catch finally throw when
|
29104
|
53 syn keyword csLinq ascending by descending equals from group in into join let on orderby select
|
|
54 syn match csLinq "\<where\>"
|
|
55
|
|
56 " Type parameter constraint clause
|
|
57 syn match csStorage "\<where\>\ze\_s\+@\=\h\w*\_s*:"
|
|
58
|
|
59 " Async
|
|
60 syn keyword csAsyncModifier async
|
|
61 syn keyword csAsyncOperator await
|
|
62
|
|
63 syn match csStorage "\<extern\ze\s\+alias\>"
|
|
64 syn match csStorage "\%(\<extern\s\+\)\@16<=alias\>"
|
7
|
65
|
29104
|
66 syn match csStatement "\<\%(checked\|unchecked\|unsafe\)\ze\_s*{"
|
|
67 syn match csStatement "\<fixed\ze\_s*("
|
|
68 syn keyword csStatement lock
|
|
69 syn match csStatement "\<yield\ze\_s\+\%(return\|break\)\>"
|
|
70
|
|
71 syn match csAccessor "\<\%(get\|set\|init\|add\|remove\)\ze\_s*\%([;{]\|=>\)"
|
|
72
|
|
73 syn keyword csAccess base
|
|
74 syn match csAccess "\<this\>"
|
|
75
|
|
76 " Extension method parameter modifier
|
|
77 syn match csModifier "\<this\ze\_s\+@\=\h"
|
|
78
|
|
79 syn keyword csUnspecifiedStatement as in is nameof operator out params ref sizeof stackalloc using
|
|
80 syn keyword csUnsupportedStatement value
|
14372
|
81 syn keyword csUnspecifiedKeyword explicit implicit
|
7
|
82
|
15131
|
83 " Operators
|
29104
|
84 syn keyword csTypeOf typeof nextgroup=csTypeOfOperand,csTypeOfError skipwhite skipempty
|
|
85 syn region csTypeOfOperand matchgroup=csParens start="(" end=")" contained contains=csType
|
|
86 syn match csTypeOfError "[^([:space:]]" contained
|
|
87 syn match csKeywordOperator "\<\%(checked\|unchecked\)\ze\_s*("
|
15131
|
88
|
14372
|
89 " Punctuation
|
29104
|
90 syn match csBraces "[{}[\]]" display
|
14372
|
91 syn match csParens "[()]" display
|
17667
|
92 syn match csOpSymbols "+\{1,2}" display
|
|
93 syn match csOpSymbols "-\{1,2}" display
|
|
94 syn match csOpSymbols "=\{1,2}" display
|
|
95 syn match csOpSymbols ">\{1,2}" display
|
|
96 syn match csOpSymbols "<\{1,2}" display
|
14372
|
97 syn match csOpSymbols "[!><+\-*/]=" display
|
|
98 syn match csOpSymbols "[!*/^]" display
|
|
99 syn match csOpSymbols "=>" display
|
|
100 syn match csEndColon ";" display
|
|
101 syn match csLogicSymbols "&&" display
|
|
102 syn match csLogicSymbols "||" display
|
|
103 syn match csLogicSymbols "?" display
|
|
104 syn match csLogicSymbols ":" display
|
29104
|
105 syn match csNamespaceAliasQualifier "::" display
|
7
|
106
|
17667
|
107 " Generics
|
29104
|
108 syn region csGeneric matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,@csNamespaceAlias,csUserType,csUserIdentifier,csUserInterface,csUserMethod
|
17667
|
109
|
7
|
110 " Comments
|
|
111 "
|
|
112 " PROVIDES: @csCommentHook
|
14372
|
113 syn keyword csTodo contained TODO FIXME XXX NOTE HACK TBD
|
29104
|
114 syn region csBlockComment start="/\*" end="\*/" contains=@csCommentHook,csTodo,@Spell
|
|
115 syn match csLineComment "//.*$" contains=@csCommentHook,csTodo,@Spell
|
|
116 syn cluster csComment contains=csLineComment,csBlockComment
|
|
117
|
|
118 syn region csSummary start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend
|
|
119
|
|
120 " xml markup inside '///' and /**...*/ comments
|
|
121 syn cluster xmlRegionHook add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
|
|
122 syn cluster xmlCdataHook add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
|
|
123 syn cluster xmlStartTagHook add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
|
|
124 syn cluster xmlTagHook add=csXmlTag
|
|
125 syn cluster xmlAttribHook add=csXmlAttrib
|
7
|
126
|
29104
|
127 " https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/xmldoc/recommended-tags
|
|
128 syn keyword csXmlTag contained summary remarks
|
|
129 syn keyword csXmlTag contained returns param paramref exception value
|
|
130 syn keyword csXmlTag contained para list c code example
|
|
131 syn keyword csXmlTag contained inheritdoc include
|
|
132 syn keyword csXmlTag contained see seealso
|
|
133 syn keyword csXmlTag contained typeparam typeparamref
|
|
134 syn keyword csXmlTag contained b i u br a
|
|
135 syn keyword csXmlAttrib contained cref href
|
7
|
136
|
29104
|
137 syn match csXmlLineCommentLeader "///" contained
|
|
138 syn match csXmlLineComment "///.*$" contains=csXmlLineCommentLeader,@csXml,@Spell keepend
|
|
139 syn match csXmlBlockCommentMiddle "^\s*\zs\*" contained
|
|
140 syn region csXmlBlockComment start="/\*\*" end="\*/" contains=@csXml,@Spell,csXmlBlockCommentMiddle keepend
|
14372
|
141 syn include @csXml syntax/xml.vim
|
|
142 hi def link xmlRegion Comment
|
7
|
143
|
19303
|
144 " Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here.
|
|
145 syn spell default
|
7
|
146
|
29104
|
147 " Pre-processing directives
|
|
148 syn region csPreProcDeclaration start="^\s*\zs#\s*\%(define\|undef\)\>" end="$" contains=csLineComment keepend
|
|
149 syn region csPreProcConditional start="^\s*\zs#\s*\%(if\|elif\)\>" end="$" contains=csLineComment keepend
|
|
150 syn region csPreProcConditional start="^\s*\zs#\s*\%(else\|endif\)\>" end="$" contains=csLineComment keepend
|
|
151 syn region csPreProcLine start="^\s*\zs#\s*line\>" end="$" contains=csLineComment keepend
|
|
152 syn region csPreProcDiagnostic start="^\s*\zs#\s*\%(error\|warning\)\>" end="$"
|
|
153 syn region csPreProcConditionalSection matchgroup=csPreProcRegion start="^\s*#\s*region\>.*" end="^\s*#\s*endregion\>.*" transparent fold contains=TOP
|
|
154 syn region csPreProcPragma start="^\s*\zs#\s*pragma\>" end="$" contains=csLineComment keepend
|
|
155 syn region csPreProcNullable start="^\s*\zs#\s*nullable\>" end="$" contains=csLineComment keepend
|
7
|
156
|
29104
|
157 if expand('%:e') == 'csx' || getline('1') =~ '^#!.*\<dotnet-script\>'
|
|
158 syn region csPreProcInclude start="^\s*\zs#\s*\%(load\|r\)\>" end="$" contains=csLineComment keepend
|
|
159 syn match csShebang "\%^#!.*" display
|
|
160 endif
|
7
|
161
|
29104
|
162 syn cluster csPreProcessor contains=csPreProc.*
|
|
163
|
|
164 syn region csClassType start="\<class\>"hs=s+6 end=">" end="[:{]"me=e-1 contains=csClass
|
17667
|
165 " csUserType may be defined by user scripts/plugins - it should be contained in csNewType
|
29104
|
166 syn region csNewType start="\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,@csNamespaceAlias,csUserType
|
14372
|
167 syn region csIsType start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
|
|
168 syn region csIsType start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
|
|
169 syn keyword csNew new contained
|
|
170 syn keyword csClass class contained
|
|
171 syn keyword csIsAs is as
|
7
|
172
|
29104
|
173 syn keyword csBoolean false true
|
|
174 syn keyword csNull null
|
|
175
|
7
|
176 " Strings and constants
|
14372
|
177 syn match csSpecialError "\\." contained
|
|
178 syn match csSpecialCharError "[^']" contained
|
29104
|
179 " Character literals
|
|
180 syn match csSpecialChar +\\["\\'0abfnrtv]+ contained display
|
|
181 syn match csUnicodeNumber +\\x\x\{1,4}+ contained contains=csUnicodeSpecifier display
|
14372
|
182 syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display
|
29104
|
183 syn match csUnicodeNumber +\\U00\x\{6}+ contained contains=csUnicodeSpecifier display
|
|
184 syn match csUnicodeSpecifier +\\[uUx]+ contained display
|
14372
|
185
|
|
186 syn region csString matchgroup=csQuote start=+"+ end=+"+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
|
23047
|
187 syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display
|
14372
|
188 syn match csCharacter "'\\''" contains=csSpecialChar display
|
|
189 syn match csCharacter "'[^\\]'" display
|
29104
|
190
|
|
191 " Numbers
|
|
192 syn case ignore
|
|
193 syn match csInteger "\<0b[01_]*[01]\%([lu]\|lu\|ul\)\=\>" display
|
|
194 syn match csInteger "\<\d\+\%(_\+\d\+\)*\%([lu]\|lu\|ul\)\=\>" display
|
|
195 syn match csInteger "\<0x[[:xdigit:]_]*\x\%([lu]\|lu\|ul\)\=\>" display
|
|
196 syn match csReal "\<\d\+\%(_\+\d\+\)*\.\d\+\%(_\+\d\+\)*\%\(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=" display
|
|
197 syn match csReal "\.\d\+\%(_\+\d\+\)*\%(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=\>" display
|
|
198 syn match csReal "\<\d\+\%(_\+\d\+\)*e[-+]\=\d\+\%(_\+\d\+\)*[fdm]\=\>" display
|
|
199 syn match csReal "\<\d\+\%(_\+\d\+\)*[fdm]\>" display
|
|
200 syn case match
|
|
201 syn cluster csNumber contains=csInteger,csReal
|
14372
|
202
|
23047
|
203 syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
|
14372
|
204
|
23047
|
205 syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat
|
14372
|
206 syn match csEscapedInterpolation "{{" transparent contains=NONE display
|
|
207 syn match csEscapedInterpolation "}}" transparent contains=NONE display
|
29104
|
208 syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=@csNumber,csBoolean,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display
|
14372
|
209 syn match csInterpolationFormat +:[^}]\+}+ contained contains=csInterpolationFormatDel display
|
|
210 syn match csInterpolationAlignDel +,+ contained display
|
|
211 syn match csInterpolationFormatDel +:+ contained display
|
|
212
|
|
213 syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"+ skip=+""+ extend contains=csVerbatimQuote,@Spell
|
|
214 syn match csVerbatimQuote +""+ contained
|
29104
|
215
|
|
216 syn region csInterVerbString matchgroup=csQuote start=+$@"+ start=+@$"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell
|
14372
|
217
|
29104
|
218 syn cluster csString contains=csString,csInterpolatedString,csVerbatimString,csInterVerbString
|
|
219
|
|
220 syn cluster csLiteral contains=csBoolean,@csNumber,csCharacter,@csString,csNull
|
14372
|
221
|
23047
|
222 syn region csBracketed matchgroup=csParens start=+(+ end=+)+ extend contained transparent contains=@csAll,csBraced,csBracketed
|
|
223 syn region csBraced matchgroup=csParens start=+{+ end=+}+ extend contained transparent contains=@csAll,csBraced,csBracketed
|
14372
|
224
|
29104
|
225 syn cluster csAll contains=@csLiteral,csClassType,@csComment,csEndColon,csIsType,csLabel,csLogicSymbols,csNewType,csOpSymbols,csParens,@csPreProcessor,csSummary,@csNamespaceAlias,csType,csUnicodeNumber,csUserType,csUserIdentifier,csUserInterface,csUserMethod
|
|
226
|
|
227 " Keyword identifiers
|
|
228 syn match csIdentifier "@\h\w*"
|
7
|
229
|
|
230 " The default highlighting.
|
29104
|
231 hi def link csUnspecifiedStatement Statement
|
|
232 hi def link csUnsupportedStatement Statement
|
|
233 hi def link csUnspecifiedKeyword Keyword
|
|
234
|
|
235 hi def link csGlobalNamespaceAlias Include
|
|
236
|
14372
|
237 hi def link csType Type
|
|
238 hi def link csClassType Type
|
|
239 hi def link csIsType Type
|
29104
|
240
|
15131
|
241 hi def link csStorage Structure
|
|
242 hi def link csClass Structure
|
29104
|
243 hi def link csNew Statement
|
|
244 hi def link csIsAs Keyword
|
|
245 hi def link csAccessor Keyword
|
|
246 hi def link csAccess Keyword
|
|
247
|
|
248 hi def link csLinq Statement
|
|
249
|
|
250 hi def link csStatement Statement
|
14372
|
251 hi def link csRepeat Repeat
|
|
252 hi def link csConditional Conditional
|
|
253 hi def link csLabel Label
|
29104
|
254 hi def link csException Exception
|
|
255
|
14372
|
256 hi def link csModifier StorageClass
|
29104
|
257 hi def link csAccessModifier csModifier
|
|
258 hi def link csAsyncModifier csModifier
|
|
259 hi def link csManagedModifier csModifier
|
|
260 hi def link csUsingModifier csModifier
|
14372
|
261
|
|
262 hi def link csTodo Todo
|
|
263 hi def link csComment Comment
|
29104
|
264 hi def link csLineComment csComment
|
|
265 hi def link csBlockComment csComment
|
7
|
266
|
29104
|
267 hi def link csKeywordOperator Keyword
|
|
268 hi def link csAsyncOperator csKeywordOperator
|
|
269 hi def link csTypeOf csKeywordOperator
|
|
270 hi def link csTypeOfOperand Typedef
|
|
271 hi def link csTypeOfError Error
|
14372
|
272 hi def link csOpSymbols Operator
|
15131
|
273 hi def link csLogicSymbols Operator
|
7
|
274
|
14372
|
275 hi def link csSpecialError Error
|
|
276 hi def link csSpecialCharError Error
|
|
277 hi def link csString String
|
|
278 hi def link csQuote String
|
|
279 hi def link csInterpolatedString String
|
|
280 hi def link csVerbatimString String
|
|
281 hi def link csInterVerbString String
|
|
282 hi def link csVerbatimQuote SpecialChar
|
29104
|
283
|
|
284 hi def link csPreProc PreProc
|
|
285 hi def link csPreProcDeclaration Define
|
|
286 hi def link csPreProcConditional PreCondit
|
|
287 hi def link csPreProcLine csPreProc
|
|
288 hi def link csPreProcDiagnostic csPreProc
|
|
289 hi def link csPreProcRegion csPreProc
|
|
290 hi def link csPreProcPragma csPreProc
|
|
291 hi def link csPreProcNullable csPreProc
|
|
292 hi def link csPreProcInclude csPreProc
|
|
293 hi def link csShebang csPreProc
|
|
294
|
|
295 hi def link csConstant Constant
|
|
296 hi def link csNull Constant
|
|
297 hi def link csBoolean Boolean
|
14372
|
298 hi def link csCharacter Character
|
|
299 hi def link csSpecialChar SpecialChar
|
29104
|
300 hi def link csInteger Number
|
|
301 hi def link csReal Float
|
14372
|
302 hi def link csUnicodeNumber SpecialChar
|
|
303 hi def link csUnicodeSpecifier SpecialChar
|
|
304 hi def link csInterpolationDelimiter Delimiter
|
|
305 hi def link csInterpolationAlignDel csInterpolationDelimiter
|
|
306 hi def link csInterpolationFormat csInterpolationDelimiter
|
|
307 hi def link csInterpolationFormatDel csInterpolationDelimiter
|
7
|
308
|
17667
|
309 hi def link csGenericBraces csBraces
|
|
310
|
7
|
311 " xml markup
|
29104
|
312 hi def link csXmlLineCommentLeader Comment
|
|
313 hi def link csXmlLineComment Comment
|
|
314 hi def link csXmlBlockComment Comment
|
|
315 hi def link csXmlBlockCommentMiddle csXmlBlockComment
|
14372
|
316 hi def link csXmlTag Statement
|
29104
|
317 hi def link csXmlAttrib Statement
|
7
|
318
|
15131
|
319 let b:current_syntax = 'cs'
|
7
|
320
|
15131
|
321 let &cpoptions = s:save_cpo
|
|
322 unlet s:save_cpo
|
7
|
323
|
14372
|
324 " vim: vts=16,28
|