Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 2 | " Language: C# |
| 3 | " Maintainer: Nick Jensen <nickspoon@gmail.com> |
| 4 | " Former Maintainers: Anduin Withers <awithers@anduin.com> |
| 5 | " Johannes Zellner <johannes@zellner.org> |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 6 | " Last Change: 2020-11-23 |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 7 | " Filenames: *.cs |
| 8 | " License: Vim (see :h license) |
| 9 | " Repository: https://github.com/nickspoons/vim-cs |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 10 | " |
| 11 | " REFERENCES: |
| 12 | " [1] ECMA TC39: C# Language Specification (WD13Oct01.doc) |
| 13 | |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 14 | if exists('b:current_syntax') |
| 15 | finish |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 16 | endif |
| 17 | |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 18 | let s:save_cpo = &cpoptions |
| 19 | set cpoptions&vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 20 | |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 21 | syn keyword csType bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic |
| 22 | syn keyword csStorage delegate enum interface namespace struct |
| 23 | syn keyword csRepeat break continue do for foreach goto return while |
| 24 | syn keyword csConditional else if switch |
| 25 | syn keyword csLabel case default |
| 26 | syn match csOperatorError display +::+ |
| 27 | syn match csGlobal display +global::+ |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 28 | " user labels (see [1] 8.6 Statements) |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 29 | syn match csLabel display +^\s*\I\i*\s*:\%([^:]\)\@=+ |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 30 | syn keyword csModifier abstract const extern internal override private protected public readonly sealed static virtual volatile |
| 31 | syn keyword csConstant false null true |
| 32 | syn keyword csException try catch finally throw when |
| 33 | syn keyword csLinq ascending by descending equals from group in into join let on orderby select where |
| 34 | syn keyword csAsync async await |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 35 | |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 36 | syn keyword csUnspecifiedStatement as base checked event fixed in is lock nameof operator out params ref sizeof stackalloc this unchecked unsafe using |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 37 | syn keyword csUnsupportedStatement add remove value |
| 38 | syn keyword csUnspecifiedKeyword explicit implicit |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 39 | |
Bram Moolenaar | 9c10238 | 2006-05-03 21:26:49 +0000 | [diff] [blame] | 40 | " Contextual Keywords |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 41 | syn match csContextualStatement /\<yield[[:space:]\n]\+\%(return\|break\)/me=s+5 |
| 42 | syn match csContextualStatement /\<partial[[:space:]\n]\+\%(class\|struct\|interface\)/me=s+7 |
| 43 | syn match csContextualStatement /\<\%(get\|set\)\%(;\|[[:space:]\n]*{\)/me=s+3 |
| 44 | syn match csContextualStatement /\<\%(get\|set\)\s*=>/me=s+3 |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 45 | syn match csContextualStatement /\<where\>[^:]\+:/me=s+5 |
| 46 | |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 47 | " Operators |
| 48 | syn keyword csTypeOf typeof contained |
| 49 | syn region csTypeOfStatement start="typeof(" end=")" contains=csType, csTypeOf |
| 50 | |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 51 | " Punctuation |
| 52 | syn match csBraces "[{}\[\]]" display |
| 53 | syn match csParens "[()]" display |
Bram Moolenaar | 088e8e3 | 2019-08-08 22:15:18 +0200 | [diff] [blame] | 54 | syn match csOpSymbols "+\{1,2}" display |
| 55 | syn match csOpSymbols "-\{1,2}" display |
| 56 | syn match csOpSymbols "=\{1,2}" display |
| 57 | syn match csOpSymbols ">\{1,2}" display |
| 58 | syn match csOpSymbols "<\{1,2}" display |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 59 | syn match csOpSymbols "[!><+\-*/]=" display |
| 60 | syn match csOpSymbols "[!*/^]" display |
| 61 | syn match csOpSymbols "=>" display |
| 62 | syn match csEndColon ";" display |
| 63 | syn match csLogicSymbols "&&" display |
| 64 | syn match csLogicSymbols "||" display |
| 65 | syn match csLogicSymbols "?" display |
| 66 | syn match csLogicSymbols ":" display |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 67 | |
Bram Moolenaar | 088e8e3 | 2019-08-08 22:15:18 +0200 | [diff] [blame] | 68 | " Generics |
| 69 | syn region csGeneric matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,csUserType,csUserIdentifier,csUserInterface,csUserMethod |
| 70 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 71 | " Comments |
| 72 | " |
| 73 | " PROVIDES: @csCommentHook |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 74 | syn keyword csTodo contained TODO FIXME XXX NOTE HACK TBD |
| 75 | syn region csComment start="/\*" end="\*/" contains=@csCommentHook,csTodo,@Spell |
| 76 | syn match csComment "//.*$" contains=@csCommentHook,csTodo,@Spell |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 77 | |
| 78 | " xml markup inside '///' comments |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 79 | syn cluster xmlRegionHook add=csXmlCommentLeader |
| 80 | syn cluster xmlCdataHook add=csXmlCommentLeader |
| 81 | syn cluster xmlStartTagHook add=csXmlCommentLeader |
| 82 | syn keyword csXmlTag contained Libraries Packages Types Excluded ExcludedTypeName ExcludedLibraryName |
| 83 | syn keyword csXmlTag contained ExcludedBucketName TypeExcluded Type TypeKind TypeSignature AssemblyInfo |
| 84 | syn keyword csXmlTag contained AssemblyName AssemblyPublicKey AssemblyVersion AssemblyCulture Base |
| 85 | syn keyword csXmlTag contained BaseTypeName Interfaces Interface InterfaceName Attributes Attribute |
| 86 | syn keyword csXmlTag contained AttributeName Members Member MemberSignature MemberType MemberValue |
| 87 | syn keyword csXmlTag contained ReturnValue ReturnType Parameters Parameter MemberOfPackage |
| 88 | syn keyword csXmlTag contained ThreadingSafetyStatement Docs devdoc example overload remarks returns summary |
| 89 | syn keyword csXmlTag contained threadsafe value internalonly nodoc exception param permission platnote |
| 90 | syn keyword csXmlTag contained seealso b c i pre sub sup block code note paramref see subscript superscript |
| 91 | syn keyword csXmlTag contained list listheader item term description altcompliant altmember |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 92 | |
| 93 | syn cluster xmlTagHook add=csXmlTag |
| 94 | |
Bram Moolenaar | 088e8e3 | 2019-08-08 22:15:18 +0200 | [diff] [blame] | 95 | syn match csXmlCommentLeader "///" contained |
| 96 | syn match csXmlComment "///.*$" contains=csXmlCommentLeader,@csXml,@Spell keepend |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 97 | syn include @csXml syntax/xml.vim |
| 98 | hi def link xmlRegion Comment |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 99 | |
Bram Moolenaar | 560979e | 2020-02-04 22:53:05 +0100 | [diff] [blame] | 100 | " Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here. |
| 101 | syn spell default |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 102 | |
| 103 | " [1] 9.5 Pre-processing directives |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 104 | syn region csPreCondit start="^\s*#\s*\%(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\|pragma\)\>" skip="\\$" end="$" contains=csComment keepend |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 105 | syn region csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$" end="^\s*#\s*endregion" transparent fold contains=TOP |
| 106 | syn region csSummary start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 107 | |
| 108 | |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 109 | syn region csClassType start="@\@1<!\<class\>"hs=s+6 end="[:\n{]"me=e-1 contains=csClass |
Bram Moolenaar | 088e8e3 | 2019-08-08 22:15:18 +0200 | [diff] [blame] | 110 | " csUserType may be defined by user scripts/plugins - it should be contained in csNewType |
| 111 | syn region csNewType start="@\@1<!\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,csUserType |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 112 | syn region csIsType start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs |
| 113 | syn region csIsType start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs |
| 114 | syn keyword csNew new contained |
| 115 | syn keyword csClass class contained |
| 116 | syn keyword csIsAs is as |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 117 | |
| 118 | " Strings and constants |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 119 | syn match csSpecialError "\\." contained |
| 120 | syn match csSpecialCharError "[^']" contained |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 121 | " [1] 9.4.4.4 Character literals |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 122 | syn match csSpecialChar +\\["\\'0abfnrtvx]+ contained display |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 123 | syn match csUnicodeNumber +\\x\x\{2,4}+ contained contains=csUnicodeSpecifier display |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 124 | syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display |
| 125 | syn match csUnicodeNumber +\\U\x\{8}+ contained contains=csUnicodeSpecifier display |
| 126 | syn match csUnicodeSpecifier +\\[uU]+ contained display |
| 127 | |
| 128 | syn region csString matchgroup=csQuote start=+"+ end=+"+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 129 | syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 130 | syn match csCharacter "'\\''" contains=csSpecialChar display |
| 131 | syn match csCharacter "'[^\\]'" display |
| 132 | syn match csNumber "\<0[0-7]*[lL]\=\>" display |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 133 | syn match csNumber "\<0[xX][[:xdigit:]_]\+[lL]\=\>" display |
| 134 | syn match csNumber "\<0[bB][01_]\+[lL]\=\>" display |
| 135 | syn match csNumber "\<[[:digit:]_]\+[lL]\=\>" display |
| 136 | syn match csNumber "\<[[:digit:]_]\+\.[[:digit:]_]*\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\=" display |
| 137 | syn match csNumber "\.[[:digit:]_]\+\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\=" display |
| 138 | syn match csNumber "\<[[:digit:]_]\+[eE][-+]\=[[:digit:]_]\+[fFdDmM]\=\>" display |
| 139 | syn match csNumber "\<[[:digit:]_]\+\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\>" display |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 140 | |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 141 | syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 142 | |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 143 | syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 144 | syn match csEscapedInterpolation "{{" transparent contains=NONE display |
| 145 | syn match csEscapedInterpolation "}}" transparent contains=NONE display |
| 146 | syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=csNumber,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display |
| 147 | syn match csInterpolationFormat +:[^}]\+}+ contained contains=csInterpolationFormatDel display |
| 148 | syn match csInterpolationAlignDel +,+ contained display |
| 149 | syn match csInterpolationFormatDel +:+ contained display |
| 150 | |
| 151 | syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"+ skip=+""+ extend contains=csVerbatimQuote,@Spell |
| 152 | syn match csVerbatimQuote +""+ contained |
| 153 | syn match csQuoteError +@$"+he=s+2,me=s+2 |
| 154 | |
| 155 | syn region csInterVerbString matchgroup=csQuote start=+\$@"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell |
| 156 | |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 157 | syn region csBracketed matchgroup=csParens start=+(+ end=+)+ extend contained transparent contains=@csAll,csBraced,csBracketed |
| 158 | syn region csBraced matchgroup=csParens start=+{+ end=+}+ extend contained transparent contains=@csAll,csBraced,csBracketed |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 159 | |
Bram Moolenaar | 23515b4 | 2020-11-29 14:36:24 +0100 | [diff] [blame] | 160 | syn cluster csAll contains=csCharacter,csClassType,csComment,csContextualStatement,csEndColon,csIsType,csLabel,csLogicSymbols,csNewType,csConstant,csNumber,csOpSymbols,csOperatorError,csParens,csPreCondit,csRegion,csString,csSummary,csType,csUnicodeNumber,csUnicodeSpecifier,csInterpolatedString,csVerbatimString,csInterVerbString,csUserType,csUserIdentifier,csUserInterface,csUserMethod |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 161 | |
| 162 | " The default highlighting. |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 163 | hi def link csType Type |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 164 | hi def link csClassType Type |
| 165 | hi def link csIsType Type |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 166 | hi def link csStorage Structure |
| 167 | hi def link csClass Structure |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 168 | hi def link csRepeat Repeat |
| 169 | hi def link csConditional Conditional |
| 170 | hi def link csLabel Label |
| 171 | hi def link csModifier StorageClass |
| 172 | hi def link csConstant Constant |
| 173 | hi def link csException Exception |
Bram Moolenaar | 088e8e3 | 2019-08-08 22:15:18 +0200 | [diff] [blame] | 174 | hi def link csTypeOf Keyword |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 175 | hi def link csTypeOfStatement Typedef |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 176 | hi def link csUnspecifiedStatement Statement |
| 177 | hi def link csUnsupportedStatement Statement |
| 178 | hi def link csUnspecifiedKeyword Keyword |
| 179 | hi def link csNew Statement |
| 180 | hi def link csLinq Statement |
| 181 | hi def link csIsAs Keyword |
| 182 | hi def link csAsync Keyword |
| 183 | hi def link csContextualStatement Statement |
| 184 | hi def link csOperatorError Error |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 185 | |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 186 | hi def link csTodo Todo |
| 187 | hi def link csComment Comment |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 188 | |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 189 | hi def link csOpSymbols Operator |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 190 | hi def link csLogicSymbols Operator |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 191 | |
| 192 | hi def link csSpecialError Error |
| 193 | hi def link csSpecialCharError Error |
| 194 | hi def link csString String |
| 195 | hi def link csQuote String |
| 196 | hi def link csQuoteError Error |
| 197 | hi def link csInterpolatedString String |
| 198 | hi def link csVerbatimString String |
| 199 | hi def link csInterVerbString String |
| 200 | hi def link csVerbatimQuote SpecialChar |
| 201 | hi def link csPreCondit PreCondit |
| 202 | hi def link csCharacter Character |
| 203 | hi def link csSpecialChar SpecialChar |
| 204 | hi def link csNumber Number |
| 205 | hi def link csUnicodeNumber SpecialChar |
| 206 | hi def link csUnicodeSpecifier SpecialChar |
| 207 | hi def link csInterpolationDelimiter Delimiter |
| 208 | hi def link csInterpolationAlignDel csInterpolationDelimiter |
| 209 | hi def link csInterpolationFormat csInterpolationDelimiter |
| 210 | hi def link csInterpolationFormatDel csInterpolationDelimiter |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 211 | |
Bram Moolenaar | 088e8e3 | 2019-08-08 22:15:18 +0200 | [diff] [blame] | 212 | hi def link csGenericBraces csBraces |
| 213 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 214 | " xml markup |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 215 | hi def link csXmlCommentLeader Comment |
| 216 | hi def link csXmlComment Comment |
| 217 | hi def link csXmlTag Statement |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 218 | |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 219 | let b:current_syntax = 'cs' |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 220 | |
Bram Moolenaar | d47d522 | 2018-12-09 20:43:55 +0100 | [diff] [blame] | 221 | let &cpoptions = s:save_cpo |
| 222 | unlet s:save_cpo |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 223 | |
Bram Moolenaar | a9604e6 | 2018-07-21 05:56:22 +0200 | [diff] [blame] | 224 | " vim: vts=16,28 |