rust.xml

  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="&#34;">
 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="&#34;">
110        <token type="LiteralString"/>
111        <pop depth="1"/>
112      </rule>
113      <rule pattern="\\[&#39;&#34;\\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="[^\\&#34;\{\}]+">
120        <token type="LiteralString"/>
121      </rule>
122      <rule pattern="\\">
123        <token type="LiteralString"/>
124      </rule>
125    </state>
126    <state name="string">
127      <rule pattern="&#34;">
128        <token type="LiteralString"/>
129        <pop depth="1"/>
130      </rule>
131      <rule pattern="\\[&#39;&#34;\\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="[^\\&#34;]+">
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="[^&#34;\]\[]+">
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="&#34;">
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="(?::|-&gt;)">
243        <token type="Text"/>
244        <push state="typename"/>
245      </rule>
246      <rule pattern="(break|continue)(\b\s*)(\&#39;[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="&#39;(\\[&#39;&#34;\\nrt]|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}|.)&#39;">
254        <token type="LiteralStringChar"/>
255      </rule>
256      <rule pattern="(b)(&#39;(?:\\[&#39;&#34;\\nrt]|\\x[0-9a-fA-F]{2}|\\0|.)&#39;)">
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)(&#34;)">
283        <bygroups>
284          <token type="LiteralStringAffix"/>
285          <token type="LiteralString"/>
286        </bygroups>
287        <push state="bytestring"/>
288      </rule>
289      <rule pattern="(?s)(b?r)(#*)(&#34;.*?&#34;\2)">
290        <bygroups>
291          <token type="LiteralStringAffix"/>
292          <token type="LiteralString"/>
293          <token type="LiteralString"/>
294        </bygroups>
295      </rule>
296      <rule pattern="&#39;(static|_)">
297        <token type="NameBuiltin"/>
298      </rule>
299      <rule pattern="&#39;">
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="[+\-*/%&amp;|&lt;&gt;^!~@=:?]">
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*)(&#34;)">
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="&amp;">
351        <token type="KeywordPseudo"/>
352      </rule>
353      <rule pattern="&#39;(static|_)">
354        <token type="NameBuiltin"/>
355      </rule>
356      <rule pattern="&#39;">
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>