blob: 1652cb63c395b9fd6fc150ca0ed0c788dc9aab18 [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 Moolenaard47d5222018-12-09 20:43:55 +01006" Last Change: 2018-11-26
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 Moolenaard47d5222018-12-09 20:43:55 +010054syn match csOpSymbols "[+\-=]\{1,2}" display
55syn match csOpSymbols "[><]\{2}" display
56syn match csOpSymbols "\s\zs[><]\ze\_s" display
Bram Moolenaara9604e62018-07-21 05:56:22 +020057syn match csOpSymbols "[!><+\-*/]=" display
58syn match csOpSymbols "[!*/^]" display
59syn match csOpSymbols "=>" display
60syn match csEndColon ";" display
61syn match csLogicSymbols "&&" display
62syn match csLogicSymbols "||" display
63syn match csLogicSymbols "?" display
64syn match csLogicSymbols ":" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000065
66" Comments
67"
68" PROVIDES: @csCommentHook
Bram Moolenaara9604e62018-07-21 05:56:22 +020069syn keyword csTodo contained TODO FIXME XXX NOTE HACK TBD
70syn region csComment start="/\*" end="\*/" contains=@csCommentHook,csTodo,@Spell
71syn match csComment "//.*$" contains=@csCommentHook,csTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000072
73" xml markup inside '///' comments
Bram Moolenaara9604e62018-07-21 05:56:22 +020074syn cluster xmlRegionHook add=csXmlCommentLeader
75syn cluster xmlCdataHook add=csXmlCommentLeader
76syn cluster xmlStartTagHook add=csXmlCommentLeader
77syn keyword csXmlTag contained Libraries Packages Types Excluded ExcludedTypeName ExcludedLibraryName
78syn keyword csXmlTag contained ExcludedBucketName TypeExcluded Type TypeKind TypeSignature AssemblyInfo
79syn keyword csXmlTag contained AssemblyName AssemblyPublicKey AssemblyVersion AssemblyCulture Base
80syn keyword csXmlTag contained BaseTypeName Interfaces Interface InterfaceName Attributes Attribute
81syn keyword csXmlTag contained AttributeName Members Member MemberSignature MemberType MemberValue
82syn keyword csXmlTag contained ReturnValue ReturnType Parameters Parameter MemberOfPackage
83syn keyword csXmlTag contained ThreadingSafetyStatement Docs devdoc example overload remarks returns summary
84syn keyword csXmlTag contained threadsafe value internalonly nodoc exception param permission platnote
85syn keyword csXmlTag contained seealso b c i pre sub sup block code note paramref see subscript superscript
86syn keyword csXmlTag contained list listheader item term description altcompliant altmember
Bram Moolenaar071d4272004-06-13 20:20:40 +000087
88syn cluster xmlTagHook add=csXmlTag
89
Bram Moolenaara9604e62018-07-21 05:56:22 +020090syn match csXmlCommentLeader +\/\/\/+ contained
91syn match csXmlComment +\/\/\/.*$+ contains=csXmlCommentLeader,@csXml,@Spell
92syn include @csXml syntax/xml.vim
93hi def link xmlRegion Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +000094
95
96" [1] 9.5 Pre-processing directives
Bram Moolenaara9604e62018-07-21 05:56:22 +020097syn region csPreCondit start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\)" skip="\\$" end="$" contains=csComment keepend
98syn region csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$" end="^\s*#\s*endregion" transparent fold contains=TOP
99syn region csSummary start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100
101
Bram Moolenaara9604e62018-07-21 05:56:22 +0200102syn region csClassType start="@\@1<!\<class\>"hs=s+6 end="[:\n{]"me=e-1 contains=csClass
103syn region csNewType start="@\@1<!\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew contains=csNewType
104syn region csIsType start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
105syn region csIsType start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
106syn keyword csNew new contained
107syn keyword csClass class contained
108syn keyword csIsAs is as
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109
110" Strings and constants
Bram Moolenaara9604e62018-07-21 05:56:22 +0200111syn match csSpecialError "\\." contained
112syn match csSpecialCharError "[^']" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113" [1] 9.4.4.4 Character literals
Bram Moolenaara9604e62018-07-21 05:56:22 +0200114syn match csSpecialChar +\\["\\'0abfnrtvx]+ contained display
115syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display
116syn match csUnicodeNumber +\\U\x\{8}+ contained contains=csUnicodeSpecifier display
117syn match csUnicodeSpecifier +\\[uU]+ contained display
118
119syn region csString matchgroup=csQuote start=+"+ end=+"+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
120syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError display
121syn match csCharacter "'\\''" contains=csSpecialChar display
122syn match csCharacter "'[^\\]'" display
123syn match csNumber "\<0[0-7]*[lL]\=\>" display
124syn match csNumber "\<0[xX]\x\+[lL]\=\>" display
125syn match csNumber "\<\d\+[lL]\=\>" display
126syn match csNumber "\<\d\+\.\d*\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display
127syn match csNumber "\.\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display
128syn match csNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" display
129syn match csNumber "\<\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\>" display
130
131syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"+ end=+$+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
132
133syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBracketed,csInterpolationAlign,csInterpolationFormat
134syn match csEscapedInterpolation "{{" transparent contains=NONE display
135syn match csEscapedInterpolation "}}" transparent contains=NONE display
136syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=csNumber,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display
137syn match csInterpolationFormat +:[^}]\+}+ contained contains=csInterpolationFormatDel display
138syn match csInterpolationAlignDel +,+ contained display
139syn match csInterpolationFormatDel +:+ contained display
140
141syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"+ skip=+""+ extend contains=csVerbatimQuote,@Spell
142syn match csVerbatimQuote +""+ contained
143syn match csQuoteError +@$"+he=s+2,me=s+2
144
145syn region csInterVerbString matchgroup=csQuote start=+\$@"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell
146
147syn region csBracketed matchgroup=csParens start=+(+ end=+)+ contained transparent contains=@csAll,csBracketed
148
149syn cluster csAll contains=csCharacter,csClassType,csComment,csContextualStatement,csEndColon,csInterpolatedString,csIsType,csLabel,csLogicSymbols,csNewType,csConstant,csNumber,csOpSymbols,csOperatorError,csParens,csPreCondit,csRegion,csString,csSummary,csUnicodeNumber,csUnicodeSpecifier,csVerbatimString
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150
151" The default highlighting.
Bram Moolenaara9604e62018-07-21 05:56:22 +0200152hi def link csType Type
Bram Moolenaara9604e62018-07-21 05:56:22 +0200153hi def link csClassType Type
154hi def link csIsType Type
Bram Moolenaard47d5222018-12-09 20:43:55 +0100155hi def link csStorage Structure
156hi def link csClass Structure
Bram Moolenaara9604e62018-07-21 05:56:22 +0200157hi def link csRepeat Repeat
158hi def link csConditional Conditional
159hi def link csLabel Label
160hi def link csModifier StorageClass
161hi def link csConstant Constant
162hi def link csException Exception
Bram Moolenaard47d5222018-12-09 20:43:55 +0100163hi def link csTypeOf Operator
164hi def link csTypeOfStatement Typedef
Bram Moolenaara9604e62018-07-21 05:56:22 +0200165hi def link csUnspecifiedStatement Statement
166hi def link csUnsupportedStatement Statement
167hi def link csUnspecifiedKeyword Keyword
168hi def link csNew Statement
169hi def link csLinq Statement
170hi def link csIsAs Keyword
171hi def link csAsync Keyword
172hi def link csContextualStatement Statement
173hi def link csOperatorError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174
Bram Moolenaara9604e62018-07-21 05:56:22 +0200175hi def link csTodo Todo
176hi def link csComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177
Bram Moolenaara9604e62018-07-21 05:56:22 +0200178hi def link csOpSymbols Operator
Bram Moolenaard47d5222018-12-09 20:43:55 +0100179hi def link csLogicSymbols Operator
Bram Moolenaara9604e62018-07-21 05:56:22 +0200180
181hi def link csSpecialError Error
182hi def link csSpecialCharError Error
183hi def link csString String
184hi def link csQuote String
185hi def link csQuoteError Error
186hi def link csInterpolatedString String
187hi def link csVerbatimString String
188hi def link csInterVerbString String
189hi def link csVerbatimQuote SpecialChar
190hi def link csPreCondit PreCondit
191hi def link csCharacter Character
192hi def link csSpecialChar SpecialChar
193hi def link csNumber Number
194hi def link csUnicodeNumber SpecialChar
195hi def link csUnicodeSpecifier SpecialChar
196hi def link csInterpolationDelimiter Delimiter
197hi def link csInterpolationAlignDel csInterpolationDelimiter
198hi def link csInterpolationFormat csInterpolationDelimiter
199hi def link csInterpolationFormatDel csInterpolationDelimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200
201" xml markup
Bram Moolenaara9604e62018-07-21 05:56:22 +0200202hi def link csXmlCommentLeader Comment
203hi def link csXmlComment Comment
204hi def link csXmlTag Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205
Bram Moolenaard47d5222018-12-09 20:43:55 +0100206let b:current_syntax = 'cs'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207
Bram Moolenaard47d5222018-12-09 20:43:55 +0100208let &cpoptions = s:save_cpo
209unlet s:save_cpo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210
Bram Moolenaara9604e62018-07-21 05:56:22 +0200211" vim: vts=16,28