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