codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: C#3" Maintainer: Nick Jensen <nickspoon@gmail.com>4" Former Maintainers: Anduin Withers <awithers@anduin.com>5" Johannes Zellner <johannes@zellner.org>6" Last Change: 2025-03-147" Filenames: *.cs8" License: Vim (see :h license)9" Repository: https://github.com/nickspoons/vim-cs10"11" References:12" - ECMA-334 5th Edition: C# Language Specification13" https://www.ecma-international.org/publications-and-standards/standards/ecma-334/14" - C# Language Design: Draft 6th Edition and later proposals15" https://github.com/dotnet/csharplang16 17if exists('b:current_syntax')18 finish19endif20 21let s:save_cpo = &cpoptions22set cpoptions&vim23 24syn keyword csType bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic25syn keyword csType nint nuint " contextual26 27syn keyword csStorage enum interface namespace struct28syn match csStorage "\<record\ze\_s\+@\=\h\w*\_s*[<(:{;]"29syn match csStorage "\%(\<\%(partial\|new\|public\|protected\|internal\|private\|abstract\|sealed\|static\|unsafe\|readonly\)\)\@9<=\_s\+record\>"30syn match csStorage "\<record\ze\_s\+\%(class\|struct\)"31syn match csStorage "\<delegate\>"32syn keyword csRepeat break continue do for foreach goto return while33syn keyword csConditional else if switch34syn keyword csLabel case default35 36syn match csNamespaceAlias "@\=\h\w*\ze\_s*::" display37syn match csGlobalNamespaceAlias "global\ze\_s*::" display38syn cluster csNamespaceAlias contains=csGlobalNamespaceAlias,csNamespaceAlias,csNamespaceAliasQualifier39 40" user labels41syn match csLabel display +^\s*\I\i*\s*:\%([^:]\)\@=+42 43" Function pointers44syn match csType "\<delegate\s*\*" contains=csOpSymbols nextgroup=csManagedModifier skipwhite skipempty45syn keyword csManagedModifier managed unmanaged contained46 47" Modifiers48syn match csUsingModifier "\<global\ze\_s\+using\>"49syn keyword csAccessModifier internal private protected public50syn keyword csModifier operator nextgroup=csCheckedModifier skipwhite skipempty51syn keyword csCheckedModifier checked contained52 53" TODO: in new out54syn keyword csModifier abstract const event override readonly sealed static virtual volatile55syn match csModifier "\<\%(extern\|fixed\|unsafe\)\>"56syn match csModifier "\<partial\ze\_s\+\%(class\|struct\|interface\|record\|void\)\>"57 58syn keyword csException try catch finally throw when59syn keyword csLinq ascending by descending equals from group in into join let on orderby select60syn match csLinq "\<where\>"61 62" Type parameter constraint clause63syn match csStorage "\<where\>\ze\_s\+@\=\h\w*\_s*:"64 65" Async66syn keyword csAsyncModifier async67syn keyword csAsyncOperator await68 69syn match csStorage "\<extern\ze\s\+alias\>"70syn match csStorage "\%(\<extern\s\+\)\@16<=alias\>"71 72syn match csStatement "\<\%(checked\|unchecked\|unsafe\)\ze\_s*{"73syn match csStatement "\<fixed\ze\_s*("74syn keyword csStatement lock75syn match csStatement "\<yield\ze\_s\+\%(return\|break\)\>"76 77syn match csAccessor "\<\%(get\|set\|init\|add\|remove\)\ze\_s*\%([;{]\|=>\)"78 79syn keyword csAccess base80syn match csAccess "\<this\>"81 82" Extension method parameter modifier83syn match csModifier "\<this\ze\_s\+@\=\h"84 85syn keyword csUnspecifiedStatement as in is nameof out params ref sizeof stackalloc using86syn keyword csUnsupportedStatement value87syn keyword csUnspecifiedKeyword explicit implicit88 89" Operators90syn keyword csTypeOf typeof nextgroup=csTypeOfOperand,csTypeOfError skipwhite skipempty91syn region csTypeOfOperand matchgroup=csParens start="(" end=")" contained contains=csType92syn match csTypeOfError "[^([:space:]]" contained93syn match csKeywordOperator "\<\%(checked\|unchecked\)\ze\_s*("94 95" Punctuation96syn match csBraces "[{}[\]]" display97syn match csParens "[()]" display98syn match csOpSymbols "+\{1,2}" display99syn match csOpSymbols "-\{1,2}" display100syn match csOpSymbols "=\{1,2}" display101syn match csOpSymbols ">\{1,2}" display102syn match csOpSymbols "<\{1,2}" display103syn match csOpSymbols "[!><+\-*/]=" display104syn match csOpSymbols "[!*/^]" display105syn match csOpSymbols "=>" display106syn match csEndColon ";" display107syn match csLogicSymbols "&&" display108syn match csLogicSymbols "||" display109syn match csLogicSymbols "?" display110syn match csLogicSymbols ":" display111syn match csNamespaceAliasQualifier "::" display112 113" Generics114syn region csGeneric matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,@csNamespaceAlias,csUserType,csUserIdentifier,csUserInterface,csUserMethod115 116" Comments117"118" PROVIDES: @csCommentHook119syn keyword csTodo contained TODO FIXME XXX NOTE HACK TBD120syn region csBlockComment start="/\*" end="\*/" contains=@csCommentHook,csTodo,@Spell121syn match csLineComment "//.*$" contains=@csCommentHook,csTodo,@Spell122syn cluster csComment contains=csLineComment,csBlockComment123 124syn region csSummary start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend125 126" xml markup inside '///' and /**...*/ comments127syn cluster xmlRegionHook add=csXmlLineCommentLeader,csXmlBlockCommentMiddle128syn cluster xmlCdataHook add=csXmlLineCommentLeader,csXmlBlockCommentMiddle129syn cluster xmlStartTagHook add=csXmlLineCommentLeader,csXmlBlockCommentMiddle130syn cluster xmlTagHook add=csXmlTag131syn cluster xmlAttribHook add=csXmlAttrib132 133" https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/xmldoc/recommended-tags134syn keyword csXmlTag contained summary remarks135syn keyword csXmlTag contained returns param paramref exception value136syn keyword csXmlTag contained para list c code example137syn keyword csXmlTag contained inheritdoc include138syn keyword csXmlTag contained see seealso139syn keyword csXmlTag contained typeparam typeparamref140syn keyword csXmlTag contained b i u br a141syn keyword csXmlAttrib contained cref href142 143syn match csXmlLineCommentLeader "///" contained144syn match csXmlLineComment "///.*$" contains=csXmlLineCommentLeader,@csXml,@Spell keepend145syn match csXmlBlockCommentMiddle "^\s*\zs\*" contained146syn region csXmlBlockComment start="/\*\*" end="\*/" contains=@csXml,@Spell,csXmlBlockCommentMiddle keepend147syn include @csXml syntax/xml.vim148hi def link xmlRegion Comment149 150" Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here.151syn spell default152 153" Pre-processing directives154syn region csPreProcDeclaration start="^\s*\zs#\s*\%(define\|undef\)\>" end="$" contains=csLineComment keepend155syn region csPreProcConditional start="^\s*\zs#\s*\%(if\|elif\)\>" end="$" contains=csLineComment keepend156syn region csPreProcConditional start="^\s*\zs#\s*\%(else\|endif\)\>" end="$" contains=csLineComment keepend157syn region csPreProcLine start="^\s*\zs#\s*line\>" end="$" contains=csLineComment keepend158syn region csPreProcDiagnostic start="^\s*\zs#\s*\%(error\|warning\)\>" end="$"159syn region csPreProcConditionalSection matchgroup=csPreProcRegion start="^\s*#\s*region\>.*" end="^\s*#\s*endregion\>.*" transparent fold contains=TOP160syn region csPreProcPragma start="^\s*\zs#\s*pragma\>" end="$" contains=csLineComment keepend161syn region csPreProcNullable start="^\s*\zs#\s*nullable\>" end="$" contains=csLineComment keepend162 163if expand('%:e') == 'csx' || getline('1') =~ '^#!.*\<dotnet-script\>'164 syn region csPreProcInclude start="^\s*\zs#\s*\%(load\|r\)\>" end="$" contains=csLineComment keepend165 syn match csShebang "\%^#!.*" display166endif167 168syn cluster csPreProcessor contains=csPreProc.*169 170syn region csClassType start="\<class\>"hs=s+6 end=">" end="[:{]"me=e-1 contains=csClass171" csUserType may be defined by user scripts/plugins - it should be contained in csNewType172syn region csNewType start="\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,@csNamespaceAlias,csUserType173syn region csIsType start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs174syn region csIsType start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs175syn keyword csNew new contained176syn keyword csClass class contained177syn keyword csIsAs is as178 179syn keyword csBoolean false true180syn keyword csNull null181 182" Strings and constants183syn match csSpecialError "\\." contained184syn match csSpecialCharError "[^']" contained185" Character literals186syn match csSpecialChar +\\["\\'0abfnrtv]+ contained display187syn match csUnicodeNumber +\\x\x\{1,4}+ contained contains=csUnicodeSpecifier display188syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display189syn match csUnicodeNumber +\\U00\x\{6}+ contained contains=csUnicodeSpecifier display190syn match csUnicodeSpecifier +\\[uUx]+ contained display191 192syn region csString matchgroup=csQuote start=+"+ end=+"\%(u8\)\=+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell193 194for s:i in range(3, get(g:, "cs_raw_string_quote_count", 8))195 exe 'syn region csRawString' .. s:i .. ' matchgroup=csQuote start=+\z("\{' .. s:i .. '}\)+ end=+\z1+ oneline nextgroup=csRawStringError' .. s:i196 exe 'syn region csRawString' .. s:i .. ' matchgroup=csQuote start=+\z("\{' .. s:i .. '}\)\s*$+ end=+^\s*\z1+ nextgroup=csRawStringError' .. s:i .. ' contains=csRawStringError' .. s:i197 exe 'syn match csRawStringError' .. s:i .. ' /\%("\{' .. s:i .. '}\)\@' .. s:i .. '<="\+/ contained'198 exe 'syn match csRawStringError' .. s:i .. ' /\S.\{-}\s*"\{' .. s:i .. '}"\@!/ contained'199 200 exe 'hi def link csRawString' .. s:i .. ' csString'201 exe 'hi def link csRawStringError' .. s:i .. ' Error'202endfor203unlet s:i204 205syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display206syn match csCharacter "'\\''" contains=csSpecialChar display207syn match csCharacter "'[^\\]'" display208 209" Numbers210syn case ignore211syn match csInteger "\<0b[01_]*[01]\%([lu]\|lu\|ul\)\=\>" display212syn match csInteger "\<\d\+\%(_\+\d\+\)*\%([lu]\|lu\|ul\)\=\>" display213syn match csInteger "\<0x[[:xdigit:]_]*\x\%([lu]\|lu\|ul\)\=\>" display214syn match csReal "\<\d\+\%(_\+\d\+\)*\.\d\+\%(_\+\d\+\)*\%\(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=" display215syn match csReal "\.\d\+\%(_\+\d\+\)*\%(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=\>" display216syn match csReal "\<\d\+\%(_\+\d\+\)*e[-+]\=\d\+\%(_\+\d\+\)*[fdm]\=\>" display217syn match csReal "\<\d\+\%(_\+\d\+\)*[fdm]\>" display218syn case match219syn cluster csNumber contains=csInteger,csReal220 221syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"\%(u8\)\=+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell222 223syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat224syn match csEscapedInterpolation "{{" transparent contains=NONE display225syn match csEscapedInterpolation "}}" transparent contains=NONE display226syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=@csNumber,csBoolean,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display227syn match csInterpolationFormat +:[^}]\+}+ contained contains=csInterpolationFormatDel display228syn match csInterpolationAlignDel +,+ contained display229syn match csInterpolationFormatDel +:+ contained display230 231syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"\%(u8\)\=+ skip=+""+ extend contains=csVerbatimQuote,@Spell232 233" Interpolated raw string literals234for s:i in range(1, get(g:, "cs_raw_string_interpolation_brace_count", 8))235 exe 'syn region csInterpolatedRawString' .. s:i .. ' matchgroup=csQuote start=+$\{' .. s:i .. '}\z("""\+\)+ end=+\z1+ extend contains=csInterpolation' .. s:i .. ',csInterpolationDelimiterError' .. s:i .. ',@Spell'236 exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "}\{' .. s:i .. '}" contained'237 exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "{\{' .. 2 * s:i .. ',}" contained'238 exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "}\{' .. 2 * s:i .. ',}" contained'239 exe 'syn region csInterpolation' .. s:i .. ' matchgroup=csInterpolationDelimiter start=+\%({\{' .. s:i .. '}\)\@' .. s:i .. '<!{\{' .. s:i .. '}{\@!+ end=+}\@<!}\{' .. s:i .. '}\%(}\{' .. s:i .. '}\)\@!+' ..240 \ ' keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat,csInterpolationDelimiterError' .. s:i241 242 exe 'hi def link csInterpolationDelimiterError' .. s:i .. ' Error'243 exe 'hi def link csInterpolatedRawString' .. s:i .. ' csRawString'244endfor245unlet s:i246 247syn match csVerbatimQuote +""+ contained248 249syn region csInterVerbString matchgroup=csQuote start=+$@"+ start=+@$"+ end=+"\%(u8\)\=+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell250 251syn cluster csString contains=csString,csInterpolatedString,csVerbatimString,csInterVerbString,csRawString252 253syn cluster csLiteral contains=csBoolean,@csNumber,csCharacter,@csString,csNull254 255syn region csBracketed matchgroup=csParens start=+(+ end=+)+ extend contained transparent contains=@csAll,csBraced,csBracketed256syn region csBraced matchgroup=csParens start=+{+ end=+}+ extend contained transparent contains=@csAll,csBraced,csBracketed257 258syn cluster csAll contains=@csLiteral,csClassType,@csComment,csEndColon,csIsType,csLabel,csLogicSymbols,csNewType,csOpSymbols,csParens,@csPreProcessor,csSummary,@csNamespaceAlias,csType,csUnicodeNumber,csUserType,csUserIdentifier,csUserInterface,csUserMethod259 260" Keyword identifiers261syn match csIdentifier "@\h\w*"262 263" The default highlighting.264hi def link csUnspecifiedStatement Statement265hi def link csUnsupportedStatement Statement266hi def link csUnspecifiedKeyword Keyword267 268hi def link csGlobalNamespaceAlias Include269 270hi def link csType Type271hi def link csClassType Type272hi def link csIsType Type273 274hi def link csStorage Structure275hi def link csClass Structure276hi def link csNew Statement277hi def link csIsAs Keyword278hi def link csAccessor Keyword279hi def link csAccess Keyword280 281hi def link csLinq Statement282 283hi def link csStatement Statement284hi def link csRepeat Repeat285hi def link csConditional Conditional286hi def link csLabel Label287hi def link csException Exception288 289hi def link csModifier StorageClass290hi def link csAccessModifier csModifier291hi def link csAsyncModifier csModifier292hi def link csCheckedModifier csModifier293hi def link csManagedModifier csModifier294hi def link csUsingModifier csModifier295 296hi def link csTodo Todo297hi def link csComment Comment298hi def link csLineComment csComment299hi def link csBlockComment csComment300 301hi def link csKeywordOperator Keyword302hi def link csAsyncOperator csKeywordOperator303hi def link csTypeOf csKeywordOperator304hi def link csTypeOfOperand Typedef305hi def link csTypeOfError Error306hi def link csOpSymbols Operator307hi def link csLogicSymbols Operator308 309hi def link csSpecialError Error310hi def link csSpecialCharError Error311hi def link csString String312hi def link csRawString csString313hi def link csRawStringError Error314hi def link csQuote String315hi def link csInterpolatedString String316hi def link csVerbatimString String317hi def link csInterVerbString String318hi def link csVerbatimQuote SpecialChar319 320hi def link csPreProc PreProc321hi def link csPreProcDeclaration Define322hi def link csPreProcConditional PreCondit323hi def link csPreProcLine csPreProc324hi def link csPreProcDiagnostic csPreProc325hi def link csPreProcRegion csPreProc326hi def link csPreProcPragma csPreProc327hi def link csPreProcNullable csPreProc328hi def link csPreProcInclude csPreProc329hi def link csShebang csPreProc330 331hi def link csConstant Constant332hi def link csNull Constant333hi def link csBoolean Boolean334hi def link csCharacter Character335hi def link csSpecialChar SpecialChar336hi def link csInteger Number337hi def link csReal Float338hi def link csUnicodeNumber SpecialChar339hi def link csUnicodeSpecifier SpecialChar340hi def link csInterpolationDelimiter Delimiter341hi def link csInterpolationAlignDel csInterpolationDelimiter342hi def link csInterpolationFormat csInterpolationDelimiter343hi def link csInterpolationFormatDel csInterpolationDelimiter344 345hi def link csGenericBraces csBraces346 347" xml markup348hi def link csXmlLineCommentLeader Comment349hi def link csXmlLineComment Comment350hi def link csXmlBlockComment Comment351hi def link csXmlBlockCommentMiddle csXmlBlockComment352hi def link csXmlTag Statement353hi def link csXmlAttrib Statement354 355let b:current_syntax = 'cs'356 357let &cpoptions = s:save_cpo358unlet s:save_cpo359 360" vim: vts=16,28361 