diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-02-29 00:16:59 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-29 00:16:59 +0100 |
| commit | 843920f0f6a8d624ee05e2b65eae953ea9f1caf8 (patch) | |
| tree | 11bf3f524c701ae7c296607448cc8e445e3e227e | |
| parent | 332b9be7a19f494057e31224f3654f6beda1cff8 (diff) | |
| parent | 632d26aeff1a943d4791ddad3025af61e0ff2256 (diff) | |
| download | rust-843920f0f6a8d624ee05e2b65eae953ea9f1caf8.tar.gz rust-843920f0f6a8d624ee05e2b65eae953ea9f1caf8.zip | |
Rollup merge of #121689 - GuillaumeGomez:rustdoc-highlighting-whitespace, r=notriddle
[rustdoc] Prevent inclusion of whitespace character after macro_rules ident Discovered this bug randomly when looking at:  We were too eagerly trying to merge tokens that shouldn't be merged together (for example if you have a code comment followed by a code comment, we merge them in one attribute to reduce the DOM size). r? ``@notriddle``
| -rw-r--r-- | src/librustdoc/html/highlight.rs | 1 | ||||
| -rw-r--r-- | src/librustdoc/html/highlight/fixtures/sample.html | 2 | ||||
| -rw-r--r-- | tests/rustdoc/source-code-highlight.rs | 29 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/librustdoc/html/highlight.rs b/src/librustdoc/html/highlight.rs index 1cdc792a819..aa5998876d9 100644 --- a/src/librustdoc/html/highlight.rs +++ b/src/librustdoc/html/highlight.rs @@ -136,6 +136,7 @@ fn can_merge(class1: Option<Class>, class2: Option<Class>, text: &str) -> bool { match (class1, class2) { (Some(c1), Some(c2)) => c1.is_equal_to(c2), (Some(Class::Ident(_)), None) | (None, Some(Class::Ident(_))) => true, + (Some(Class::Macro(_)), _) => false, (Some(_), None) | (None, Some(_)) => text.trim().is_empty(), (None, None) => true, } diff --git a/src/librustdoc/html/highlight/fixtures/sample.html b/src/librustdoc/html/highlight/fixtures/sample.html index aa735e81597..773afd5c2cc 100644 --- a/src/librustdoc/html/highlight/fixtures/sample.html +++ b/src/librustdoc/html/highlight/fixtures/sample.html @@ -32,7 +32,7 @@ } } -<span class="macro">macro_rules! </span>bar { +<span class="macro">macro_rules!</span> bar { (<span class="macro-nonterminal">$foo</span>:tt) => {}; } </code></pre> diff --git a/tests/rustdoc/source-code-highlight.rs b/tests/rustdoc/source-code-highlight.rs new file mode 100644 index 00000000000..0a1be791ec2 --- /dev/null +++ b/tests/rustdoc/source-code-highlight.rs @@ -0,0 +1,29 @@ +// We need this option to be enabled for the `foo` macro declaration to ensure +// that the link on the ident is not including whitespace characters. + +//@ compile-flags: -Zunstable-options --generate-link-to-definition +#![crate_name = "foo"] + +// @has 'src/foo/source-code-highlight.rs.html' + +// @hasraw - '<a href="../../foo/macro.foo.html">foo</a>' +#[macro_export] +macro_rules! foo { + () => {} +} + +// @hasraw - '<span class="macro">foo!</span>' +foo! {} + +// @hasraw - '<a href="../../foo/fn.f.html">f</a>' +#[rustfmt::skip] +pub fn f () {} +// @hasraw - '<a href="../../foo/struct.Bar.html">Bar</a>' +// @hasraw - '<a href="../../foo/struct.Bar.html">Bar</a>' +// @hasraw - '<a href="{{channel}}/std/primitive.u32.html">u32</a>' +#[rustfmt::skip] +pub struct Bar ( u32 ); +// @hasraw - '<a href="../../foo/enum.Foo.html">Foo</a>' +pub enum Foo { + A, +} |
