Skip to content

Commit dd4613c

Browse files
committed
rustdoc: don't generate DOM element for operator
In our source page highlighting, we were generating `<span class="op">` tags for all "operators", including e.g. `<` `>` around generic parameters, `*`, `&`. This contributed significantly to DOM size, but we don't actually style `.op` except in the ayu theme. Remove the styles for `.op` in ayu, and stop generating the `<span>`s. This reduces DOM size of an example page[1] from 265,938 HTML elements to 242,165 elements, a 9% reduction. [1]: https://doc.rust-lang.org/nightly/src/core/up/up/stdarch/crates/core_arch/src/x86/avx512f.rs.html
1 parent 1876544 commit dd4613c

File tree

7 files changed

+25
-31
lines changed

7 files changed

+25
-31
lines changed

src/librustdoc/html/highlight.rs

+7-10
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ enum Class {
133133
// Keywords that do pointer/reference stuff.
134134
RefKeyWord,
135135
Self_(Span),
136-
Op,
137136
Macro(Span),
138137
MacroNonTerminal,
139138
String,
@@ -157,7 +156,6 @@ impl Class {
157156
Class::KeyWord => "kw",
158157
Class::RefKeyWord => "kw-2",
159158
Class::Self_(_) => "self",
160-
Class::Op => "op",
161159
Class::Macro(_) => "macro",
162160
Class::MacroNonTerminal => "macro-nonterminal",
163161
Class::String => "string",
@@ -182,7 +180,6 @@ impl Class {
182180
| Self::Attribute
183181
| Self::KeyWord
184182
| Self::RefKeyWord
185-
| Self::Op
186183
| Self::MacroNonTerminal
187184
| Self::String
188185
| Self::Number
@@ -494,7 +491,7 @@ impl<'a> Classifier<'a> {
494491
// or a reference or pointer type. Unless, of course, it looks like
495492
// a logical and or a multiplication operator: `&&` or `* `.
496493
TokenKind::Star => match self.tokens.peek() {
497-
Some((TokenKind::Whitespace, _)) => Class::Op,
494+
Some((TokenKind::Whitespace, _)) => return no_highlight(sink),
498495
Some((TokenKind::Ident, "mut")) => {
499496
self.next();
500497
sink(Highlight::Token { text: "*mut", class: Some(Class::RefKeyWord) });
@@ -510,15 +507,15 @@ impl<'a> Classifier<'a> {
510507
TokenKind::And => match self.tokens.peek() {
511508
Some((TokenKind::And, _)) => {
512509
self.next();
513-
sink(Highlight::Token { text: "&&", class: Some(Class::Op) });
510+
sink(Highlight::Token { text: "&&", class: None });
514511
return;
515512
}
516513
Some((TokenKind::Eq, _)) => {
517514
self.next();
518-
sink(Highlight::Token { text: "&=", class: Some(Class::Op) });
515+
sink(Highlight::Token { text: "&=", class: None });
519516
return;
520517
}
521-
Some((TokenKind::Whitespace, _)) => Class::Op,
518+
Some((TokenKind::Whitespace, _)) => return no_highlight(sink),
522519
Some((TokenKind::Ident, "mut")) => {
523520
self.next();
524521
sink(Highlight::Token { text: "&mut", class: Some(Class::RefKeyWord) });
@@ -531,15 +528,15 @@ impl<'a> Classifier<'a> {
531528
TokenKind::Eq => match lookahead {
532529
Some(TokenKind::Eq) => {
533530
self.next();
534-
sink(Highlight::Token { text: "==", class: Some(Class::Op) });
531+
sink(Highlight::Token { text: "==", class: None });
535532
return;
536533
}
537534
Some(TokenKind::Gt) => {
538535
self.next();
539536
sink(Highlight::Token { text: "=>", class: None });
540537
return;
541538
}
542-
_ => Class::Op,
539+
_ => return no_highlight(sink),
543540
},
544541
TokenKind::Minus if lookahead == Some(TokenKind::Gt) => {
545542
self.next();
@@ -556,7 +553,7 @@ impl<'a> Classifier<'a> {
556553
| TokenKind::Percent
557554
| TokenKind::Bang
558555
| TokenKind::Lt
559-
| TokenKind::Gt => Class::Op,
556+
| TokenKind::Gt => return no_highlight(sink),
560557

561558
// Miscellaneous, no highlighting.
562559
TokenKind::Dot
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
<span class="example"><span class="kw">let</span> <span class="ident">x</span> <span class="op">=</span> <span class="number">1</span>;</span>
2-
<span class="kw">let</span> <span class="ident">y</span> <span class="op">=</span> <span class="number">2</span>;
1+
<span class="example"><span class="kw">let</span> <span class="ident">x</span> = <span class="number">1</span>;</span>
2+
<span class="kw">let</span> <span class="ident">y</span> = <span class="number">2</span>;
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::a::foo</span>;
22
<span class="kw">use</span> <span class="ident"><span class="self">self</span>::whatever</span>;
3-
<span class="kw">let</span> <span class="ident">x</span> <span class="op">=</span> <span class="ident"><span class="kw">super</span>::b::foo</span>;
4-
<span class="kw">let</span> <span class="ident">y</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::whatever</span>;
3+
<span class="kw">let</span> <span class="ident">x</span> = <span class="ident"><span class="kw">super</span>::b::foo</span>;
4+
<span class="kw">let</span> <span class="ident">y</span> = <span class="ident"><span class="self">Self</span>::whatever</span>;

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

+10-10
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88
.lifetime { color: #B76514; }
99
.question-mark { color: #ff9011; }
1010
</style>
11-
<pre><code><span class="attribute">#![<span class="ident">crate_type</span> <span class="op">=</span> <span class="string">&quot;lib&quot;</span>]</span>
11+
<pre><code><span class="attribute">#![<span class="ident">crate_type</span> = <span class="string">&quot;lib&quot;</span>]</span>
1212

1313
<span class="kw">use</span> <span class="ident">std::path</span>::{<span class="ident">Path</span>, <span class="ident">PathBuf</span>};
1414

15-
<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>
15+
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_os</span> = <span class="string">&quot;linux&quot;</span>)]</span>
1616
<span class="kw">fn</span> <span class="ident">main</span>() -&gt; () {
17-
<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">*const</span> () <span class="op">=</span> <span class="number">0</span>;
19-
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">foo</span>;
20-
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="op">&amp;&amp;</span><span class="ident">foo</span>;
21-
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="kw-2">*</span><span class="ident">foo</span>;
17+
<span class="kw">let</span> <span class="ident">foo</span> = <span class="bool-val">true</span> &amp;&amp; <span class="bool-val">false</span> || <span class="bool-val">true</span>;
18+
<span class="kw">let</span> <span class="kw">_</span>: <span class="kw-2">*const</span> () = <span class="number">0</span>;
19+
<span class="kw">let</span> <span class="kw">_</span> = <span class="kw-2">&amp;</span><span class="ident">foo</span>;
20+
<span class="kw">let</span> <span class="kw">_</span> = &amp;&amp;<span class="ident">foo</span>;
21+
<span class="kw">let</span> <span class="kw">_</span> = <span class="kw-2">*</span><span class="ident">foo</span>;
2222
<span class="macro">mac!</span>(<span class="ident">foo</span>, <span class="kw-2">&amp;mut</span> <span class="ident">bar</span>);
23-
<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>);
23+
<span class="macro">assert!</span>(<span class="self">self</span>.<span class="ident">length</span> &lt; <span class="ident">N</span> &amp;&amp; <span class="ident">index</span> &lt;= <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>
26-
<span class="kw">let</span> <span class="ident">s</span>:<span class="ident">std::path::PathBuf</span> <span class="op">=</span> <span class="ident">std::path::PathBuf::new</span>();
27-
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">s</span> <span class="op">=</span> <span class="ident">String::new</span>();
26+
<span class="kw">let</span> <span class="ident">s</span>:<span class="ident">std::path::PathBuf</span> = <span class="ident">std::path::PathBuf::new</span>();
27+
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">s</span> = <span class="ident">String::new</span>();
2828

2929
<span class="kw">match</span> <span class="kw-2">&amp;</span><span class="ident">s</span> {
3030
<span class="kw-2">ref</span> <span class="kw-2">mut</span> <span class="ident">x</span> =&gt; {}

src/librustdoc/html/highlight/fixtures/union.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
}
55

66
<span class="kw">fn</span> <span class="ident">main</span>() {
7-
<span class="kw">let</span> <span class="ident">union</span> <span class="op">=</span> <span class="number">0</span>;
7+
<span class="kw">let</span> <span class="ident">union</span> = <span class="number">0</span>;
88
}

src/librustdoc/html/static/css/themes/ayu.css

+2-2
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ details.rustdoc-toggle > summary::before {
239239
pre.rust .number, pre.rust .string { color: #b8cc52; }
240240
pre.rust .kw, pre.rust .kw-2, pre.rust .prelude-ty,
241241
pre.rust .bool-val, pre.rust .prelude-val,
242-
pre.rust .op, pre.rust .lifetime { color: #ff7733; }
242+
pre.rust .lifetime { color: #ff7733; }
243243
pre.rust .macro, pre.rust .macro-nonterminal { color: #a37acc; }
244244
pre.rust .question-mark {
245245
color: #ff9011;
@@ -251,7 +251,7 @@ pre.rust .self {
251251
pre.rust .attribute {
252252
color: #e6e1cf;
253253
}
254-
pre.rust .attribute .ident, pre.rust .attribute .op {
254+
pre.rust .attribute .ident {
255255
color: #e6e1cf;
256256
}
257257

src/test/rustdoc/macro_rules-matchers.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@
66
// @has 'foo/macro.todo.html'
77
// @has - '//span[@class="macro"]' 'macro_rules!'
88
// @has - '//span[@class="ident"]' 'todo'
9-
// Note: the only op is the `+`
10-
// @count - '//pre[@class="rust macro"]//span[@class="op"]' 1
119

1210
// @has - '{ () =&gt; { ... }; ($('
1311
// @has - '//span[@class="macro-nonterminal"]' '$'
1412
// @has - '//span[@class="macro-nonterminal"]' 'arg'
1513
// @has - ':'
1614
// @has - '//span[@class="ident"]' 'tt'
17-
// @has - '),'
18-
// @has - '//span[@class="op"]' '+'
15+
// @has - ')+'
1916
// @has - ') =&gt; { ... }; }'
2017
pub use std::todo;
2118

0 commit comments

Comments
 (0)