Skip to content

Commit 96c0e71

Browse files
authored
Rollup merge of #90278 - notriddle:notriddle/highlight-ptr, r=jyn541,GuillaumeGomez
rustdoc: use better highlighting for *const, *mut, and &mut This generates more consistent HTML for these RefKeyWord combinations. Before: ![image](https://user-images.githubusercontent.com/1593513/138742752-7e00a3f7-4621-4c62-82d1-3e4c2ef503d1.png) After: ![image](https://user-images.githubusercontent.com/1593513/138743955-90abcdcd-fc88-4e2f-95bb-c1b1635c0001.png)
2 parents 60cad97 + 3a79370 commit 96c0e71

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

src/librustdoc/html/highlight.rs

+21-6
Original file line numberDiff line numberDiff line change
@@ -469,22 +469,37 @@ impl<'a> Classifier<'a> {
469469
// Assume that '&' or '*' is the reference or dereference operator
470470
// or a reference or pointer type. Unless, of course, it looks like
471471
// a logical and or a multiplication operator: `&&` or `* `.
472-
TokenKind::Star => match self.peek() {
473-
Some(TokenKind::Whitespace) => Class::Op,
472+
TokenKind::Star => match self.tokens.peek() {
473+
Some((TokenKind::Whitespace, _)) => Class::Op,
474+
Some((TokenKind::Ident, "mut")) => {
475+
self.next();
476+
sink(Highlight::Token { text: "*mut", class: Some(Class::RefKeyWord) });
477+
return;
478+
}
479+
Some((TokenKind::Ident, "const")) => {
480+
self.next();
481+
sink(Highlight::Token { text: "*const", class: Some(Class::RefKeyWord) });
482+
return;
483+
}
474484
_ => Class::RefKeyWord,
475485
},
476-
TokenKind::And => match lookahead {
477-
Some(TokenKind::And) => {
486+
TokenKind::And => match self.tokens.peek() {
487+
Some((TokenKind::And, _)) => {
478488
self.next();
479489
sink(Highlight::Token { text: "&&", class: Some(Class::Op) });
480490
return;
481491
}
482-
Some(TokenKind::Eq) => {
492+
Some((TokenKind::Eq, _)) => {
483493
self.next();
484494
sink(Highlight::Token { text: "&=", class: Some(Class::Op) });
485495
return;
486496
}
487-
Some(TokenKind::Whitespace) => Class::Op,
497+
Some((TokenKind::Whitespace, _)) => Class::Op,
498+
Some((TokenKind::Ident, "mut")) => {
499+
self.next();
500+
sink(Highlight::Token { text: "&mut", class: Some(Class::RefKeyWord) });
501+
return;
502+
}
488503
_ => Class::RefKeyWord,
489504
},
490505

src/librustdoc/html/highlight/fixtures/sample.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">&quot;linux&quot;</span>)]</span>
1616
<span class="kw">fn</span> <span class="ident">main</span>() -&gt; () {
1717
<span class="kw">let</span> <span class="ident">foo</span> <span class="op">=</span> <span class="bool-val">true</span> <span class="op">&amp;&amp;</span> <span class="bool-val">false</span> <span class="op">|</span><span class="op">|</span> <span class="bool-val">true</span>;
18-
<span class="kw">let</span> <span class="kw">_</span>: <span class="kw-2">*</span><span class="kw">const</span> () <span class="op">=</span> <span class="number">0</span>;
18+
<span class="kw">let</span> <span class="kw">_</span>: <span class="kw-2">*const</span> () <span class="op">=</span> <span class="number">0</span>;
1919
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">foo</span>;
2020
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="op">&amp;&amp;</span><span class="ident">foo</span>;
2121
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="kw-2">*</span><span class="ident">foo</span>;
22-
<span class="macro">mac!</span>(<span class="ident">foo</span>, <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">bar</span>);
22+
<span class="macro">mac!</span>(<span class="ident">foo</span>, <span class="kw-2">&amp;mut</span> <span class="ident">bar</span>);
2323
<span class="macro">assert!</span>(<span class="self">self</span>.<span class="ident">length</span> <span class="op">&lt;</span> <span class="ident">N</span> <span class="op">&amp;&amp;</span> <span class="ident">index</span> <span class="op">&lt;</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">length</span>);
2424
<span class="ident">::std::env::var</span>(<span class="string">&quot;gateau&quot;</span>).<span class="ident">is_ok</span>();
2525
<span class="attribute">#[<span class="ident">rustfmt::skip</span>]</span>

0 commit comments

Comments
 (0)