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="(static|_)">
 27        <token type="NameBuiltin"/>
 28      </rule>
 29      <rule pattern="[a-zA-Z_]+\w*">
 30        <token type="NameAttribute"/>
 31      </rule>
 32      <rule>
 33        <pop depth="1"/>
 34      </rule>
 35    </state>
 36    <state name="number_lit">
 37      <rule pattern="[ui](8|16|32|64|size)">
 38        <token type="Keyword"/>
 39        <pop depth="1"/>
 40      </rule>
 41      <rule pattern="f(32|64)">
 42        <token type="Keyword"/>
 43        <pop depth="1"/>
 44      </rule>
 45      <rule>
 46        <pop depth="1"/>
 47      </rule>
 48    </state>
 49    <state name="attribute_common">
 50      <rule pattern="&#34;">
 51        <token type="LiteralString"/>
 52        <push state="string"/>
 53      </rule>
 54      <rule pattern="\[">
 55        <token type="CommentPreproc"/>
 56        <push state="attribute["/>
 57      </rule>
 58    </state>
 59    <state name="bytestring">
 60      <rule pattern="\\x[89a-fA-F][0-9a-fA-F]">
 61        <token type="LiteralStringEscape"/>
 62      </rule>
 63      <rule>
 64        <include state="string"/>
 65      </rule>
 66    </state>
 67    <state name="comment">
 68      <rule pattern="[^*/]+">
 69        <token type="CommentMultiline"/>
 70      </rule>
 71      <rule pattern="/\*">
 72        <token type="CommentMultiline"/>
 73        <push/>
 74      </rule>
 75      <rule pattern="\*/">
 76        <token type="CommentMultiline"/>
 77        <pop depth="1"/>
 78      </rule>
 79      <rule pattern="[*/]">
 80        <token type="CommentMultiline"/>
 81      </rule>
 82    </state>
 83    <state name="doccomment">
 84      <rule pattern="[^*/]+">
 85        <token type="LiteralStringDoc"/>
 86      </rule>
 87      <rule pattern="/\*">
 88        <token type="LiteralStringDoc"/>
 89        <push/>
 90      </rule>
 91      <rule pattern="\*/">
 92        <token type="LiteralStringDoc"/>
 93        <pop depth="1"/>
 94      </rule>
 95      <rule pattern="[*/]">
 96        <token type="LiteralStringDoc"/>
 97      </rule>
 98    </state>
 99    <state name="funcname">
