1" Vim syntax file 2" Language: C# 3" Maintainer: Nick Jensen <[email protected]> 4" Former Maintainers: Anduin Withers <[email protected]> 5" Johannes Zellner <[email protected]> 6" Last Change: 2020-01-27 7" Filenames: *.cs 8" License: Vim (see :h license) 9" Repository: https://github.com/nickspoons/vim-cs 10" 11" REFERENCES: 12" [1] ECMA TC39: C# Language Specification (WD13Oct01.doc) 13 14if exists('b:current_syntax') 15 finish 16endif 17 18let s:save_cpo = &cpoptions 19set cpoptions&vim 20 21 22syn 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::+ 29" user labels (see [1] 8.6 Statements) 30syn 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 36 37syn keyword csUnspecifiedStatement as base checked event fixed in is lock nameof operator out params ref sizeof stackalloc this unchecked unsafe using 38syn keyword csUnsupportedStatement add remove value 39syn keyword csUnspecifiedKeyword explicit implicit 40 41" Contextual Keywords 42syn 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 47" Operators 48syn keyword csTypeOf typeof contained 49syn region csTypeOfStatement start="typeof(" end=")" contains=csType, csTypeOf 50 51" Punctuation 52syn match csBraces "[{}\[\]]" display 53syn match csParens "[()]" display 54syn 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 59syn 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 67 68" Generics 69syn region csGeneric matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,csUserType,csUserIdentifier,csUserInterface,csUserMethod 70 71" Comments 72" 73" PROVIDES: @csCommentHook 74syn 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 77 78" xml markup inside '///' comments 79syn 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 92 93syn cluster xmlTagHook add=csXmlTag 94 95syn match csXmlCommentLeader "///" contained 96syn match csXmlComment "///.*$" contains=csXmlCommentLeader,@csXml,@Spell keepend 97syn include @csXml syntax/xml.vim 98hi def link xmlRegion Comment 99 100" Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here. 101syn spell default 102 103" [1] 9.5 Pre-processing directives 104syn 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 107 108 109syn region csClassType start="@\@1<!\<class\>"hs=s+6 end="[:\n{]"me=e-1 contains=csClass 110" 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 112syn 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 117 118" Strings and constants 119syn match csSpecialError "\\." contained 120syn match csSpecialCharError "[^']" contained 121" [1] 9.4.4.4 Character literals 122syn 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 157syn 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 158 159" The default highlighting. 160hi def link csType Type 161hi def link csClassType Type 162hi def link csIsType Type 163hi def link csStorage Structure 164hi def link csClass Structure 165hi 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 171hi def link csTypeOf Keyword 172hi def link csTypeOfStatement Typedef 173hi 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 182 183hi def link csTodo Todo 184hi def link csComment Comment 185 186hi def link csOpSymbols Operator 187hi def link csLogicSymbols Operator 188 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 208 209hi def link csGenericBraces csBraces 210 211" xml markup 212hi def link csXmlCommentLeader Comment 213hi def link csXmlComment Comment 214hi def link csXmlTag Statement 215 216let b:current_syntax = 'cs' 217 218let &cpoptions = s:save_cpo 219unlet s:save_cpo 220 221" vim: vts=16,28 222