xref: /vim-8.2.3635/runtime/syntax/d.vim (revision 071d4279)
1" Vim syntax file for the D programming language (version 0.90).
2"
3" Language:     D
4" Maintainer:   Jason Mills<[email protected]>
5" URL:
6" Last Change:  2004 May 21
7" Version:      0.8
8"
9" Options:
10"   d_comment_strings - set to highlight strings and numbers in comments
11"
12"   d_hl_operator_overload - set to highlight D's specially named functions
13"   that when overloaded implement unary and binary operators (e.g. cmp).
14"
15" Todo:
16"   - Allow user to set sync minlines
17"
18"   - Several keywords (namely, in and out) are both storage class and
19"   statements, depending on their context. Must use some matching to figure
20"   out which and highlight appropriately. For now I have made such keywords
21"   statements.
22"
23"   - Mark contents of the asm statement body as special
24"
25
26" Quit when a syntax file was already loaded
27if exists("b:current_syntax")
28  finish
29endif
30
31" Keyword definitions
32"
33syn keyword dExternal	     import module extern
34syn keyword dConditional     if else switch
35syn keyword dBranch	     goto break continue
36syn keyword dRepeat	     while for do foreach
37syn keyword dBoolean	     true false
38syn keyword dConstant	     null
39syn keyword dTypedef	     alias typedef
40syn keyword dStructure	     template interface class enum struct union
41syn keyword dOperator	     new delete typeof cast align is
42syn keyword dOperator	     this super
43if exists("d_hl_operator_overload")
44  syn keyword dOpOverload  opNeg opCom opPostInc opPostDec opAdd opSub opSub_r
45  syn keyword dOpOverload  opMul opDiv opDiv_r opMod opMod_r opAnd opOr opXor
46  syn keyword dOpOverload  opShl opShl_r opShr opShr_r opUShr opUShr_r opCat
47  syn keyword dOpOverload  opCat_r opEquals opEquals opCmp opCmp opCmp opCmp
48  syn keyword dOpOverload  opAddAssign opSubAssign opMulAssign opDivAssign
49  syn keyword dOpOverload  opModAssign opAndAssign opOrAssign opXorAssign
50  syn keyword dOpOverload  opShlAssign opShrAssign opUShrAssign opCatAssign
51  syn keyword dOpOverload  opIndex opCall opSlice
52endif
53syn keyword dType	     ushort int uint long ulong float
54syn keyword dType	     void byte ubyte double bit char wchar ucent cent
55syn keyword dType	     short bool dchar
56syn keyword dType	     real ireal ifloat idouble creal cfloat cdouble
57syn keyword dDebug	     deprecated unittest
58syn keyword dExceptions      throw try catch finally
59syn keyword dScopeDecl       public protected private export
60syn keyword dStatement       version debug return with invariant body
61syn keyword dStatement       in out inout asm mixin
62syn keyword dStatement       function delegate
63syn keyword dStorageClass    auto static override final const abstract volatile
64syn keyword dStorageClass    synchronized
65syn keyword dPragma	     pragma
66
67
68" Assert is a statement and a module name.
69syn match dAssert "^assert\>"
70syn match dAssert "[^.]\s*\<assert\>"ms=s+1
71
72" Marks contents of the asm statment body as special
73"
74" TODO
75"syn match dAsmStatement "\<asm\>"
76"syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement
77"
78"hi def link dAsmBody dUnicode
79"hi def link dAsmStatement dStatement
80
81" Labels
82"
83" We contain dScopeDecl so public: private: etc. are not highlighted like labels
84syn match   dUserLabel       "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl
85syn keyword dLabel	     case default
86
87" Comments
88"
89syn keyword dTodo	      contained TODO FIXME TEMP XXX
90syn match   dCommentStar      contained "^\s*\*[^/]"me=e-1
91syn match   dCommentStar      contained "^\s*\*$"
92syn match   dCommentPlus      contained "^\s*+[^/]"me=e-1
93syn match   dCommentPlus      contained "^\s*+$"
94if exists("d_comment_strings")
95  syn region  dBlockCommentString   contained  start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell
96  syn region  dNestedCommentString  contained  start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell
97  syn region  dLineCommentString    contained start=+"+  end=+$\|"+ contains=dUnicode,dEscSequence,@Spell
98  syn region  dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
99  syn region  dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
100  syn match   dLineComment      "//.*" contains=dLineCommentString,dTodo,@Spell
101else
102  syn region  dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
103  syn region  dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
104  syn match   dLineComment      "//.*" contains=dLineCommentString,dTodo,@Spell
105endif
106
107hi link dLineCommentString dBlockCommentString
108hi link dBlockCommentString dString
109hi link dNestedCommentString dString
110hi link dCommentStar  dBlockComment
111hi link dCommentPlus  dNestedComment
112
113syn sync minlines=25
114
115" Characters
116"
117syn match dSpecialCharError contained "[^']"
118
119" Escape sequences (oct,specal char,hex,wchar). These are not contained
120" because they are considered string litterals
121syn match dEscSequence "\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)"
122syn match dCharacter  "'[^']*'" contains=dEscSequence,dSpecialCharError
123syn match dCharacter  "'\\''" contains=dEscSequence
124syn match dCharacter  "'[^\\]'"
125
126" Unicode characters
127"
128syn match   dUnicode "\\u\d\{4\}"
129
130" String.
131"
132syn region  dString start=+"+ end=+"+ contains=dEscSequence,@Spell
133syn region  dRawString start=+`+ skip=+\\`+ end=+`+ contains=@Spell
134syn region  dRawString start=+r"+ skip=+\\"+ end=+"+ contains=@Spell
135syn region  dHexString start=+x"+ skip=+\\"+ end=+"+
136
137" Numbers
138"
139syn case ignore
140syn match dInt        display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>"
141" Hex number
142syn match dHex        display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>"
143syn match dHex        display "\<\x[0-9a-f_]*h\(u\=l\=\|l\=u\=\)\>"
144" Flag the first zero of an octal number as something special
145syn match dOctal      display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>" contains=cOctalZero
146syn match dOctalZero  display contained "\<0"
147
148"floating point without the dot
149syn match dFloat      display "\<\d[0-9_]*\(fi\=\|l\=i\)\>"
150"floating point number, with dot, optional exponent
151syn match dFloat      display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\="
152"floating point number, starting with a dot, optional exponent
153syn match dFloat      display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>"
154"floating point number, without dot, with exponent
155"syn match dFloat      display "\<\d\+e[-+]\=\d\+[fl]\=\>"
156syn match dFloat      display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>"
157
158"floating point without the dot
159syn match dHexFloat      display "\<0x\x\+\(fi\=\|l\=i\)\>"
160"floating point number, with dot, optional exponent
161syn match dHexFloat      display "\<0x\x\+\.\x*\(p[-+]\=\x\+\)\=[fl]\=i\="
162"floating point number, without dot, with exponent
163syn match dHexFloat      display "\<0x\x\+p[-+]\=\x\+[fl]\=\>"
164
165" binary numbers
166syn match dBinary     display "\<0b[01_]\+\>"
167" flag an octal number with wrong digits
168syn match dOctalError display "0\o*[89]\d*"
169syn case match
170
171" Pragma (preprocessor) support
172" TODO: Highlight following Integer and optional Filespec.
173syn region  dPragma start="#\s*\(line\>\)" skip="\\$" end="$"
174
175
176" The default highlighting.
177"
178hi def link dBinary		Number
179hi def link dInt		Number
180hi def link dHex		Number
181hi def link dOctal		Number
182hi def link dFloat		Float
183hi def link dHexFloat		Float
184hi def link dDebug		Debug
185hi def link dBranch		Conditional
186hi def link dConditional	Conditional
187hi def link dLabel		Label
188hi def link dUserLabel		Label
189hi def link dRepeat		Repeat
190hi def link dExceptions		Exception
191hi def link dAssert		Statement
192hi def link dStatement		Statement
193hi def link dScopeDecl		dStorageClass
194hi def link dStorageClass	StorageClass
195hi def link dBoolean		Boolean
196hi def link dUnicode		Special
197hi def link dRawString		String
198hi def link dString		String
199hi def link dHexString		String
200hi def link dCharacter		Character
201hi def link dEscSequence	SpecialChar
202hi def link dSpecialCharError	Error
203hi def link dOctalError		Error
204hi def link dOperator		Operator
205hi def link dOpOverload		Operator
206hi def link dConstant		Constant
207hi def link dTypedef		Typedef
208hi def link dStructure		Structure
209hi def link dTodo		Todo
210hi def link dType		Type
211hi def link dLineComment	Comment
212hi def link dBlockComment	Comment
213hi def link dNestedComment	Comment
214hi def link dExternal		Include
215hi def link dPragma		PreProc
216
217let b:current_syntax = "d"
218
219" vim: ts=8
220