Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5a9a84f

Browse files
authoredAug 12, 2022
Rollup merge of #100409 - jsha:highlight-lighter, r=GuillaumeGomez
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. r? `@GuillaumeGomez` Demo: (warning - slow!) https://rustdoc.crud.net/jsha/highlight-lighter/src/core/up/up/stdarch/crates/core_arch/src/x86/avx512f.rs.html [1]: https://doc.rust-lang.org/nightly/src/core/up/up/stdarch/crates/core_arch/src/x86/avx512f.rs.html
2 parents e9fbfa2 + dd4613c commit 5a9a84f

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
@@ -163,7 +163,6 @@ enum Class {
163163
// Keywords that do pointer/reference stuff.
164164
RefKeyWord,
165165
Self_(Span),
166-
Op,
167166
Macro(Span),
168167
MacroNonTerminal,
169168
String,
@@ -187,7 +186,6 @@ impl Class {
187186
Class::KeyWord => "kw",
188187
Class::RefKeyWord => "kw-2",
189188
Class::Self_(_) => "self",
190-
Class::Op => "op",
191189
Class::Macro(_) => "macro",
192190
Class::MacroNonTerminal => "macro-nonterminal",
193191
Class::String => "string",
@@ -212,7 +210,6 @@ impl Class {
212210
| Self::Attribute
213211
| Self::KeyWord
214212
| Self::RefKeyWord
215-
| Self::Op
216213
| Self::MacroNonTerminal
217214
| Self::String
218215
| Self::Number
@@ -516,7 +513,7 @@ impl<'a> Classifier<'a> {
516513
// or a reference or pointer type. Unless, of course, it looks like
517514
// a logical and or a multiplication operator: `&&` or `* `.
518515
TokenKind::Star => match self.tokens.peek() {
519-
Some((TokenKind::Whitespace, _)) => Class::Op,
516+
Some((TokenKind::Whitespace, _)) => return no_highlight(sink),
520517
Some((TokenKind::Ident, "mut")) => {
521518
self.next();
522519
sink(Highlight::Token { text: "*mut", class: Some(Class::RefKeyWord) });
@@ -532,15 +529,15 @@ impl<'a> Classifier<'a> {
532529
TokenKind::And => match self.tokens.peek() {
533530
Some((TokenKind::And, _)) => {
534531
self.next();
535-
sink(Highlight::Token { text: "&&", class: Some(Class::Op) });
532+
sink(Highlight::Token { text: "&&", class: None });
536533
return;
537534
}
538535
Some((TokenKind::Eq, _)) => {
539536
self.next();
540-
sink(Highlight::Token { text: "&=", class: Some(Class::Op) });
537+
sink(Highlight::Token { text: "&=", class: None });
541538
return;
542539
}
543-
Some((TokenKind::Whitespace, _)) => Class::Op,
540+
Some((TokenKind::Whitespace, _)) => return no_highlight(sink),
544541
Some((TokenKind::Ident, "mut")) => {
545542
self.next();
546543
sink(Highlight::Token { text: "&mut", class: Some(Class::RefKeyWord) });
@@ -553,15 +550,15 @@ impl<'a> Classifier<'a> {
553550
TokenKind::Eq => match lookahead {
554551
Some(TokenKind::Eq) => {
555552
self.next();
556-
sink(Highlight::Token { text: "==", class: Some(Class::Op) });
553+
sink(Highlight::Token { text: "==", class: None });
557554
return;
558555
}
559556
Some(TokenKind::Gt) => {
560557
self.next();
561558
sink(Highlight::Token { text: "=>", class: None });
562559
return;
563560
}
564-
_ => Class::Op,
561+
_ => return no_highlight(sink),
565562
},
566563
TokenKind::Minus if lookahead == Some(TokenKind::Gt) => {
567564
self.next();
@@ -578,7 +575,7 @@ impl<'a> Classifier<'a> {
578575
| TokenKind::Percent
579576
| TokenKind::Bang
580577
| TokenKind::Lt
581-
| TokenKind::Gt => Class::Op,
578+
| TokenKind::Gt => return no_highlight(sink),
582579

583580
// Miscellaneous, no highlighting.
584581
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
@@ -238,7 +238,7 @@ details.rustdoc-toggle > summary::before {
238238
pre.rust .number, pre.rust .string { color: #b8cc52; }
239239
pre.rust .kw, pre.rust .kw-2, pre.rust .prelude-ty,
240240
pre.rust .bool-val, pre.rust .prelude-val,
241-
pre.rust .op, pre.rust .lifetime { color: #ff7733; }
241+
pre.rust .lifetime { color: #ff7733; }
242242
pre.rust .macro, pre.rust .macro-nonterminal { color: #a37acc; }
243243
pre.rust .question-mark {
244244
color: #ff9011;
@@ -250,7 +250,7 @@ pre.rust .self {
250250
pre.rust .attribute {
251251
color: #e6e1cf;
252252
}
253-
pre.rust .attribute .ident, pre.rust .attribute .op {
253+
pre.rust .attribute .ident {
254254
color: #e6e1cf;
255255
}
256256

‎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)
Please sign in to comment.