Skip to content

Commit 1a531f5

Browse files
authored
fix(rust) Add negative-lookahead for fn like keywords (#3883)
1 parent fa9a62c commit 1a531f5

File tree

5 files changed

+27
-1
lines changed

5 files changed

+27
-1
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ New Grammars:
2020

2121
Core Grammars:
2222

23+
- fix(rust) added negative-lookahead for callable keywords `if` `while` `for` [Omar Hussein][]
2324
- enh(armasm) added `x0-x30` and `w0-w30` ARMv8 registers [Nicholas Thompson][]
2425
- enh(haxe) added `final`, `is`, `macro` keywords and `$` identifiers [Robert Borghese][]
2526
- enh(haxe) support numeric separators and suffixes [Robert Borghese][]

src/languages/rust.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default function(hljs) {
1414
relevance: 0,
1515
begin: regex.concat(
1616
/\b/,
17-
/(?!let\b)/,
17+
/(?!let|for|while|if|else|match\b)/,
1818
hljs.IDENT_RE,
1919
regex.lookahead(/\s*\(/))
2020
};

test/detect/rust/default.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,12 @@ impl From<&'a str> for State {
1212
"closed" => State::Closed,
1313
_ => unreachable!(),
1414
}
15+
16+
if (str == "trans") {
17+
State::Transient;
18+
}
19+
else if str == "start" {
20+
State::Start;
21+
}
1522
}
1623
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<span class="hljs-keyword">if</span> (<span class="hljs-literal">true</span>) {}
2+
<span class="hljs-keyword">if</span> <span class="hljs-literal">true</span> {}
3+
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-literal">true</span>) {}
4+
<span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {}
5+
<span class="hljs-keyword">while</span> <span class="hljs-literal">true</span> {}
6+
<span class="hljs-keyword">for</span> (a, b) <span class="hljs-title function_ invoke__">in</span> (<span class="hljs-number">0</span>..<span class="hljs-number">10</span>).<span class="hljs-title function_ invoke__">enumerate</span>() {}
7+
<span class="hljs-keyword">for</span> <span class="hljs-variable">a</span> <span class="hljs-keyword">in</span> <span class="hljs-number">0</span>..<span class="hljs-number">10</span> {}
8+
<span class="hljs-keyword">match</span> <span class="hljs-type">str</span> {}
9+
<span class="hljs-keyword">match</span> (<span class="hljs-type">str</span>) {}

test/markup/rust/invoked-keywords.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
if (true) {}
2+
if true {}
3+
else if (true) {}
4+
while (true) {}
5+
while true {}
6+
for (a, b) in (0..10).enumerate() {}
7+
for a in 0..10 {}
8+
match str {}
9+
match (str) {}

0 commit comments

Comments
 (0)