blob: 111bc85dfed753ccab726213d766fe966290c5db [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar85eee132018-05-06 17:57:30 +02002" Language: C#
3" Maintainer: Nick Jensen <nickspoon@gmail.com>
4" Former Maintainer: Anduin Withers <awithers@anduin.com>
Bram Moolenaar9c102382006-05-03 21:26:49 +00005" Former Maintainer: Johannes Zellner <johannes@zellner.org>
Bram Moolenaar85eee132018-05-06 17:57:30 +02006" Last Change: 2018-05-02
7" 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
14if exists("b:current_syntax")
15 finish
16endif
17
18let s:cs_cpo_save = &cpo
19set cpo&vim
20
21
Bram Moolenaar85eee132018-05-06 17:57:30 +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
Bram Moolenaar071d4272004-06-13 20:20:40 +000024syn keyword csRepeat break continue do for foreach goto return while
25syn keyword csConditional else if switch
26syn keyword csLabel case default
27" there's no :: operator in C#
28syn match csOperatorError display +::+
29" user labels (see [1] 8.6 Statements)
30syn match csLabel display +^\s*\I\i*\s*:\([^:]\)\@=+
Bram Moolenaar071d4272004-06-13 20:20:40 +000031syn keyword csModifier abstract const extern internal override private protected public readonly sealed static virtual volatile
Bram Moolenaar071d4272004-06-13 20:20:40 +000032syn keyword csConstant false null true
Bram Moolenaar85eee132018-05-06 17:57:30 +020033syn 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 Moolenaar85eee132018-05-06 17:57:30 +020037syn keyword csUnspecifiedStatement as base checked event fixed get in is lock nameof operator out params ref set sizeof stackalloc this typeof unchecked unsafe using
Bram Moolenaar9c102382006-05-03 21:26:49 +000038syn keyword csUnsupportedStatement add remove value
Bram Moolenaar071d4272004-06-13 20:20:40 +000039syn keyword csUnspecifiedKeyword explicit implicit
40
Bram Moolenaar9c102382006-05-03 21:26:49 +000041" 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000046
47" Comments
48"
49" PROVIDES: @csCommentHook
50"
51" TODO: include strings ?
52"
Bram Moolenaar85eee132018-05-06 17:57:30 +020053syn keyword csTodo contained TODO FIXME XXX NOTE HACK
Bram Moolenaar551dbcc2006-04-25 22:13:59 +000054syn region csComment start="/\*" end="\*/" contains=@csCommentHook,csTodo,@Spell
55syn match csComment "//.*$" contains=@csCommentHook,csTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000056
57" xml markup inside '///' comments
58syn cluster xmlRegionHook add=csXmlCommentLeader
59syn cluster xmlCdataHook add=csXmlCommentLeader
60syn cluster xmlStartTagHook add=csXmlCommentLeader
61syn keyword csXmlTag contained Libraries Packages Types Excluded ExcludedTypeName ExcludedLibraryName
62syn keyword csXmlTag contained ExcludedBucketName TypeExcluded Type TypeKind TypeSignature AssemblyInfo
63syn keyword csXmlTag contained AssemblyName AssemblyPublicKey AssemblyVersion AssemblyCulture Base
64syn keyword csXmlTag contained BaseTypeName Interfaces Interface InterfaceName Attributes Attribute
65syn keyword csXmlTag contained AttributeName Members Member MemberSignature MemberType MemberValue
66syn keyword csXmlTag contained ReturnValue ReturnType Parameters Parameter MemberOfPackage
67syn keyword csXmlTag contained ThreadingSafetyStatement Docs devdoc example overload remarks returns summary
68syn keyword csXmlTag contained threadsafe value internalonly nodoc exception param permission platnote
69syn keyword csXmlTag contained seealso b c i pre sub sup block code note paramref see subscript superscript
70syn keyword csXmlTag contained list listheader item term description altcompliant altmember
71
72syn cluster xmlTagHook add=csXmlTag
73
74syn match csXmlCommentLeader +\/\/\/+ contained
Bram Moolenaar5c736222010-01-06 20:54:52 +010075syn match csXmlComment +\/\/\/.*$+ contains=csXmlCommentLeader,@csXml,@Spell
76syntax include @csXml syntax/xml.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000077hi def link xmlRegion Comment
78
79
80" [1] 9.5 Pre-processing directives
81syn region csPreCondit
Bram Moolenaar9c102382006-05-03 21:26:49 +000082 \ start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +000083 \ skip="\\$" end="$" contains=csComment keepend
Bram Moolenaar9c102382006-05-03 21:26:49 +000084syn region csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$"
85 \ end="^\s*#\s*endregion" transparent fold contains=TOP
Bram Moolenaar85eee132018-05-06 17:57:30 +020086syn region csSummary start="^\s*/// <summary" end="^\(\s*///\)\@!" transparent fold keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +000087
88
Bram Moolenaar85eee132018-05-06 17:57:30 +020089syn region csClassType start="\(@\)\@<!class\>"hs=s+6 end="[:\n{]"he=e-1 contains=csClass
90syn region csNewType start="\(@\)\@<!new\>"hs=s+4 end="[\(\<{\[]"he=e-1 contains=csNew contains=csNewType
91syn region csIsType start="\v (is|as) "hs=s+4 end="\v[A-Za-z0-9]+" oneline contains=csIsAs
92syn keyword csNew new contained
93syn keyword csClass class contained
94syn keyword csIsAs is as
Bram Moolenaar071d4272004-06-13 20:20:40 +000095
96" Strings and constants
97syn match csSpecialError contained "\\."
98syn match csSpecialCharError contained "[^']"
99" [1] 9.4.4.4 Character literals
100syn match csSpecialChar contained +\\["\\'0abfnrtvx]+
101" unicode characters
102syn match csUnicodeNumber +\\\(u\x\{4}\|U\x\{8}\)+ contained contains=csUnicodeSpecifier
103syn match csUnicodeSpecifier +\\[uU]+ contained
Bram Moolenaar5c736222010-01-06 20:54:52 +0100104syn region csVerbatimString start=+@"+ end=+"+ skip=+""+ contains=csVerbatimSpec,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105syn match csVerbatimSpec +@"+he=s+1 contained
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000106syn region csString start=+"+ end=+"+ end=+$+ contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError
108syn match csCharacter "'\\''" contains=csSpecialChar
109syn match csCharacter "'[^\\]'"
110syn match csNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
111syn match csNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
112syn match csNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
113syn match csNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
114
115" The default highlighting.
116hi def link csType Type
Bram Moolenaar85eee132018-05-06 17:57:30 +0200117hi def link csNewType Type
118hi def link csClassType Type
119hi def link csIsType Type
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120hi def link csStorage StorageClass
Bram Moolenaar85eee132018-05-06 17:57:30 +0200121hi def link csClass StorageClass
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122hi def link csRepeat Repeat
123hi def link csConditional Conditional
124hi def link csLabel Label
125hi def link csModifier StorageClass
126hi def link csConstant Constant
127hi def link csException Exception
128hi def link csUnspecifiedStatement Statement
129hi def link csUnsupportedStatement Statement
130hi def link csUnspecifiedKeyword Keyword
Bram Moolenaar85eee132018-05-06 17:57:30 +0200131hi def link csNew Statement
132hi def link csLinq Statement
133hi def link csIsAs Keyword
134hi def link csAsync Keyword
Bram Moolenaar9c102382006-05-03 21:26:49 +0000135hi def link csContextualStatement Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136hi def link csOperatorError Error
Bram Moolenaar85eee132018-05-06 17:57:30 +0200137hi def link csInterfaceDeclaration Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000138
139hi def link csTodo Todo
140hi def link csComment Comment
141
142hi def link csSpecialError Error
143hi def link csSpecialCharError Error
144hi def link csString String
145hi def link csVerbatimString String
146hi def link csVerbatimSpec SpecialChar
147hi def link csPreCondit PreCondit
148hi def link csCharacter Character
149hi def link csSpecialChar SpecialChar
150hi def link csNumber Number
151hi def link csUnicodeNumber SpecialChar
152hi def link csUnicodeSpecifier SpecialChar
153
154" xml markup
155hi def link csXmlCommentLeader Comment
156hi def link csXmlComment Comment
157hi def link csXmlTag Statement
158
159let b:current_syntax = "cs"
160
161let &cpo = s:cs_cpo_save
162unlet s:cs_cpo_save
163
164" vim: ts=8