blob: eeb990215de2195c210ad13b42d26e345d13c320 [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 Moolenaar088e8e32019-08-08 22:15:18 +02006" Last Change: 2019-08-01
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
100
101" [1] 9.5 Pre-processing directives
Bram Moolenaara9604e62018-07-21 05:56:22 +0200102syn region csPreCondit start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\)" skip="\\$" end="$" contains=csComment keepend
103syn region csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$" end="^\s*#\s*endregion" transparent fold contains=TOP
104syn region csSummary start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105
106
Bram Moolenaara9604e62018-07-21 05:56:22 +0200107syn region csClassType start="@\@1<!\<class\>"hs=s+6 end="[:\n{]"me=e-1 contains=csClass
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200108" csUserType may be defined by user scripts/plugins - it should be contained in csNewType
109syn region csNewType start="@\@1<!\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,csUserType
Bram Moolenaara9604e62018-07-21 05:56:22 +0200110syn region csIsType start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
111syn region csIsType start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
112syn keyword csNew new contained
113syn keyword csClass class contained
114syn keyword csIsAs is as
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115
116" Strings and constants
Bram Moolenaara9604e62018-07-21 05:56:22 +0200117syn match csSpecialError "\\." contained
118syn match csSpecialCharError "[^']" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119" [1] 9.4.4.4 Character literals
Bram Moolenaara9604e62018-07-21 05:56:22 +0200120syn match csSpecialChar +\\["\\'0abfnrtvx]+ contained display
121syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display
122syn match csUnicodeNumber +\\U\x\{8}+ contained contains=csUnicodeSpecifier display
123syn match csUnicodeSpecifier +\\[uU]+ contained display
124
125syn region csString matchgroup=csQuote start=+"+ end=+"+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
126syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError display
127syn match csCharacter "'\\''" contains=csSpecialChar display
128syn match csCharacter "'[^\\]'" display
129syn match csNumber "\<0[0-7]*[lL]\=\>" display
130syn match csNumber "\<0[xX]\x\+[lL]\=\>" display
131syn match csNumber "\<\d\+[lL]\=\>" display
132syn match csNumber "\<\d\+\.\d*\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display
133syn match csNumber "\.\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display
134syn match csNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" display
135syn match csNumber "\<\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\>" display
136
137syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"+ end=+$+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
138
139syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBracketed,csInterpolationAlign,csInterpolationFormat
140syn match csEscapedInterpolation "{{" transparent contains=NONE display
141syn match csEscapedInterpolation "}}" transparent contains=NONE display
142syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=csNumber,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display
143syn match csInterpolationFormat +:[^}]\+}+ contained contains=csInterpolationFormatDel display
144syn match csInterpolationAlignDel +,+ contained display
145syn match csInterpolationFormatDel +:+ contained display
146
147syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"+ skip=+""+ extend contains=csVerbatimQuote,@Spell
148syn match csVerbatimQuote +""+ contained
149syn match csQuoteError +@$"+he=s+2,me=s+2
150
151syn region csInterVerbString matchgroup=csQuote start=+\$@"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell
152
153syn region csBracketed matchgroup=csParens start=+(+ end=+)+ contained transparent contains=@csAll,csBracketed
154
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200155syn 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 +0000156
157" The default highlighting.
Bram Moolenaara9604e62018-07-21 05:56:22 +0200158hi def link csType Type
Bram Moolenaara9604e62018-07-21 05:56:22 +0200159hi def link csClassType Type
160hi def link csIsType Type
Bram Moolenaard47d5222018-12-09 20:43:55 +0100161hi def link csStorage Structure
162hi def link csClass Structure
Bram Moolenaara9604e62018-07-21 05:56:22 +0200163hi def link csRepeat Repeat
164hi def link csConditional Conditional
165hi def link csLabel Label
166hi def link csModifier StorageClass
167hi def link csConstant Constant
168hi def link csException Exception
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200169hi def link csTypeOf Keyword
Bram Moolenaard47d5222018-12-09 20:43:55 +0100170hi def link csTypeOfStatement Typedef
Bram Moolenaara9604e62018-07-21 05:56:22 +0200171hi def link csUnspecifiedStatement Statement
172hi def link csUnsupportedStatement Statement
173hi def link csUnspecifiedKeyword Keyword
174hi def link csNew Statement
175hi def link csLinq Statement
176hi def link csIsAs Keyword
177hi def link csAsync Keyword
178hi def link csContextualStatement Statement
179hi def link csOperatorError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180
Bram Moolenaara9604e62018-07-21 05:56:22 +0200181hi def link csTodo Todo
182hi def link csComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183
Bram Moolenaara9604e62018-07-21 05:56:22 +0200184hi def link csOpSymbols Operator
Bram Moolenaard47d5222018-12-09 20:43:55 +0100185hi def link csLogicSymbols Operator
Bram Moolenaara9604e62018-07-21 05:56:22 +0200186
187hi def link csSpecialError Error
188hi def link csSpecialCharError Error
189hi def link csString String
190hi def link csQuote String
191hi def link csQuoteError Error
192hi def link csInterpolatedString String
193hi def link csVerbatimString String
194hi def link csInterVerbString String
195hi def link csVerbatimQuote SpecialChar
196hi def link csPreCondit PreCondit
197hi def link csCharacter Character
198hi def link csSpecialChar SpecialChar
199hi def link csNumber Number
200hi def link csUnicodeNumber SpecialChar
201hi def link csUnicodeSpecifier SpecialChar
202hi def link csInterpolationDelimiter Delimiter
203hi def link csInterpolationAlignDel csInterpolationDelimiter
204hi def link csInterpolationFormat csInterpolationDelimiter
205hi def link csInterpolationFormatDel csInterpolationDelimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206
Bram Moolenaar088e8e32019-08-08 22:15:18 +0200207hi def link csGenericBraces csBraces
208
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209" xml markup
Bram Moolenaara9604e62018-07-21 05:56:22 +0200210hi def link csXmlCommentLeader Comment
211hi def link csXmlComment Comment
212hi def link csXmlTag Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213
Bram Moolenaard47d5222018-12-09 20:43:55 +0100214let b:current_syntax = 'cs'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215
Bram Moolenaard47d5222018-12-09 20:43:55 +0100216let &cpoptions = s:save_cpo
217unlet s:save_cpo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218
Bram Moolenaara9604e62018-07-21 05:56:22 +0200219" vim: vts=16,28