blob: 33564163784e75cf23ad9b79e1bbb229f29bbfb7 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaara9604e62018-07-21 05:56:22 +02002" Language: C#
3" Maintainer: Nick Jensen <nickspoon@gmail.com>
4" Former Maintainers: Anduin Withers <awithers@anduin.com>
5" Johannes Zellner <johannes@zellner.org>
Bram Moolenaar560979e2020-02-04 22:53:05 +01006" Last Change: 2020-01-27
Bram Moolenaara9604e62018-07-21 05:56:22 +02007" Filenames: *.cs
8" License: Vim (see :h license)
9" Repository: https://github.com/nickspoons/vim-cs
Bram Moolenaar071d4272004-06-13 20:20:40 +000010"
11" REFERENCES:
12" [1] ECMA TC39: C# Language Specification (WD13Oct01.doc)
13
Bram Moolenaard47d5222018-12-09 20:43:55 +010014if exists('b:current_syntax')
15 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000016endif
17
Bram Moolenaard47d5222018-12-09 20:43:55 +010018let s:save_cpo = &cpoptions
19set cpoptions&vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000020
21
Bram Moolenaara9604e62018-07-21 05:56:22 +020022syn keyword csType bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic
23syn keyword csStorage delegate enum interface namespace struct
24syn keyword csRepeat break continue do for foreach goto return while
25syn keyword csConditional else if switch
26syn keyword csLabel case default
27syn match csOperatorError display +::+
28syn match csGlobal display +global::+
Bram Moolenaar071d4272004-06-13 20:20:40 +000029" user labels (see [1] 8.6 Statements)
Bram Moolenaara9604e62018-07-21 05:56:22 +020030syn match csLabel display +^\s*\I\i*\s*:\([^:]\)\@=+
31syn keyword csModifier abstract const extern internal override private protected public readonly sealed static virtual volatile
32syn keyword csConstant false null true
33syn keyword csException try catch finally throw when
34syn keyword csLinq ascending by descending equals from group in into join let on orderby select where
35syn keyword csAsync async await
Bram Moolenaar071d4272004-06-13 20:20:40 +000036
Bram Moolenaard47d5222018-12-09 20:43:55 +010037syn keyword csUnspecifiedStatement as base checked event fixed in is lock nameof operator out params ref sizeof stackalloc this unchecked unsafe using
Bram Moolenaara9604e62018-07-21 05:56:22 +020038syn keyword csUnsupportedStatement add remove value
39syn keyword csUnspecifiedKeyword explicit implicit
Bram Moolenaar071d4272004-06-13 20:20:40 +000040
Bram Moolenaar9c102382006-05-03 21:26:49 +000041" Contextual Keywords
Bram Moolenaara9604e62018-07-21 05:56:22 +020042syn match csContextualStatement /\<yield[[:space:]\n]\+\(return\|break\)/me=s+5
43syn match csContextualStatement /\<partial[[:space:]\n]\+\(class\|struct\|interface\)/me=s+7
44syn match csContextualStatement /\<\(get\|set\)\(;\|[[:space:]\n]*{\)/me=s+3
45syn match csContextualStatement /\<where\>[^:]\+:/me=s+5
46
Bram Moolenaard47d5222018-12-09 20:43:55 +010047" Operators
48syn keyword csTypeOf typeof contained
49syn region csTypeOfStatement start="typeof(" end=")" contains=csType, csTypeOf
50
Bram Moolenaara9604e62018-07-21 05:56:22 +020051" Punctuation
52syn match csBraces "[{}\[\]]" display
53syn match csParens "[()]" display
Bram Moolenaar088e8e32019-08-08 22:15:18 +020054syn match csOpSymbols "+\{1,2}" display
55syn match csOpSymbols "-\{1,2}" display
56syn match csOpSymbols "=\{1,2}" display
57syn match csOpSymbols ">\{1,2}" display
58syn match csOpSymbols "<\{1,2}" display
Bram Moolenaara9604e62018-07-21 05:56:22 +020059syn match csOpSymbols "[!><+\-*/]=" display
60syn match csOpSymbols "[!*/^]" display
61syn match csOpSymbols "=>" display
62syn match csEndColon ";" display
63syn match csLogicSymbols "&&" display
64syn match csLogicSymbols "||" display
65syn match csLogicSymbols "?" display
66syn match csLogicSymbols ":" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000067
Bram Moolenaar088e8e32019-08-08 22:15:18 +020068" Generics
69syn region csGeneric matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,csUserType,csUserIdentifier,csUserInterface,csUserMethod
70
Bram Moolenaar071d4272004-06-13 20:20:40 +000071" Comments
72"
73" PROVIDES: @csCommentHook
Bram Moolenaara9604e62018-07-21 05:56:22 +020074syn keyword csTodo contained TODO FIXME XXX NOTE HACK TBD
75syn region csComment start="/\*" end="\*/" contains=@csCommentHook,csTodo,@Spell
76syn match csComment "//.*$" contains=@csCommentHook,csTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000077
78" xml markup inside '///' comments
Bram Moolenaara9604e62018-07-21 05:56:22 +020079syn cluster xmlRegionHook add=csXmlCommentLeader
80syn cluster xmlCdataHook add=csXmlCommentLeader
81syn cluster xmlStartTagHook add=csXmlCommentLeader
82syn keyword csXmlTag contained Libraries Packages Types Excluded ExcludedTypeName ExcludedLibraryName
83syn keyword csXmlTag contained ExcludedBucketName TypeExcluded Type TypeKind TypeSignature AssemblyInfo
84syn keyword csXmlTag contained AssemblyName AssemblyPublicKey AssemblyVersion AssemblyCulture Base
85syn keyword csXmlTag contained BaseTypeName Interfaces Interface InterfaceName Attributes Attribute
86syn keyword csXmlTag contained AttributeName Members Member MemberSignature MemberType MemberValue
87syn keyword csXmlTag contained ReturnValue ReturnType Parameters Parameter MemberOfPackage
88syn keyword csXmlTag contained ThreadingSafetyStatement Docs devdoc example overload remarks returns summary
89syn keyword csXmlTag contained threadsafe value internalonly nodoc exception param permission platnote
90syn keyword csXmlTag contained seealso b c i pre sub sup block code note paramref see subscript superscript
91syn keyword csXmlTag contained list listheader item term description altcompliant altmember
Bram Moolenaar071d4272004-06-13 20:20:40 +000092
93syn cluster xmlTagHook add=csXmlTag
94
Bram Moolenaar088e8e32019-08-08 22:15:18 +020095syn match csXmlCommentLeader "///" contained
96syn match csXmlComment "///.*$" contains=csXmlCommentLeader,@csXml,@Spell keepend
Bram Moolenaara9604e62018-07-21 05:56:22 +020097syn include @csXml syntax/xml.vim
98hi def link xmlRegion Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +000099
Bram Moolenaar560979e2020-02-04 22:53:05 +0100100" Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here.
101syn spell default
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102
103" [1] 9.5 Pre-processing directives
Bram Moolenaara9604e62018-07-21 05:56:22 +0200104syn region csPreCondit start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\)" skip="\\$" end="$" contains=csComment keepend
105syn region csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$" end="^\s*#\s*endregion" transparent fold contains=TOP
106syn region csSummary start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107
108
Bram Moolenaara9604e62018-07-21 05:56:22 +0200109syn region csClassType start="@\@1<!\<class\>"hs=s+6 end="[:\n{]"me=e-1 contains=csClass
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200110" csUserType may be defined by user scripts/plugins - it should be contained in csNewType
111syn region csNewType start="@\@1<!\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,csUserType
Bram Moolenaara9604e62018-07-21 05:56:22 +0200112syn region csIsType start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
113syn region csIsType start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
114syn keyword csNew new contained
115syn keyword csClass class contained
116syn keyword csIsAs is as
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117
118" Strings and constants
Bram Moolenaara9604e62018-07-21 05:56:22 +0200119syn match csSpecialError "\\." contained
120syn match csSpecialCharError "[^']" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121" [1] 9.4.4.4 Character literals
Bram Moolenaara9604e62018-07-21 05:56:22 +0200122syn match csSpecialChar +\\["\\'0abfnrtvx]+ contained display
123syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display
124syn match csUnicodeNumber +\\U\x\{8}+ contained contains=csUnicodeSpecifier display
125syn match csUnicodeSpecifier +\\[uU]+ contained display
126
127syn region csString matchgroup=csQuote start=+"+ end=+"+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
128syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError display
129syn match csCharacter "'\\''" contains=csSpecialChar display
130syn match csCharacter "'[^\\]'" display
131syn match csNumber "\<0[0-7]*[lL]\=\>" display
132syn match csNumber "\<0[xX]\x\+[lL]\=\>" display
133syn match csNumber "\<\d\+[lL]\=\>" display
134syn match csNumber "\<\d\+\.\d*\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display
135syn match csNumber "\.\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display
136syn match csNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" display
137syn match csNumber "\<\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\>" display
138
139syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"+ end=+$+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
140
141syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBracketed,csInterpolationAlign,csInterpolationFormat
142syn match csEscapedInterpolation "{{" transparent contains=NONE display
143syn match csEscapedInterpolation "}}" transparent contains=NONE display
144syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=csNumber,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display
145syn match csInterpolationFormat +:[^}]\+}+ contained contains=csInterpolationFormatDel display
146syn match csInterpolationAlignDel +,+ contained display
147syn match csInterpolationFormatDel +:+ contained display
148
149syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"+ skip=+""+ extend contains=csVerbatimQuote,@Spell
150syn match csVerbatimQuote +""+ contained
151syn match csQuoteError +@$"+he=s+2,me=s+2
152
153syn region csInterVerbString matchgroup=csQuote start=+\$@"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell
154
155syn region csBracketed matchgroup=csParens start=+(+ end=+)+ contained transparent contains=@csAll,csBracketed
156
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200157syn cluster csAll contains=csCharacter,csClassType,csComment,csContextualStatement,csEndColon,csInterpolatedString,csIsType,csLabel,csLogicSymbols,csNewType,csConstant,csNumber,csOpSymbols,csOperatorError,csParens,csPreCondit,csRegion,csString,csSummary,csType,csUnicodeNumber,csUnicodeSpecifier,csVerbatimString,csUserType,csUserIdentifier,csUserInterface,csUserMethod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158
159" The default highlighting.
Bram Moolenaara9604e62018-07-21 05:56:22 +0200160hi def link csType Type
Bram Moolenaara9604e62018-07-21 05:56:22 +0200161hi def link csClassType Type
162hi def link csIsType Type
Bram Moolenaard47d5222018-12-09 20:43:55 +0100163hi def link csStorage Structure
164hi def link csClass Structure
Bram Moolenaara9604e62018-07-21 05:56:22 +0200165hi def link csRepeat Repeat
166hi def link csConditional Conditional
167hi def link csLabel Label
168hi def link csModifier StorageClass
169hi def link csConstant Constant
170hi def link csException Exception
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200171hi def link csTypeOf Keyword
Bram Moolenaard47d5222018-12-09 20:43:55 +0100172hi def link csTypeOfStatement Typedef
Bram Moolenaara9604e62018-07-21 05:56:22 +0200173hi def link csUnspecifiedStatement Statement
174hi def link csUnsupportedStatement Statement
175hi def link csUnspecifiedKeyword Keyword
176hi def link csNew Statement
177hi def link csLinq Statement
178hi def link csIsAs Keyword
179hi def link csAsync Keyword
180hi def link csContextualStatement Statement
181hi def link csOperatorError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182
Bram Moolenaara9604e62018-07-21 05:56:22 +0200183hi def link csTodo Todo
184hi def link csComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185
Bram Moolenaara9604e62018-07-21 05:56:22 +0200186hi def link csOpSymbols Operator
Bram Moolenaard47d5222018-12-09 20:43:55 +0100187hi def link csLogicSymbols Operator
Bram Moolenaara9604e62018-07-21 05:56:22 +0200188
189hi def link csSpecialError Error
190hi def link csSpecialCharError Error
191hi def link csString String
192hi def link csQuote String
193hi def link csQuoteError Error
194hi def link csInterpolatedString String
195hi def link csVerbatimString String
196hi def link csInterVerbString String
197hi def link csVerbatimQuote SpecialChar
198hi def link csPreCondit PreCondit
199hi def link csCharacter Character
200hi def link csSpecialChar SpecialChar
201hi def link csNumber Number
202hi def link csUnicodeNumber SpecialChar
203hi def link csUnicodeSpecifier SpecialChar
204hi def link csInterpolationDelimiter Delimiter
205hi def link csInterpolationAlignDel csInterpolationDelimiter
206hi def link csInterpolationFormat csInterpolationDelimiter
207hi def link csInterpolationFormatDel csInterpolationDelimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000208
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200209hi def link csGenericBraces csBraces
210
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211" xml markup
Bram Moolenaara9604e62018-07-21 05:56:22 +0200212hi def link csXmlCommentLeader Comment
213hi def link csXmlComment Comment
214hi def link csXmlTag Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215
Bram Moolenaard47d5222018-12-09 20:43:55 +0100216let b:current_syntax = 'cs'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217
Bram Moolenaard47d5222018-12-09 20:43:55 +0100218let &cpoptions = s:save_cpo
219unlet s:save_cpo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000220
Bram Moolenaara9604e62018-07-21 05:56:22 +0200221" vim: vts=16,28