diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/passes/html_tags.rs | 5 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/invalid-html-tags.rs | 22 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/librustdoc/passes/html_tags.rs b/src/librustdoc/passes/html_tags.rs index 79035ba79ff..490e913fbde 100644 --- a/src/librustdoc/passes/html_tags.rs +++ b/src/librustdoc/passes/html_tags.rs @@ -48,8 +48,11 @@ fn drop_tag( if let Some(pos) = tags.iter().rev().position(|(t, _)| *t == tag_name) { // Because this is from a `rev` iterator, the position is reversed as well! let pos = tags.len() - 1 - pos; + // If the tag is nested inside a "<script>", not warning should be emitted. + let should_not_warn = + tags.iter().take(pos + 1).any(|(at, _)| at == "script" || at == "style"); for (last_tag_name, last_tag_span) in tags.drain(pos + 1..) { - if ALLOWED_UNCLOSED.iter().any(|&at| at == &last_tag_name) { + if should_not_warn || ALLOWED_UNCLOSED.iter().any(|&at| at == &last_tag_name) { continue; } // `tags` is used as a queue, meaning that everything after `pos` is included inside it. diff --git a/src/test/rustdoc-ui/invalid-html-tags.rs b/src/test/rustdoc-ui/invalid-html-tags.rs index 51bbae2a0b6..0dc2002bd39 100644 --- a/src/test/rustdoc-ui/invalid-html-tags.rs +++ b/src/test/rustdoc-ui/invalid-html-tags.rs @@ -39,3 +39,25 @@ pub fn b() {} /// <h3> //~^ ERROR unclosed HTML tag `h3` pub fn c() {} + +// Unclosed tags shouldn't warn if they are nested inside a <script> elem. +/// <script> +/// <h3><div> +/// </script> +/// <script> +/// <div> +/// <p> +/// </div> +/// </script> +pub fn d() {} + +// Unclosed tags shouldn't warn if they are nested inside a <style> elem. +/// <style> +/// <h3><div> +/// </style> +/// <style> +/// <div> +/// <p> +/// </div> +/// </style> +pub fn e() {} |
