xref: /vim-8.2.3635/runtime/syntax/eiffel.vim (revision cf2d8dee)
1" Eiffel syntax file
2" Language:	Eiffel
3" Maintainer: Jocelyn Fiat <[email protected]>
4" Previous maintainer:	Reimer Behrends <[email protected]>
5" Contributions from: Thilo Six
6"
7" URL: https://github.com/eiffelhub/vim-eiffel
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11  syntax clear
12elseif exists("b:current_syntax")
13  finish
14endif
15
16let s:keepcpo= &cpo
17set cpo&vim
18
19" Option handling
20
21if exists("eiffel_ignore_case")
22  syn case ignore
23else
24  syn case match
25  if exists("eiffel_pedantic") || exists("eiffel_strict")
26    syn keyword eiffelError	current void result precursor none
27    syn keyword eiffelError	CURRENT VOID RESULT PRECURSOR None
28    syn keyword eiffelError	TRUE FALSE
29  endif
30  if exists("eiffel_pedantic")
31    syn keyword eiffelError	true false
32    syn match eiffelError	"\<[a-z_]\+[A-Z][a-zA_Z_]*\>"
33    syn match eiffelError	"\<[A-Z][a-z_]*[A-Z][a-zA-Z_]*\>"
34  endif
35  if exists("eiffel_lower_case_predef")
36    syn keyword eiffelPredefined current void result precursor
37  endif
38endif
39
40if exists("eiffel_hex_constants")
41  syn match  eiffelNumber	"\d[0-9a-fA-F]*[xX]"
42endif
43
44" Keyword definitions
45
46syn keyword eiffelTopStruct	note indexing feature creation inherit
47syn match   eiffelTopStruct	"\<class\>"
48syn match   eiffelKeyword	"\<end\>"
49syn match   eiffelTopStruct	"^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName
50syn match   eiffelBrackets	"[[\]]"
51syn match eiffelBracketError	"\]"
52syn region eiffelGeneric	transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct
53if exists("eiffel_ise")
54  syn match   eiffelAgent	"\<agent\>"
55  syn match   eiffelConvert	"\<convert\>"
56  syn match   eiffelCreate	"\<create\>"
57  syn match   eiffelTopStruct	contained "\<create\>"
58  syn match   eiffelTopStruct	contained "\<convert\>"
59  syn match   eiffelGenericCreate  contained "\<create\>"
60  syn match   eiffelTopStruct	"^create\>"
61  syn region  eiffelGenericDecl	transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets
62  syn region  eiffelClassHeader	start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets
63endif
64syn keyword eiffelDeclaration	is do once deferred unique local attribute assign
65syn keyword eiffelDeclaration	attached detachable Unique
66syn keyword eiffelProperty	expanded obsolete separate frozen
67syn keyword eiffelProperty	prefix infix
68syn keyword eiffelInheritClause	rename redefine undefine select export as
69syn keyword eiffelAll		all
70syn keyword eiffelKeyword	external alias some
71syn keyword eiffelStatement	if else elseif inspect
72syn keyword eiffelStatement	when then
73syn match   eiffelAssertion	"\<require\(\s\+else\)\=\>"
74syn match   eiffelAssertion	"\<ensure\(\s\+then\)\=\>"
75syn keyword eiffelAssertion	check
76syn keyword eiffelDebug		debug
77syn keyword eiffelStatement	across from until loop
78syn keyword eiffelAssertion	variant
79syn match   eiffelAssertion	"\<invariant\>"
80syn match   eiffelTopStruct	"^invariant\>"
81syn keyword eiffelException	rescue retry
82
83syn keyword eiffelPredefined	Current Void Result Precursor
84
85" Operators
86syn match   eiffelOperator	"\<and\(\s\+then\)\=\>"
87syn match   eiffelOperator	"\<or\(\s\+else\)\=\>"
88syn keyword eiffelOperator	xor implies not
89syn keyword eiffelOperator	strip old
90syn keyword eiffelOperator	Strip
91syn match   eiffelOperator	"\$"
92syn match   eiffelCreation	"!"
93syn match   eiffelExport	"[{}]"
94syn match   eiffelArray		"<<"
95syn match   eiffelArray		">>"
96syn match   eiffelConstraint	"->"
97syn match   eiffelOperator	"[@#|&][^ \e\t\b%]*"
98
99" Special classes
100syn keyword eiffelAnchored	like
101syn keyword eiffelBitType	BIT
102
103" Constants
104if !exists("eiffel_pedantic")
105  syn keyword eiffelBool	true false
106endif
107syn keyword eiffelBool		True False
108syn region  eiffelString	start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError
109syn match   eiffelStringEscape	contained "%[^/]"
110syn match   eiffelStringEscape	contained "%/\d\+/"
111syn match   eiffelStringEscape	contained "^[ \t]*%"
112syn match   eiffelStringEscape	contained "%[ \t]*$"
113syn match   eiffelStringError	contained "%/[^0-9]"
114syn match   eiffelStringError	contained "%/\d\+[^0-9/]"
115syn match   eiffelBadConstant	"'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
116syn match   eiffelBadConstant	"''"
117syn match   eiffelCharacter	"'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape
118syn match   eiffelNumber	"-\=\<\d\+\(_\d\+\)*\>"
119syn match   eiffelNumber	"\<[01]\+[bB]\>"
120syn match   eiffelNumber	"-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
121syn match   eiffelNumber	"-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
122syn match   eiffelComment	"--.*" contains=eiffelTodo
123
124syn case match
125
126" Case sensitive stuff
127
128syn keyword eiffelTodo		contained TODO XXX FIXME
129syn match   eiffelClassName	"\<[A-Z][A-Z0-9_]*\>"
130
131" Catch mismatched parentheses
132syn match eiffelParenError	")"
133syn region eiffelParen		transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
134
135if exists("eiffel_fold")
136"    setlocal foldmethod=indent
137"    syn sync fromstart
138endif
139
140" Should suffice for even very long strings and expressions
141syn sync lines=40
142
143" Define the default highlighting.
144" For version 5.7 and earlier: only when not done already
145" For version 5.8 and later: only when an item doesn't have highlighting yet
146if version >= 508 || !exists("did_eiffel_syntax_inits")
147  if version < 508
148    let did_eiffel_syntax_inits = 1
149    command -nargs=+ HiLink hi link <args>
150  else
151    command -nargs=+ HiLink hi def link <args>
152  endif
153
154  HiLink eiffelKeyword		Statement
155  HiLink eiffelProperty		Statement
156  HiLink eiffelInheritClause	Statement
157  HiLink eiffelStatement	Statement
158  HiLink eiffelDeclaration	Statement
159  HiLink eiffelAssertion	Statement
160  HiLink eiffelDebug		Statement
161  HiLink eiffelException	Statement
162  HiLink eiffelGenericCreate	Statement
163
164  HiLink eiffelAgent		Statement
165  HiLink eiffelConvert		Statement
166
167  HiLink eiffelTopStruct	PreProc
168
169  HiLink eiffelAll		Special
170  HiLink eiffelAnchored		Special
171  HiLink eiffelBitType		Special
172
173
174  HiLink eiffelBool		Boolean
175  HiLink eiffelString		String
176  HiLink eiffelCharacter	Character
177  HiLink eiffelClassName	Type
178  HiLink eiffelNumber		Number
179
180  HiLink eiffelStringEscape	Special
181
182  HiLink eiffelOperator		Special
183  HiLink eiffelArray		Special
184  HiLink eiffelExport		Special
185  HiLink eiffelCreation		Special
186  HiLink eiffelBrackets		Special
187  HiLink eiffelGeneric		Special
188  HiLink eiffelGenericDecl	Special
189  HiLink eiffelConstraint	Special
190  HiLink eiffelCreate		Special
191
192  HiLink eiffelPredefined	Constant
193
194  HiLink eiffelComment		Comment
195
196  HiLink eiffelError		Error
197  HiLink eiffelBadConstant	Error
198  HiLink eiffelStringError	Error
199  HiLink eiffelParenError	Error
200  HiLink eiffelBracketError	Error
201
202  HiLink eiffelTodo		Todo
203
204  delcommand HiLink
205endif
206
207let b:current_syntax = "eiffel"
208
209let &cpo = s:keepcpo
210unlet s:keepcpo
211
212" vim: ts=8
213