xref: /vim-8.2.3635/runtime/syntax/eiffel.vim (revision 89bcfda6)
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
142command -nargs=+ HiLink hi def link <args>
143
144HiLink eiffelKeyword		Statement
145HiLink eiffelProperty		Statement
146HiLink eiffelInheritClause	Statement
147HiLink eiffelStatement	Statement
148HiLink eiffelDeclaration	Statement
149HiLink eiffelAssertion	Statement
150HiLink eiffelDebug		Statement
151HiLink eiffelException	Statement
152HiLink eiffelGenericCreate	Statement
153
154HiLink eiffelAgent		Statement
155HiLink eiffelConvert		Statement
156
157HiLink eiffelTopStruct	PreProc
158
159HiLink eiffelAll		Special
160HiLink eiffelAnchored		Special
161HiLink eiffelBitType		Special
162
163
164HiLink eiffelBool		Boolean
165HiLink eiffelString		String
166HiLink eiffelCharacter	Character
167HiLink eiffelClassName	Type
168HiLink eiffelNumber		Number
169
170HiLink eiffelStringEscape	Special
171
172HiLink eiffelOperator		Special
173HiLink eiffelArray		Special
174HiLink eiffelExport		Special
175HiLink eiffelCreation		Special
176HiLink eiffelBrackets		Special
177HiLink eiffelGeneric		Special
178HiLink eiffelGenericDecl	Special
179HiLink eiffelConstraint	Special
180HiLink eiffelCreate		Special
181
182HiLink eiffelPredefined	Constant
183
184HiLink eiffelComment		Comment
185
186HiLink eiffelError		Error
187HiLink eiffelBadConstant	Error
188HiLink eiffelStringError	Error
189HiLink eiffelParenError	Error
190HiLink eiffelBracketError	Error
191
192HiLink eiffelTodo		Todo
193
194delcommand HiLink
195
196let b:current_syntax = "eiffel"
197
198let &cpo = s:keepcpo
199unlet s:keepcpo
200
201" vim: ts=8
202