100      <rule pattern="\s+">
101        <token type="Text"/>
102      </rule>
103      <rule pattern="[a-zA-Z_]\w*">
104        <token type="NameFunction"/>
105        <pop depth="1"/>
106      </rule>
107      <rule>
108        <pop depth="1"/>
109      </rule>
110    </state>
111    <state name="string">
112      <rule pattern="&#34;">
113        <token type="LiteralString"/>
114        <pop depth="1"/>
115      </rule>
116      <rule pattern="\\[&#39;&#34;\\nrt]|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}">
117        <token type="LiteralStringEscape"/>
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="root">
127      <rule pattern="#![^[\r\n].*$">
128        <token type="CommentPreproc"/>
129      </rule>
130      <rule>
131        <push state="base"/>
132      </rule>
133    </state>
134    <state name="attribute[">
135      <rule>
136        <include state="attribute_common"/>
137      </rule>
138      <rule pattern="\]">
139        <token type="CommentPreproc"/>
140        <pop depth="1"/>
141      </rule>
142      <rule pattern="[^&#34;\]\[]+">
143        <token type="CommentPreproc"/>
144      </rule>
145    </state>
146    <state name="base">
147      <rule pattern="\n">
148        <token type="TextWhitespace"/>
149      </rule>
150      <rule pattern="\s+">
151        <token type="TextWhitespace"/>
152      </rule>
153      <rule pattern="//!.*?\n">
154        <token type="LiteralStringDoc"/>
155      </rule>
156      <rule pattern="///(\n|[^/].*?\n)">
157        <token type="LiteralStringDoc"/>
158      </rule>
159      <rule pattern="//(.*?)\n">
160        <token type="CommentSingle"/>
161      </rule>
162      <rule pattern="/\*\*(\n|[^/*])">
163        <token type="LiteralStringDoc"/>
164        <push state="doccomment"/>
165      </rule>
166      <rule pattern="/\*!">
167        <token type="LiteralStringDoc"/>
168        <push state="doccomment"/>
169      </rule>
170      <rule pattern="/\*">
171        <token type="CommentMultiline"/>
172        <push state="comment"/>
173      </rule>
174      <rule pattern="r#*&#34;(?:\\.|[^\\;])*&#34;#*">
175        <token type="LiteralString"/>
176      </rule>
177      <rule pattern="&#34;(?:\\.|[^\\&#34;])*&#34;">
178        <token type="LiteralString"/>
179      </rule>
180      <rule pattern="\$([a-zA-Z_]\w*|\(,?|\),?|,?)">
181        <token type="CommentPreproc"/>
182      </rule>
183      <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">
184        <token type="Keyword"/>
185      </rule>
186      <rule pattern="(abstract|override|unsized|virtual|become|typeof|final|macro|yield|priv|try|do)\b">
187        <token type="KeywordReserved"/>
188      </rule>
189      <rule pattern="(true|false)\b">
190        <token type="KeywordConstant"/>
191      </rule>
192      <rule pattern="self\b">
193        <token type="NameBuiltinPseudo"/>
194      </rule>
195      <rule pattern="mod\b">
196        <token type="Keyword"/>
197        <push state="modname"/>
198      </rule>
199      <rule pattern="let\b">
200        <token type="KeywordDeclaration"/>
201      </rule>
202      <rule pattern="fn\b">
203        <token type="Keyword"/>
204        <push state="funcname"/>
205      </rule>
206      <rule pattern="(struct|enum|type|union)\b">
207        <token type="Keyword"/>
208        <push state="typename"/>
209      </rule>
210      <rule pattern="(default)(\s+)(type|fn)\b">
211        <bygroups>
212          <token type="Keyword"/>
213          <token type="Text"/>
214          <token type="Keyword"/>
215        </bygroups>
216      </rule>
217      <rule pattern="(isize|usize|bool|char|u128|i128|i64|i32|i16|str|u64|u32|f32|f64|u16|i8|u8)\b">
218        <token type="KeywordType"/>
219      </rule>
220      <rule pattern="[sS]elf\b">
221        <token type="NameBuiltinPseudo"/>
222      </rule>
223      <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">
224        <token type="NameBuiltin"/>
225      </rule>
226      <rule pattern="(is_powerpc64_feature_detected|is_aarch64_feature_detected|is_powerpc_feature_detected|is_mips64_feature_detected|is_mips_feature_detected|is_x86_feature_detected|is_arm_feature_detected|debug_assert_ne|debug_assert_eq|format_args_nl|concat_idents|unimplemented|include_bytes|compile_error|debug_assert|thread_local|trace_macros|macro_rules|format_args|module_path|unreachable|include_str|option_env|global_asm|log_syntax|stringify|assert_ne|assert_eq|llvm_asm|eprintln|include|matches|println|writeln|format|column|assert|concat|eprint|write|panic|print|file|todo|line|env|dbg|vec|cfg|asm)!">
227        <token type="NameFunctionMagic"/>
228      </rule>
229      <rule pattern="::\b">
230        <token type="Text"/>
231      </rule>
232      <rule pattern="(?::|-&gt;)">
233        <token type="Text"/>
234        <push state="typename"/>
235      </rule>
236      <rule pattern="(break|continue)(\b\s*)(\&#39;[A-Za-z_]\w*)?">
237        <bygroups>
238          <token type="Keyword"/>
239          <token type="TextWhitespace"/>
240          <token type="NameLabel"/>
241        </bygroups>
242      </rule>
243      <rule pattern="&#39;(\\[&#39;&#34;\\nrt]|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}|.)&#39;">
244        <token type="LiteralStringChar"/>
245      </rule>
246      <rule pattern="b&#39;(\\[&#39;&#34;\\nrt]|\\x[0-9a-fA-F]{2}|\\0|\\u\{[0-9a-fA-F]{1,6}\}|.)&#39;">
247        <token type="LiteralStringChar"/>
248      </rule>
249      <rule pattern="0b[01_]+">
250        <token type="LiteralNumberBin"/>
251        <push state="number_lit"/>
252      </rule>
253      <rule pattern="0o[0-7_]+">
254        <token type="LiteralNumberOct"/>
255        <push state="number_lit"/>
256      </rule>
257      <rule pattern="0[xX][0-9a-fA-F_]+">
258        <token type="LiteralNumberHex"/>
259        <push state="number_lit"/>
260      </rule>
261      <rule pattern="[0-9][0-9_]*(\.[0-9_]+[eE][+\-]?[0-9_]+|\.[0-9_]*(?!\.)|[eE][+\-]?[0-9_]+)">
262        <token type="LiteralNumberFloat"/>
263        <push state="number_lit"/>
264      </rule>
265      <rule pattern="[0-9][0-9_]*">
266        <token type="LiteralNumberInteger"/>
267        <push state="number_lit"/>
268      </rule>
269      <rule pattern="b&#34;">
270        <token type="LiteralString"/>
271        <push state="bytestring"/>
272      </rule>
273      <rule pattern="(?s)b?r(#*)&#34;.*?&#34;\1">
274        <token type="LiteralString"/>
275      </rule>
276      <rule pattern="&#39;">
277        <token type="Operator"/>
278        <push state="lifetime"/>
279      </rule>
280      <rule pattern="\.\.=?">
281        <token type="Operator"/>
282      </rule>
283      <rule pattern="[{}()\[\],.;]">
284        <token type="Punctuation"/>
285      </rule>
286      <rule pattern="[+\-*/%&amp;|&lt;&gt;^!~@=:?]">
287        <token type="Operator"/>
288      </rule>
289      <rule pattern="(r#)?[a-zA-Z_]\w*">
290        <token type="Name"/>
291      </rule>
292      <rule pattern="r#[a-zA-Z_]\w*">
293        <token type="Name"/>
294      </rule>
295      <rule pattern="#!?\[">
296        <token type="CommentPreproc"/>
297        <push state="attribute["/>
298      </rule>
299      <rule pattern="#">
300        <token type="Text"/>
301      </rule>
302    </state>
303    <state name="typename">
304      <rule pattern="\s+">
305        <token type="Text"/>
306      </rule>
307      <rule pattern="&amp;">
308        <token type="KeywordPseudo"/>
309      </rule>
310      <rule pattern="&#39;">
311        <token type="Operator"/>
312        <push state="lifetime"/>
313      </rule>
314      <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">
315        <token type="NameBuiltin"/>
316      </rule>
317      <rule pattern="(isize|usize|bool|char|u128|i128|i64|i32|i16|str|u64|u32|f32|f64|u16|i8|u8)\b">
318        <token type="KeywordType"/>
319      </rule>
320      <rule pattern="[a-zA-Z_]\w*">
321        <token type="NameClass"/>
322        <pop depth="1"/>
323      </rule>
324      <rule>
325        <pop depth="1"/>
326      </rule>
327    </state>
328  </rules>
329</lexer>