...
1<lexer>
2 <config>
3 <name>Rust</name>
4 <alias>rust</alias>
5 <alias>rs</alias>
6 <filename>*.rs</filename>
7 <filename>*.rs.in</filename>
8 <mime_type>text/rust</mime_type>
9 <mime_type>text/x-rust</mime_type>
10 <ensure_nl>true</ensure_nl>
11 </config>
12 <rules>
13 <state name="modname">
14 <rule pattern="\s+">
15 <token type="Text"/>
16 </rule>
17 <rule pattern="[a-zA-Z_]\w*">
18 <token type="NameNamespace"/>
19 <pop depth="1"/>
20 </rule>
21 <rule>
22 <pop depth="1"/>
23 </rule>
24 </state>
25 <state name="lifetime">
26 <rule pattern="[a-zA-Z_]+\w*">
27 <token type="NameAttribute"/>
28 </rule>
29 <rule>
30 <pop depth="1"/>
31 </rule>
32 </state>
33 <state name="number_lit">
34 <rule pattern="[ui](8|16|32|64|size)">
35 <token type="Keyword"/>
36 <pop depth="1"/>
37 </rule>
38 <rule pattern="f(32|64)">
39 <token type="Keyword"/>
40 <pop depth="1"/>
41 </rule>
42 <rule>
43 <pop depth="1"/>
44 </rule>
45 </state>
46 <state name="attribute_common">
47 <rule pattern=""">
48 <token type="LiteralString"/>
49 <push state="string"/>
50 </rule>
51 <rule pattern="\[">
52 <token type="CommentPreproc"/>
53 <push state="attribute["/>
54 </rule>
55 </state>
56 <state name="bytestring">
57 <rule pattern="\\x[89a-fA-F][0-9a-fA-F]">
58 <token type="LiteralStringEscape"/>
59 </rule>
60 <rule>
61 <include state="string"/>
62 </rule>
63 </state>
64 <state name="comment">
65 <rule pattern="[^*/]+">
66 <token type="CommentMultiline"/>
67 </rule>
68 <rule pattern="/\*">
69 <token type="CommentMultiline"/>
70 <push/>
71 </rule>
72 <rule pattern="\*/">
73 <token type="CommentMultiline"/>
74 <pop depth="1"/>
75 </rule>
76 <rule pattern="[*/]">
77 <token type="CommentMultiline"/>
78 </rule>
79 </state>
80 <state name="doccomment">
81 <rule pattern="[^*/]+">
82 <token type="LiteralStringDoc"/>
83 </rule>
84 <rule pattern="/\*">
85 <token type="LiteralStringDoc"/>
86 <push/>
87 </rule>
88 <rule pattern="\*/">
89 <token type="LiteralStringDoc"/>
90 <pop depth="1"/>
91 </rule>
92 <rule pattern="[*/]">
93 <token type="LiteralStringDoc"/>
94 </rule>
95 </state>
96 <state name="funcname">
97 <rule pattern="\s+">
98 <token type="Text"/>
99 </rule>
100 <rule pattern="[a-zA-Z_]\w*">
101 <token type="NameFunction"/>
102 <pop depth="1"/>
103 </rule>
104 <rule>
105 <pop depth="1"/>
106 </rule>
107 </state>
108 <state name="formatted_string">
109 <rule pattern=""">
110 <token type="LiteralString"/>
111 <pop depth="1"/>
112 </rule>
113 <rule pattern="\\['"\\nrt]|\\(?=\n)|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}|\{\{|\}\}">
114 <token type="LiteralStringEscape"/>
115 </rule>
116 <rule pattern="\{[^}]*\}">
117 <token type="LiteralStringInterpol"/>
118 </rule>
119 <rule pattern="[^\\"\{\}]+">
120 <token type="LiteralString"/>
121 </rule>
122 <rule pattern="\\">
123 <token type="LiteralString"/>
124 </rule>
125 </state>
126 <state name="string">
127 <rule pattern=""">
128 <token type="LiteralString"/>
129 <pop depth="1"/>
130 </rule>
131 <rule pattern="\\['"\\nrt]|\\(?=\n)|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}">
132 <token type="LiteralStringEscape"/>
133 </rule>
134 <rule pattern="[^\\"]+">
135 <token type="LiteralString"/>
136 </rule>
137 <rule pattern="\\">
138 <token type="LiteralString"/>
139 </rule>
140 </state>
141 <state name="root">
142 <rule pattern="#![^[\r\n].*$">
143 <token type="CommentPreproc"/>
144 </rule>
145 <rule>
146 <push state="base"/>
147 </rule>
148 </state>
149 <state name="attribute[">
150 <rule>
151 <include state="attribute_common"/>
152 </rule>
153 <rule pattern="\]">
154 <token type="CommentPreproc"/>
155 <pop depth="1"/>
156 </rule>
157 <rule pattern="[^"\]\[]+">
158 <token type="CommentPreproc"/>
159 </rule>
160 </state>
161 <state name="base">
162 <rule pattern="\n">
163 <token type="TextWhitespace"/>
164 </rule>
165 <rule pattern="\s+">
166 <token type="TextWhitespace"/>
167 </rule>
168 <rule pattern="//!.*?\n">
169 <token type="LiteralStringDoc"/>
170 </rule>
171 <rule pattern="///(\n|[^/].*?\n)">
172 <token type="LiteralStringDoc"/>
173 </rule>
174 <rule pattern="//(.*?)\n">
175 <token type="CommentSingle"/>
176 </rule>
177 <rule pattern="/\*\*(\n|[^/*])">
178 <token type="LiteralStringDoc"/>
179 <push state="doccomment"/>
180 </rule>
181 <rule pattern="/\*!">
182 <token type="LiteralStringDoc"/>
183 <push state="doccomment"/>
184 </rule>
185 <rule pattern="/\*">
186 <token type="CommentMultiline"/>
187 <push state="comment"/>
188 </rule>
189 <rule pattern=""">
190 <token type="LiteralString"/>
191 <push state="string"/>
192 </rule>
193 <rule pattern="\$([a-zA-Z_]\w*|\(,?|\),?|,?)">
194 <token type="CommentPreproc"/>
195 </rule>
196 <rule pattern="(unsafe|static|extern|return|const|crate|where|while|await|trait|super|async|match|impl|else|move|loop|pub|ref|mut|for|dyn|use|box|in|if|as)\b">
197 <token type="Keyword"/>
198 </rule>
199 <rule pattern="(abstract|override|unsized|virtual|become|typeof|final|macro|yield|priv|try|do)\b">
200 <token type="KeywordReserved"/>
201 </rule>
202 <rule pattern="(true|false)\b">
203 <token type="KeywordConstant"/>
204 </rule>
205 <rule pattern="self\b">
206 <token type="NameBuiltinPseudo"/>
207 </rule>
208 <rule pattern="mod\b">
209 <token type="Keyword"/>
210 <push state="modname"/>
211 </rule>
212 <rule pattern="let\b">
213 <token type="KeywordDeclaration"/>
214 </rule>
215 <rule pattern="fn\b">
216 <token type="Keyword"/>
217 <push state="funcname"/>
218 </rule>
219 <rule pattern="(struct|enum|type|union)\b">
220 <token type="Keyword"/>
221 <push state="typename"/>
222 </rule>
223 <rule pattern="(default)(\s+)(type|fn)\b">
224 <bygroups>
225 <token type="Keyword"/>
226 <token type="Text"/>
227 <token type="Keyword"/>
228 </bygroups>
229 </rule>
230 <rule pattern="(isize|usize|bool|char|u128|i128|i64|i32|i16|str|u64|u32|f32|f64|u16|i8|u8)\b">
231 <token type="KeywordType"/>
232 </rule>
233 <rule pattern="[sS]elf\b">
234 <token type="NameBuiltinPseudo"/>
235 </rule>
236 <rule pattern="(DoubleEndedIterator|ExactSizeIterator|IntoIterator|PartialOrd|PartialEq|ToString|Iterator|ToOwned|Default|Result|String|FnOnce|Extend|Option|FnMut|Unpin|Sized|AsRef|AsMut|Clone|None|From|Into|Sync|drop|Send|Drop|Copy|Some|Ord|Err|Box|Vec|Eq|Ok|Fn)\b">
237 <token type="NameBuiltin"/>
238 </rule>
239 <rule pattern="::\b">
240 <token type="Text"/>
241 </rule>
242 <rule pattern="(?::|->)">
243 <token type="Text"/>
244 <push state="typename"/>
245 </rule>
246 <rule pattern="(break|continue)(\b\s*)(\'[A-Za-z_]\w*)?">
247 <bygroups>
248 <token type="Keyword"/>
249 <token type="TextWhitespace"/>
250 <token type="NameLabel"/>
251 </bygroups>
252 </rule>
253 <rule pattern="'(\\['"\\nrt]|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}|.)'">
254 <token type="LiteralStringChar"/>
255 </rule>
256 <rule pattern="(b)('(?:\\['"\\nrt]|\\x[0-9a-fA-F]{2}|\\0|.)')">
257 <bygroups>
258 <token type="LiteralStringAffix"/>
259 <token type="LiteralStringChar"/>
260 </bygroups>
261 </rule>
262 <rule pattern="0b[01_]+">
263 <token type="LiteralNumberBin"/>
264 <push state="number_lit"/>
265 </rule>
266 <rule pattern="0o[0-7_]+">
267 <token type="LiteralNumberOct"/>
268 <push state="number_lit"/>
269 </rule>
270 <rule pattern="0[xX][0-9a-fA-F_]+">
271 <token type="LiteralNumberHex"/>
272 <push state="number_lit"/>
273 </rule>
274 <rule pattern="[0-9][0-9_]*(\.[0-9_]+[eE][+\-]?[0-9_]+|\.[0-9_]*(?!\.)|[eE][+\-]?[0-9_]+)">
275 <token type="LiteralNumberFloat"/>
276 <push state="number_lit"/>
277 </rule>
278 <rule pattern="[0-9][0-9_]*">
279 <token type="LiteralNumberInteger"/>
280 <push state="number_lit"/>
281 </rule>
282 <rule pattern="(b)(")">
283 <bygroups>
284 <token type="LiteralStringAffix"/>
285 <token type="LiteralString"/>
286 </bygroups>
287 <push state="bytestring"/>
288 </rule>
289 <rule pattern="(?s)(b?r)(#*)(".*?"\2)">
290 <bygroups>
291 <token type="LiteralStringAffix"/>
292 <token type="LiteralString"/>
293 <token type="LiteralString"/>
294 </bygroups>
295 </rule>
296 <rule pattern="'(static|_)">
297 <token type="NameBuiltin"/>
298 </rule>
299 <rule pattern="'">
300 <token type="NameAttribute"/>
301 <push state="lifetime"/>
302 </rule>
303 <rule pattern="\.\.=?">
304 <token type="Operator"/>
305 </rule>
306 <rule pattern="[{}()\[\],.;]">
307 <token type="Punctuation"/>
308 </rule>
309 <rule pattern="[+\-*/%&|<>^!~@=:?]">
310 <token type="Operator"/>
311 </rule>
312 <rule pattern="\b(r#)?_?([A-Z][A-Z0-9_]*){2,}\b">
313 <token type="NameConstant"/>
314 </rule>
315 <rule pattern="((?:e?print(?:ln)?|format(?:_args)?|panic|todo|un(?:reachable|implemented))!)(\s*)(\()(\s*)(")">
316 <bygroups>
317 <token type="NameFunctionMagic"/>
318 <token type="TextWhitespace"/>
319 <token type="Punctuation"/>
320 <token type="TextWhitespace"/>
321 <token type="LiteralString"/>
322 </bygroups>
323 <push state="formatted_string"/>
324 </rule>
325 <rule pattern="([a-zA-Z_]\w*!)(\s*)(\(|\[|\{)">
326 <bygroups>
327 <token type="NameFunctionMagic"/>
328 <token type="TextWhitespace"/>
329 <token type="Punctuation"/>
330 </bygroups>
331 </rule>
332 <rule pattern="(r#)?[a-zA-Z_]\w*">
333 <token type="Name"/>
334 </rule>
335 <rule pattern="r#[a-zA-Z_]\w*">
336 <token type="Name"/>
337 </rule>
338 <rule pattern="#!?\[">
339 <token type="CommentPreproc"/>
340 <push state="attribute["/>
341 </rule>
342 <rule pattern="#">
343 <token type="Text"/>
344 </rule>
345 </state>
346 <state name="typename">
347 <rule pattern="\s+">
348 <token type="Text"/>
349 </rule>
350 <rule pattern="&">
351 <token type="KeywordPseudo"/>
352 </rule>
353 <rule pattern="'(static|_)">
354 <token type="NameBuiltin"/>
355 </rule>
356 <rule pattern="'">
357 <token type="NameAttribute"/>
358 <push state="lifetime"/>
359 </rule>
360 <rule pattern="(DoubleEndedIterator|ExactSizeIterator|IntoIterator|PartialOrd|PartialEq|ToString|Iterator|ToOwned|Default|Result|String|FnOnce|Extend|Option|FnMut|Unpin|Sized|AsRef|AsMut|Clone|None|From|Into|Sync|drop|Send|Drop|Copy|Some|Ord|Err|Box|Vec|Eq|Ok|Fn)\b">
361 <token type="NameBuiltin"/>
362 </rule>
363 <rule pattern="(isize|usize|bool|char|u128|i128|i64|i32|i16|str|u64|u32|f32|f64|u16|i8|u8)\b">
364 <token type="KeywordType"/>
365 </rule>
366 <rule pattern="[a-zA-Z_]\w*">
367 <token type="NameClass"/>
368 <pop depth="1"/>
369 </rule>
370 <rule>
371 <pop depth="1"/>
372 </rule>
373 </state>
374 </rules>
375</lexer>
View as plain text