neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

cs.vim (16461B)


      1 " Vim syntax file
      2 " 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-14
      7 " Filenames:           *.cs
      8 " License:             Vim (see :h license)
      9 " Repository:          https://github.com/nickspoons/vim-cs
     10 "
     11 " References:
     12 "   -   ECMA-334 5th Edition: C# Language Specification
     13 "       https://www.ecma-international.org/publications-and-standards/standards/ecma-334/
     14 "   -   C# Language Design: Draft 6th Edition and later proposals
     15 "       https://github.com/dotnet/csharplang
     16 
     17 if exists('b:current_syntax')
     18  finish
     19 endif
     20 
     21 let s:save_cpo = &cpoptions
     22 set cpoptions&vim
     23 
     24 syn keyword	csType	bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic
     25 syn keyword	csType	nint nuint " contextual
     26 
     27 syn keyword	csStorage	enum interface namespace struct
     28 syn match	csStorage	"\<record\ze\_s\+@\=\h\w*\_s*[<(:{;]"
     29 syn match	csStorage	"\%(\<\%(partial\|new\|public\|protected\|internal\|private\|abstract\|sealed\|static\|unsafe\|readonly\)\)\@9<=\_s\+record\>"
     30 syn match	csStorage	"\<record\ze\_s\+\%(class\|struct\)"
     31 syn match	csStorage	"\<delegate\>"
     32 syn keyword	csRepeat	break continue do for foreach goto return while
     33 syn keyword	csConditional	else if switch
     34 syn keyword	csLabel	case default
     35 
     36 syn match	csNamespaceAlias	"@\=\h\w*\ze\_s*::" display
     37 syn match	csGlobalNamespaceAlias	"global\ze\_s*::" display
     38 syn cluster	csNamespaceAlias	contains=csGlobalNamespaceAlias,csNamespaceAlias,csNamespaceAliasQualifier
     39 
     40 " user labels
     41 syn match	csLabel	display +^\s*\I\i*\s*:\%([^:]\)\@=+
     42 
     43 " Function pointers
     44 syn match	csType	"\<delegate\s*\*" contains=csOpSymbols nextgroup=csManagedModifier skipwhite skipempty
     45 syn keyword	csManagedModifier	managed unmanaged contained
     46 
     47 " Modifiers
     48 syn match	csUsingModifier	"\<global\ze\_s\+using\>"
     49 syn keyword	csAccessModifier	internal private protected public
     50 syn keyword	csModifier	operator nextgroup=csCheckedModifier skipwhite skipempty
     51 syn keyword	csCheckedModifier	checked contained
     52 
     53 " TODO: in new out
     54 syn keyword	csModifier	abstract const event override readonly sealed static virtual volatile
     55 syn match	csModifier	"\<\%(extern\|fixed\|unsafe\)\>"
     56 syn match	csModifier	"\<partial\ze\_s\+\%(class\|struct\|interface\|record\|void\)\>"
     57 
     58 syn keyword	csException	try catch finally throw when
     59 syn keyword	csLinq	ascending by descending equals from group in into join let on orderby select
     60 syn match	csLinq	"\<where\>"
     61 
     62 " Type parameter constraint clause
     63 syn match	csStorage	"\<where\>\ze\_s\+@\=\h\w*\_s*:"
     64 
     65 " Async
     66 syn keyword	csAsyncModifier	async
     67 syn keyword	csAsyncOperator	await
     68 
     69 syn match	csStorage	"\<extern\ze\s\+alias\>"
     70 syn match	csStorage	"\%(\<extern\s\+\)\@16<=alias\>"
     71 
     72 syn match	csStatement	"\<\%(checked\|unchecked\|unsafe\)\ze\_s*{"
     73 syn match	csStatement	"\<fixed\ze\_s*("
     74 syn keyword	csStatement	lock
     75 syn match	csStatement	"\<yield\ze\_s\+\%(return\|break\)\>"
     76 
     77 syn match	csAccessor	"\<\%(get\|set\|init\|add\|remove\)\ze\_s*\%([;{]\|=>\)"
     78 
     79 syn keyword	csAccess	base
     80 syn match	csAccess	"\<this\>"
     81 
     82 " Extension method parameter modifier
     83 syn match	csModifier	"\<this\ze\_s\+@\=\h"
     84 
     85 syn keyword	csUnspecifiedStatement	as in is nameof out params ref sizeof stackalloc using
     86 syn keyword	csUnsupportedStatement	value
     87 syn keyword	csUnspecifiedKeyword	explicit implicit
     88 
     89 " Operators
     90 syn keyword	csTypeOf	typeof nextgroup=csTypeOfOperand,csTypeOfError skipwhite skipempty
     91 syn region	csTypeOfOperand	matchgroup=csParens start="(" end=")" contained contains=csType
     92 syn match       csTypeOfError               "[^([:space:]]" contained
     93 syn match	csKeywordOperator	"\<\%(checked\|unchecked\)\ze\_s*("
     94 
     95 " Punctuation
     96 syn match	csBraces	"[{}[\]]" display
     97 syn match	csParens	"[()]" display
     98 syn match	csOpSymbols	"+\{1,2}" display
     99 syn match	csOpSymbols	"-\{1,2}" display
    100 syn match	csOpSymbols	"=\{1,2}" display
    101 syn match	csOpSymbols	">\{1,2}" display
    102 syn match	csOpSymbols	"<\{1,2}" display
    103 syn match	csOpSymbols	"[!><+\-*/]=" display
    104 syn match	csOpSymbols	"[!*/^]" display
    105 syn match	csOpSymbols	"=>" display
    106 syn match	csEndColon	";" display
    107 syn match	csLogicSymbols	"&&" display
    108 syn match	csLogicSymbols	"||" display
    109 syn match	csLogicSymbols	"?" display
    110 syn match	csLogicSymbols	":" display
    111 syn match	csNamespaceAliasQualifier	"::" display
    112 
    113 " Generics
    114 syn region	csGeneric	matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,@csNamespaceAlias,csUserType,csUserIdentifier,csUserInterface,csUserMethod
    115 
    116 " Comments
    117 "
    118 " PROVIDES: @csCommentHook
    119 syn keyword	csTodo	contained TODO FIXME XXX NOTE HACK TBD
    120 syn region	csBlockComment	start="/\*"  end="\*/" contains=@csCommentHook,csTodo,@Spell
    121 syn match	csLineComment	"//.*$" contains=@csCommentHook,csTodo,@Spell
    122 syn cluster	csComment	contains=csLineComment,csBlockComment
    123 
    124 syn region	csSummary	start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend
    125 
    126 " xml markup inside '///' and /**...*/ comments
    127 syn cluster	xmlRegionHook	add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
    128 syn cluster	xmlCdataHook	add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
    129 syn cluster	xmlStartTagHook	add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
    130 syn cluster	xmlTagHook	add=csXmlTag
    131 syn cluster	xmlAttribHook	add=csXmlAttrib
    132 
    133 " https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/xmldoc/recommended-tags
    134 syn keyword	csXmlTag	contained summary remarks
    135 syn keyword	csXmlTag	contained returns param paramref exception value
    136 syn keyword	csXmlTag	contained para list c code example
    137 syn keyword	csXmlTag	contained inheritdoc include
    138 syn keyword	csXmlTag	contained see seealso
    139 syn keyword	csXmlTag	contained typeparam typeparamref
    140 syn keyword	csXmlTag	contained b i u br a
    141 syn keyword	csXmlAttrib	contained cref href
    142 
    143 syn match	csXmlLineCommentLeader	"///" contained
    144 syn match	csXmlLineComment	"///.*$" contains=csXmlLineCommentLeader,@csXml,@Spell keepend
    145 syn match	csXmlBlockCommentMiddle	"^\s*\zs\*" contained
    146 syn region	csXmlBlockComment	start="/\*\*" end="\*/" contains=@csXml,@Spell,csXmlBlockCommentMiddle keepend
    147 syn include	@csXml syntax/xml.vim
    148 hi def link	xmlRegion Comment
    149 
    150 " Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here.
    151 syn spell default
    152 
    153 " Pre-processing directives
    154 syn region	csPreProcDeclaration	start="^\s*\zs#\s*\%(define\|undef\)\>" end="$" contains=csLineComment keepend
    155 syn region	csPreProcConditional	start="^\s*\zs#\s*\%(if\|elif\)\>" end="$" contains=csLineComment keepend
    156 syn region	csPreProcConditional	start="^\s*\zs#\s*\%(else\|endif\)\>" end="$" contains=csLineComment keepend
    157 syn region	csPreProcLine	start="^\s*\zs#\s*line\>" end="$" contains=csLineComment keepend
    158 syn region	csPreProcDiagnostic	start="^\s*\zs#\s*\%(error\|warning\)\>" end="$"
    159 syn region	csPreProcConditionalSection	matchgroup=csPreProcRegion start="^\s*#\s*region\>.*" end="^\s*#\s*endregion\>.*" transparent fold contains=TOP
    160 syn region	csPreProcPragma	start="^\s*\zs#\s*pragma\>" end="$" contains=csLineComment keepend
    161 syn region	csPreProcNullable	start="^\s*\zs#\s*nullable\>" end="$" contains=csLineComment keepend
    162 
    163 if expand('%:e') == 'csx' || getline('1') =~ '^#!.*\<dotnet-script\>'
    164  syn region	csPreProcInclude	start="^\s*\zs#\s*\%(load\|r\)\>" end="$" contains=csLineComment keepend
    165  syn match	csShebang	"\%^#!.*" display
    166 endif
    167 
    168 syn cluster	csPreProcessor	contains=csPreProc.*
    169 
    170 syn region	csClassType	start="\<class\>"hs=s+6 end=">" end="[:{]"me=e-1 contains=csClass
    171 " csUserType may be defined by user scripts/plugins - it should be contained in csNewType
    172 syn region	csNewType	start="\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,@csNamespaceAlias,csUserType
    173 syn region	csIsType	start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
    174 syn region	csIsType	start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
    175 syn keyword	csNew	new contained
    176 syn keyword	csClass	class contained
    177 syn keyword	csIsAs	is as
    178 
    179 syn keyword	csBoolean	false true
    180 syn keyword	csNull	null
    181 
    182 " Strings and constants
    183 syn match	csSpecialError	"\\." contained
    184 syn match	csSpecialCharError	"[^']" contained
    185 " Character literals
    186 syn match	csSpecialChar	+\\["\\'0abfnrtv]+ contained display
    187 syn match	csUnicodeNumber	+\\x\x\{1,4}+ contained contains=csUnicodeSpecifier display
    188 syn match	csUnicodeNumber	+\\u\x\{4}+ contained contains=csUnicodeSpecifier display
    189 syn match	csUnicodeNumber	+\\U00\x\{6}+ contained contains=csUnicodeSpecifier display
    190 syn match	csUnicodeSpecifier	+\\[uUx]+ contained display
    191 
    192 syn region	csString	matchgroup=csQuote start=+"+ end=+"\%(u8\)\=+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
    193 
    194 for 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:i
    196  exe 'syn region csRawString'       .. s:i .. ' matchgroup=csQuote start=+\z("\{' .. s:i .. '}\)\s*$+ end=+^\s*\z1+ nextgroup=csRawStringError' .. s:i .. ' contains=csRawStringError' .. s:i
    197  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'
    202 endfor
    203 unlet s:i
    204 
    205 syn match	csCharacter	"'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display
    206 syn match	csCharacter	"'\\''" contains=csSpecialChar display
    207 syn match	csCharacter	"'[^\\]'" display
    208 
    209 " Numbers
    210 syn case	ignore
    211 syn match	csInteger	"\<0b[01_]*[01]\%([lu]\|lu\|ul\)\=\>" display
    212 syn match	csInteger	"\<\d\+\%(_\+\d\+\)*\%([lu]\|lu\|ul\)\=\>" display
    213 syn match	csInteger	"\<0x[[:xdigit:]_]*\x\%([lu]\|lu\|ul\)\=\>" display
    214 syn match	csReal	"\<\d\+\%(_\+\d\+\)*\.\d\+\%(_\+\d\+\)*\%\(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=" display
    215 syn match	csReal	"\.\d\+\%(_\+\d\+\)*\%(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=\>" display
    216 syn match	csReal	"\<\d\+\%(_\+\d\+\)*e[-+]\=\d\+\%(_\+\d\+\)*[fdm]\=\>" display
    217 syn match	csReal	"\<\d\+\%(_\+\d\+\)*[fdm]\>" display
    218 syn case	match
    219 syn cluster     csNumber	contains=csInteger,csReal
    220 
    221 syn region	csInterpolatedString	matchgroup=csQuote start=+\$"+ end=+"\%(u8\)\=+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
    222 
    223 syn region	csInterpolation	matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat
    224 syn match	csEscapedInterpolation	"{{" transparent contains=NONE display
    225 syn match	csEscapedInterpolation	"}}" transparent contains=NONE display
    226 syn region	csInterpolationAlign	matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=@csNumber,csBoolean,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display
    227 syn match	csInterpolationFormat	+:[^}]\+}+ contained contains=csInterpolationFormatDel display
    228 syn match	csInterpolationAlignDel	+,+ contained display
    229 syn match	csInterpolationFormatDel	+:+ contained display
    230 
    231 syn region	csVerbatimString	matchgroup=csQuote start=+@"+ end=+"\%(u8\)\=+ skip=+""+ extend contains=csVerbatimQuote,@Spell
    232 
    233 " Interpolated raw string literals
    234 for 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:i
    241 
    242  exe 'hi def link csInterpolationDelimiterError' .. s:i .. ' Error'
    243  exe 'hi def link csInterpolatedRawString'       .. s:i .. ' csRawString'
    244 endfor
    245 unlet s:i
    246 
    247 syn match	csVerbatimQuote	+""+ contained
    248 
    249 syn region	csInterVerbString	matchgroup=csQuote start=+$@"+ start=+@$"+ end=+"\%(u8\)\=+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell
    250 
    251 syn cluster	csString	contains=csString,csInterpolatedString,csVerbatimString,csInterVerbString,csRawString
    252 
    253 syn cluster	csLiteral	contains=csBoolean,@csNumber,csCharacter,@csString,csNull
    254 
    255 syn region	csBracketed	matchgroup=csParens start=+(+ end=+)+ extend contained transparent contains=@csAll,csBraced,csBracketed
    256 syn region	csBraced	matchgroup=csParens start=+{+ end=+}+ extend contained transparent contains=@csAll,csBraced,csBracketed
    257 
    258 syn cluster	csAll	contains=@csLiteral,csClassType,@csComment,csEndColon,csIsType,csLabel,csLogicSymbols,csNewType,csOpSymbols,csParens,@csPreProcessor,csSummary,@csNamespaceAlias,csType,csUnicodeNumber,csUserType,csUserIdentifier,csUserInterface,csUserMethod
    259 
    260 " Keyword identifiers
    261 syn match csIdentifier "@\h\w*"
    262 
    263 " The default highlighting.
    264 hi def link	csUnspecifiedStatement	Statement
    265 hi def link	csUnsupportedStatement	Statement
    266 hi def link	csUnspecifiedKeyword	Keyword
    267 
    268 hi def link	csGlobalNamespaceAlias	Include
    269 
    270 hi def link	csType	Type
    271 hi def link	csClassType	Type
    272 hi def link	csIsType	Type
    273 
    274 hi def link	csStorage	Structure
    275 hi def link	csClass	Structure
    276 hi def link	csNew	Statement
    277 hi def link	csIsAs 	Keyword
    278 hi def link	csAccessor	Keyword
    279 hi def link	csAccess	Keyword
    280 
    281 hi def link	csLinq	Statement
    282 
    283 hi def link	csStatement	Statement
    284 hi def link	csRepeat	Repeat
    285 hi def link	csConditional	Conditional
    286 hi def link	csLabel	Label
    287 hi def link	csException	Exception
    288 
    289 hi def link	csModifier	StorageClass
    290 hi def link	csAccessModifier	csModifier
    291 hi def link	csAsyncModifier	csModifier
    292 hi def link	csCheckedModifier	csModifier
    293 hi def link	csManagedModifier	csModifier
    294 hi def link	csUsingModifier	csModifier
    295 
    296 hi def link	csTodo	Todo
    297 hi def link	csComment	Comment
    298 hi def link	csLineComment	csComment
    299 hi def link	csBlockComment	csComment
    300 
    301 hi def link	csKeywordOperator	Keyword
    302 hi def link	csAsyncOperator	csKeywordOperator
    303 hi def link	csTypeOf	csKeywordOperator
    304 hi def link	csTypeOfOperand	Typedef
    305 hi def link	csTypeOfError	Error
    306 hi def link	csOpSymbols	Operator
    307 hi def link	csLogicSymbols	Operator
    308 
    309 hi def link	csSpecialError	Error
    310 hi def link	csSpecialCharError	Error
    311 hi def link	csString	String
    312 hi def link	csRawString	csString
    313 hi def link	csRawStringError	Error
    314 hi def link	csQuote	String
    315 hi def link	csInterpolatedString	String
    316 hi def link	csVerbatimString	String
    317 hi def link	csInterVerbString	String
    318 hi def link	csVerbatimQuote	SpecialChar
    319 
    320 hi def link     csPreProc	PreProc
    321 hi def link	csPreProcDeclaration	Define
    322 hi def link	csPreProcConditional	PreCondit
    323 hi def link	csPreProcLine	csPreProc
    324 hi def link	csPreProcDiagnostic	csPreProc
    325 hi def link	csPreProcRegion	csPreProc
    326 hi def link	csPreProcPragma	csPreProc
    327 hi def link	csPreProcNullable	csPreProc
    328 hi def link	csPreProcInclude	csPreProc
    329 hi def link	csShebang	csPreProc
    330 
    331 hi def link	csConstant	Constant
    332 hi def link	csNull	Constant
    333 hi def link	csBoolean	Boolean
    334 hi def link	csCharacter	Character
    335 hi def link	csSpecialChar	SpecialChar
    336 hi def link	csInteger	Number
    337 hi def link	csReal	Float
    338 hi def link	csUnicodeNumber	SpecialChar
    339 hi def link	csUnicodeSpecifier	SpecialChar
    340 hi def link	csInterpolationDelimiter	Delimiter
    341 hi def link	csInterpolationAlignDel	csInterpolationDelimiter
    342 hi def link	csInterpolationFormat	csInterpolationDelimiter
    343 hi def link	csInterpolationFormatDel	csInterpolationDelimiter
    344 
    345 hi def link	csGenericBraces	csBraces
    346 
    347 " xml markup
    348 hi def link	csXmlLineCommentLeader	Comment
    349 hi def link	csXmlLineComment	Comment
    350 hi def link	csXmlBlockComment	Comment
    351 hi def link	csXmlBlockCommentMiddle	csXmlBlockComment
    352 hi def link	csXmlTag	Statement
    353 hi def link	csXmlAttrib	Statement
    354 
    355 let b:current_syntax = 'cs'
    356 
    357 let &cpoptions = s:save_cpo
    358 unlet s:save_cpo
    359 
    360 " vim: vts=16,28