From 75ab3a8882bdd64e9d3ef9e52ac297c4c389fce0 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 1 Oct 2018 22:28:12 +0200 Subject: [PATCH 01/21] Stabilize rustdoc theme options --- src/librustdoc/config.rs | 4 +++- src/librustdoc/lib.rs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 19ea781430041..9bcad67950783 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -366,7 +366,9 @@ impl Options { .iter() .map(|s| (PathBuf::from(&s), s.to_owned())) { if !theme_file.is_file() { - diag.struct_err("option --themes arguments must all be files").emit(); + diag.struct_err(&format!("invalid file: \"{}\"", theme_s)) + .help("option --themes arguments must all be files") + .emit(); return Err(1); } let (success, ret) = theme::test_theme_against(&theme_file, &paths, &diag); diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 0b9e717221f2d..9ce7825ff6bed 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -247,12 +247,12 @@ fn opts() -> Vec { o.optflag("", "sort-modules-by-appearance", "sort modules by where they appear in the \ program, rather than alphabetically") }), - unstable("themes", |o| { + stable("themes", |o| { o.optmulti("", "themes", "additional themes which will be added to the generated docs", "FILES") }), - unstable("theme-checker", |o| { + stable("theme-checker", |o| { o.optmulti("", "theme-checker", "check if given theme is valid", "FILES") From 272799f6e8d8e80e2071a46958d21022cbd77e4e Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 23 May 2019 13:45:08 +0200 Subject: [PATCH 02/21] Add documentation for stabilized flags --- src/doc/rustdoc/src/command-line-arguments.md | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index b21defaedc313..9bbb396323d12 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -355,7 +355,27 @@ $ rustdoc src/lib.rs --edition 2018 $ rustdoc --test src/lib.rs --edition 2018 ``` -This flag allows rustdoc to treat your rust code as the given edition. It will compile doctests with +This flag allows `rustdoc` to treat your rust code as the given edition. It will compile doctests with the given edition as well. As with `rustc`, the default edition that `rustdoc` will use is `2015` (the first edition). +## `themes`: add more themes to generated documentation + +By default, `rustdoc` only provides the "dark" and light" themes. If you want to add new ones, +you'll need to this flag as follows: + +```bash +$ rustdoc src/lib.rs --themes /path/to/your/theme/file.css +``` + +### `theme-checker`: check if your themes implement all the required rules + +This flag allows you to check if your themes implement the necessary CSS rules. To put it more +simply, when adding a new theme, it needs to implements all the CSS rules present in the `ðark` and +`light` CSS themes. + +You can use this flag like this: + +```bash +$ rustdoc src/lib.rs --theme-checker /path/to/your/theme/file.css +``` From ca64df5eecaea79a4f1cf7536ea8bd337000895a Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 23 May 2019 13:45:30 +0200 Subject: [PATCH 03/21] Warn instead of failing for themes --- src/librustdoc/config.rs | 3 +-- src/librustdoc/theme.rs | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 9bcad67950783..6e78198c87261 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -373,10 +373,9 @@ impl Options { } let (success, ret) = theme::test_theme_against(&theme_file, &paths, &diag); if !success || !ret.is_empty() { - diag.struct_err(&format!("invalid theme: \"{}\"", theme_s)) + diag.struct_warn(&format!("invalid theme: \"{}\"", theme_s)) .help("check what's wrong with the --theme-checker option") .emit(); - return Err(1); } themes.push(theme_file); } diff --git a/src/librustdoc/theme.rs b/src/librustdoc/theme.rs index 7037a146c50ab..1be85f4a91d0e 100644 --- a/src/librustdoc/theme.rs +++ b/src/librustdoc/theme.rs @@ -273,6 +273,7 @@ pub fn test_theme_against>( diag: &Handler, ) -> (bool, Vec) { let data = try_something!(fs::read(f), diag, (false, vec![])); + let paths = load_css_paths(&data); let mut ret = vec![]; get_differences(against, &paths, &mut ret); From 10e6ca67ae3d2170128afa8594f14da123933117 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 24 May 2019 10:39:49 +0200 Subject: [PATCH 04/21] Apply review comments --- src/doc/rustdoc/src/command-line-arguments.md | 4 ++-- src/librustdoc/config.rs | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index 9bbb396323d12..2c25baf373ed2 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -371,8 +371,8 @@ $ rustdoc src/lib.rs --themes /path/to/your/theme/file.css ### `theme-checker`: check if your themes implement all the required rules This flag allows you to check if your themes implement the necessary CSS rules. To put it more -simply, when adding a new theme, it needs to implements all the CSS rules present in the `ðark` and -`light` CSS themes. +simply, when adding a new theme, it needs to implements all the CSS rules present in the "light" +CSS theme. You can use this flag like this: diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 6e78198c87261..7af901ef1b40b 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -372,9 +372,15 @@ impl Options { return Err(1); } let (success, ret) = theme::test_theme_against(&theme_file, &paths, &diag); - if !success || !ret.is_empty() { - diag.struct_warn(&format!("invalid theme: \"{}\"", theme_s)) - .help("check what's wrong with the --theme-checker option") + if !success { + diag.struct_warn(&format!("error loading theme file: \"{}\"", theme_s)).emit(); + return Err(1); + } else if !ret.is_empty() { + diag.struct_warn(&format!("theme file \"{}\" is missing CSS rules from the \ + default theme", theme_s)) + .warn("the theme may appear incorrect when loaded") + .help(&format!("to see what rules are missing, call `rustdoc \ + --theme-checker \"{}\"`", theme_s)) .emit(); } themes.push(theme_file); From 8df4ce290b42d63e44735542b58369954eb2fd4a Mon Sep 17 00:00:00 2001 From: QuietMisdreavus Date: Fri, 24 May 2019 14:04:45 -0500 Subject: [PATCH 05/21] add test for rustdoc's --themes flag --- src/test/run-make-fulldeps/rustdoc-themes/Makefile | 10 ++++++++++ src/test/run-make-fulldeps/rustdoc-themes/foo.rs | 4 ++++ 2 files changed, 14 insertions(+) create mode 100644 src/test/run-make-fulldeps/rustdoc-themes/Makefile create mode 100644 src/test/run-make-fulldeps/rustdoc-themes/foo.rs diff --git a/src/test/run-make-fulldeps/rustdoc-themes/Makefile b/src/test/run-make-fulldeps/rustdoc-themes/Makefile new file mode 100644 index 0000000000000..a4536e77bd7b1 --- /dev/null +++ b/src/test/run-make-fulldeps/rustdoc-themes/Makefile @@ -0,0 +1,10 @@ +-include ../tools.mk + +# Test that rustdoc will properly load in a theme file and display it in the theme selector. + +OUTPUT_DIR := "$(TMPDIR)/rustdoc-themes" + +all: + cp $(S)/src/librustdoc/html/static/themes/light.css $(TMPDIR)/test.css + $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs --themes $(TMPDIR)/test.css + $(HTMLDOCCK) $(OUTPUT_DIR) foo.rs diff --git a/src/test/run-make-fulldeps/rustdoc-themes/foo.rs b/src/test/run-make-fulldeps/rustdoc-themes/foo.rs new file mode 100644 index 0000000000000..58efaf7d5a05a --- /dev/null +++ b/src/test/run-make-fulldeps/rustdoc-themes/foo.rs @@ -0,0 +1,4 @@ +// @has test.css +// @has foo/struct.Foo.html +// @has - '//link[@rel="stylesheet"]/@href' '../test.css' +pub struct Foo; From 2aa57e9dbcdea251d30dd1faa3382054bf65a779 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 30 Jun 2019 19:09:58 +0200 Subject: [PATCH 06/21] Prevent invalid html characters in themes name --- src/librustdoc/html/render.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 301dddbbfb9b2..1182b07cb91fc 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -568,7 +568,9 @@ fn write_shared( let content = try_err!(fs::read(&entry), &entry); let theme = try_none!(try_none!(entry.file_stem(), &entry).to_str(), &entry); let extension = try_none!(try_none!(entry.extension(), &entry).to_str(), &entry); - cx.shared.fs.write(cx.path(&format!("{}.{}", theme, extension)), content.as_slice())?; + cx.shared.fs.write( + cx.path(&format!("{}.{}", Escape(theme), extension)), + content.as_slice())?; themes.insert(theme.to_owned()); } From 5b2862c7835cd56f5c7cacb0c0701a2ace126e61 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 30 Jun 2019 19:23:45 +0200 Subject: [PATCH 07/21] Add sentence to tell other options are ignored when running check-theme --- src/librustdoc/config.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 7af901ef1b40b..ed549b8cb0985 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -279,12 +279,12 @@ impl Options { // check for deprecated options check_deprecated_options(&matches, &diag); - let to_check = matches.opt_strs("theme-checker"); + let to_check = matches.opt_strs("check-theme"); if !to_check.is_empty() { let paths = theme::load_css_paths(static_files::themes::LIGHT.as_bytes()); let mut errors = 0; - println!("rustdoc: [theme-checker] Starting tests!"); + println!("rustdoc: [check-theme] Starting tests! (Ignoring all other arguments)"); for theme_file in to_check.iter() { print!(" - Checking \"{}\"...", theme_file); let (success, differences) = theme::test_theme_against(theme_file, &paths, &diag); @@ -380,7 +380,7 @@ impl Options { default theme", theme_s)) .warn("the theme may appear incorrect when loaded") .help(&format!("to see what rules are missing, call `rustdoc \ - --theme-checker \"{}\"`", theme_s)) + --check-theme \"{}\"`", theme_s)) .emit(); } themes.push(theme_file); From 2f535a445f6b99e23d392022fe21d860e495d3d1 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 30 Jun 2019 19:24:32 +0200 Subject: [PATCH 08/21] Rename theme-checker option to check-theme --- src/doc/rustdoc/src/command-line-arguments.md | 4 ++-- src/doc/rustdoc/src/unstable-features.md | 6 +++--- src/librustdoc/html/static_files.rs | 2 +- src/librustdoc/lib.rs | 4 ++-- src/tools/rustdoc-themes/main.rs | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index 2c25baf373ed2..48fd8272d24f3 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -368,7 +368,7 @@ you'll need to this flag as follows: $ rustdoc src/lib.rs --themes /path/to/your/theme/file.css ``` -### `theme-checker`: check if your themes implement all the required rules +### `check-theme`: check if your themes implement all the required rules This flag allows you to check if your themes implement the necessary CSS rules. To put it more simply, when adding a new theme, it needs to implements all the CSS rules present in the "light" @@ -377,5 +377,5 @@ CSS theme. You can use this flag like this: ```bash -$ rustdoc src/lib.rs --theme-checker /path/to/your/theme/file.css +$ rustdoc src/lib.rs --check-theme /path/to/your/theme/file.css ``` diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md index 49d05b5038df7..27fed273a883d 100644 --- a/src/doc/rustdoc/src/unstable-features.md +++ b/src/doc/rustdoc/src/unstable-features.md @@ -334,14 +334,14 @@ $ rustdoc src/lib.rs -Z unstable-options --themes theme.css Giving this flag to `rustdoc` will make it copy your theme into the generated crate docs and enable it in the theme selector. Note that `rustdoc` will reject your theme file if it doesn't style -everything the "light" theme does. See `--theme-checker` below for details. +everything the "light" theme does. See `--check-theme` below for details. -### `--theme-checker`: verify theme CSS for validity +### `--check-theme`: verify theme CSS for validity Using this flag looks like this: ```bash -$ rustdoc -Z unstable-options --theme-checker theme.css +$ rustdoc -Z unstable-options --check-theme theme.css ``` Before including your theme in crate docs, `rustdoc` will compare all the CSS rules it contains diff --git a/src/librustdoc/html/static_files.rs b/src/librustdoc/html/static_files.rs index 3a2c24b1a967f..9fc1d76185fb7 100644 --- a/src/librustdoc/html/static_files.rs +++ b/src/librustdoc/html/static_files.rs @@ -59,7 +59,7 @@ pub static RUST_FAVICON: &'static [u8] = include_bytes!("static/favicon.ico"); /// The built-in themes given to every documentation site. pub mod themes { /// The "light" theme, selected by default when no setting is available. Used as the basis for - /// the `--theme-checker` functionality. + /// the `--check-theme` functionality. pub static LIGHT: &'static str = include_str!("static/themes/light.css"); /// The "dark" theme. diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 9ce7825ff6bed..3500393afd5cc 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -252,8 +252,8 @@ fn opts() -> Vec { "additional themes which will be added to the generated docs", "FILES") }), - stable("theme-checker", |o| { - o.optmulti("", "theme-checker", + stable("check-theme", |o| { + o.optmulti("", "check-theme", "check if given theme is valid", "FILES") }), diff --git a/src/tools/rustdoc-themes/main.rs b/src/tools/rustdoc-themes/main.rs index 616b5444832c1..b5be14fb41834 100644 --- a/src/tools/rustdoc-themes/main.rs +++ b/src/tools/rustdoc-themes/main.rs @@ -39,7 +39,7 @@ fn main() { exit(1); } let status = Command::new(rustdoc_bin) - .args(&["-Z", "unstable-options", "--theme-checker"]) + .args(&["-Z", "unstable-options", "--check-theme"]) .args(&themes) .status() .expect("failed to execute child"); From 29494a8c08e0853f6d29769e39e25ebd48edff98 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 26 Jul 2019 10:15:23 +0200 Subject: [PATCH 09/21] Fix typos Co-Authored-By: Oliver Middleton --- src/doc/rustdoc/src/command-line-arguments.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index 48fd8272d24f3..5a0a8f767442f 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -361,8 +361,8 @@ the given edition as well. As with `rustc`, the default edition that `rustdoc` w ## `themes`: add more themes to generated documentation -By default, `rustdoc` only provides the "dark" and light" themes. If you want to add new ones, -you'll need to this flag as follows: +By default, `rustdoc` only provides the "dark" and "light" themes. If you want to add new ones, +you'll need to use this flag as follows: ```bash $ rustdoc src/lib.rs --themes /path/to/your/theme/file.css From b65a3691b9dadbea4fb0f261381541ff9b99d108 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Wed, 21 Aug 2019 15:48:26 +0200 Subject: [PATCH 10/21] Improve documentation, add checks for themes option arguments, make sure the themes file names are js compatible --- src/doc/rustdoc/src/command-line-arguments.md | 5 ++++- src/librustdoc/config.rs | 8 +++++++- src/librustdoc/html/render.rs | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index 5a0a8f767442f..1f4584ec5645d 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -368,6 +368,9 @@ you'll need to use this flag as follows: $ rustdoc src/lib.rs --themes /path/to/your/theme/file.css ``` +Note that the theme's name will be the file name without its extension. So if you pass +`/path/to/your/theme/file.css` as theme, then the theme's name will be `file`. + ### `check-theme`: check if your themes implement all the required rules This flag allows you to check if your themes implement the necessary CSS rules. To put it more @@ -377,5 +380,5 @@ CSS theme. You can use this flag like this: ```bash -$ rustdoc src/lib.rs --check-theme /path/to/your/theme/file.css +$ rustdoc --check-theme /path/to/your/theme/file.css ``` diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index ed549b8cb0985..0342f5deccd94 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -1,4 +1,5 @@ use std::collections::BTreeMap; +use std::ffi::OsStr; use std::fmt; use std::path::PathBuf; @@ -371,9 +372,14 @@ impl Options { .emit(); return Err(1); } + if theme_file.extension() != Some(OsStr::new("css")) { + diag.struct_err(&format!("invalid file: \"{}\": expected CSS file", theme_s)) + .emit(); + return Err(1); + } let (success, ret) = theme::test_theme_against(&theme_file, &paths, &diag); if !success { - diag.struct_warn(&format!("error loading theme file: \"{}\"", theme_s)).emit(); + diag.struct_err(&format!("error loading theme file: \"{}\"", theme_s)).emit(); return Err(1); } else if !ret.is_empty() { diag.struct_warn(&format!("theme file \"{}\" is missing CSS rules from the \ diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 1182b07cb91fc..e8fa85535edf8 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -644,7 +644,7 @@ themePicker.onblur = handleThemeButtonsBlur; themes.appendChild(but); }});"#, themes.iter() - .map(|s| format!("\"{}\"", s)) + .map(|s| format!("\"{}\"", s.replace("\\", "\\\\").replace("\"", "\\\""))) .collect::>() .join(",")); write(cx.dst.join(&format!("theme{}.js", cx.shared.resource_suffix)), From c45a55364ff8090313e238ea6d1b75e692045d90 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 14 Sep 2019 17:43:10 +0200 Subject: [PATCH 11/21] rename check-theme option into check-themes --- src/librustdoc/config.rs | 6 +++--- src/librustdoc/html/render.rs | 7 ++----- src/librustdoc/html/static_files.rs | 2 +- src/librustdoc/lib.rs | 4 ++-- src/tools/rustdoc-themes/main.rs | 2 +- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 0342f5deccd94..50ee8ad1334bd 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -280,12 +280,12 @@ impl Options { // check for deprecated options check_deprecated_options(&matches, &diag); - let to_check = matches.opt_strs("check-theme"); + let to_check = matches.opt_strs("check-themes"); if !to_check.is_empty() { let paths = theme::load_css_paths(static_files::themes::LIGHT.as_bytes()); let mut errors = 0; - println!("rustdoc: [check-theme] Starting tests! (Ignoring all other arguments)"); + println!("rustdoc: [check-themes] Starting tests! (Ignoring all other arguments)"); for theme_file in to_check.iter() { print!(" - Checking \"{}\"...", theme_file); let (success, differences) = theme::test_theme_against(theme_file, &paths, &diag); @@ -386,7 +386,7 @@ impl Options { default theme", theme_s)) .warn("the theme may appear incorrect when loaded") .help(&format!("to see what rules are missing, call `rustdoc \ - --check-theme \"{}\"`", theme_s)) + --check-themes \"{}\"`", theme_s)) .emit(); } themes.push(theme_file); diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index e8fa85535edf8..ddf6c935d1a80 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -634,7 +634,7 @@ function handleThemeButtonsBlur(e) {{ themePicker.onclick = switchThemeButtonState; themePicker.onblur = handleThemeButtonsBlur; -[{}].forEach(function(item) {{ +{}.forEach(function(item) {{ var but = document.createElement('button'); but.innerHTML = item; but.onclick = function(el) {{ @@ -643,10 +643,7 @@ themePicker.onblur = handleThemeButtonsBlur; but.onblur = handleThemeButtonsBlur; themes.appendChild(but); }});"#, - themes.iter() - .map(|s| format!("\"{}\"", s.replace("\\", "\\\\").replace("\"", "\\\""))) - .collect::>() - .join(",")); + as_json(&themes)); write(cx.dst.join(&format!("theme{}.js", cx.shared.resource_suffix)), theme_js.as_bytes() )?; diff --git a/src/librustdoc/html/static_files.rs b/src/librustdoc/html/static_files.rs index 9fc1d76185fb7..8702ba224db56 100644 --- a/src/librustdoc/html/static_files.rs +++ b/src/librustdoc/html/static_files.rs @@ -59,7 +59,7 @@ pub static RUST_FAVICON: &'static [u8] = include_bytes!("static/favicon.ico"); /// The built-in themes given to every documentation site. pub mod themes { /// The "light" theme, selected by default when no setting is available. Used as the basis for - /// the `--check-theme` functionality. + /// the `--check-themes` functionality. pub static LIGHT: &'static str = include_str!("static/themes/light.css"); /// The "dark" theme. diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 3500393afd5cc..fe4f413662018 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -252,8 +252,8 @@ fn opts() -> Vec { "additional themes which will be added to the generated docs", "FILES") }), - stable("check-theme", |o| { - o.optmulti("", "check-theme", + stable("check-themes", |o| { + o.optmulti("", "check-themes", "check if given theme is valid", "FILES") }), diff --git a/src/tools/rustdoc-themes/main.rs b/src/tools/rustdoc-themes/main.rs index b5be14fb41834..fb0c9d7d4e0c4 100644 --- a/src/tools/rustdoc-themes/main.rs +++ b/src/tools/rustdoc-themes/main.rs @@ -39,7 +39,7 @@ fn main() { exit(1); } let status = Command::new(rustdoc_bin) - .args(&["-Z", "unstable-options", "--check-theme"]) + .args(&["-Z", "unstable-options", "--check-themes"]) .args(&themes) .status() .expect("failed to execute child"); From 747dcaf40148658c393de135d9ac4644b8d2dec4 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 14 Sep 2019 17:43:19 +0200 Subject: [PATCH 12/21] remove unstable docs --- src/doc/rustdoc/src/command-line-arguments.md | 4 ++-- src/doc/rustdoc/src/unstable-features.md | 24 ------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index 1f4584ec5645d..64eaf5282414b 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -371,7 +371,7 @@ $ rustdoc src/lib.rs --themes /path/to/your/theme/file.css Note that the theme's name will be the file name without its extension. So if you pass `/path/to/your/theme/file.css` as theme, then the theme's name will be `file`. -### `check-theme`: check if your themes implement all the required rules +### `check-themes`: check if your themes implement all the required rules This flag allows you to check if your themes implement the necessary CSS rules. To put it more simply, when adding a new theme, it needs to implements all the CSS rules present in the "light" @@ -380,5 +380,5 @@ CSS theme. You can use this flag like this: ```bash -$ rustdoc --check-theme /path/to/your/theme/file.css +$ rustdoc --check-themes /path/to/your/theme/file.css ``` diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md index 27fed273a883d..0d777675725e7 100644 --- a/src/doc/rustdoc/src/unstable-features.md +++ b/src/doc/rustdoc/src/unstable-features.md @@ -324,30 +324,6 @@ some consideration for their stability, and names that end in a number). Giving `rustdoc` will disable this sorting and instead make it print the items in the order they appear in the source. -### `--themes`: provide additional themes - -Using this flag looks like this: - -```bash -$ rustdoc src/lib.rs -Z unstable-options --themes theme.css -``` - -Giving this flag to `rustdoc` will make it copy your theme into the generated crate docs and enable -it in the theme selector. Note that `rustdoc` will reject your theme file if it doesn't style -everything the "light" theme does. See `--check-theme` below for details. - -### `--check-theme`: verify theme CSS for validity - -Using this flag looks like this: - -```bash -$ rustdoc -Z unstable-options --check-theme theme.css -``` - -Before including your theme in crate docs, `rustdoc` will compare all the CSS rules it contains -against the "light" theme included by default. Using this flag will allow you to see which rules are -missing if `rustdoc` rejects your theme. - ### `--resource-suffix`: modifying the name of CSS/JavaScript in crate docs Using this flag looks like this: From 94b21eb3f43110d5b05680243e6a6dfbd6a1406f Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 22 Sep 2019 22:35:25 +0200 Subject: [PATCH 13/21] Rename rustdoc options --themes and --check-themes to --theme and --check-theme --- src/doc/rustdoc/src/command-line-arguments.md | 8 ++++---- src/librustdoc/config.rs | 12 ++++++------ src/librustdoc/html/static_files.rs | 2 +- src/librustdoc/lib.rs | 8 ++++---- src/test/run-make-fulldeps/rustdoc-themes/Makefile | 2 +- src/tools/rustdoc-themes/main.rs | 7 +++++-- 6 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index 64eaf5282414b..c935699abb087 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -359,19 +359,19 @@ This flag allows `rustdoc` to treat your rust code as the given edition. It will the given edition as well. As with `rustc`, the default edition that `rustdoc` will use is `2015` (the first edition). -## `themes`: add more themes to generated documentation +## `theme`: add more themes to generated documentation By default, `rustdoc` only provides the "dark" and "light" themes. If you want to add new ones, you'll need to use this flag as follows: ```bash -$ rustdoc src/lib.rs --themes /path/to/your/theme/file.css +$ rustdoc src/lib.rs --theme /path/to/your/theme/file.css ``` Note that the theme's name will be the file name without its extension. So if you pass `/path/to/your/theme/file.css` as theme, then the theme's name will be `file`. -### `check-themes`: check if your themes implement all the required rules +### `check-theme`: check if your themes implement all the required rules This flag allows you to check if your themes implement the necessary CSS rules. To put it more simply, when adding a new theme, it needs to implements all the CSS rules present in the "light" @@ -380,5 +380,5 @@ CSS theme. You can use this flag like this: ```bash -$ rustdoc --check-themes /path/to/your/theme/file.css +$ rustdoc --check-theme /path/to/your/theme/file.css ``` diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 50ee8ad1334bd..e8367575b0ca4 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -280,12 +280,12 @@ impl Options { // check for deprecated options check_deprecated_options(&matches, &diag); - let to_check = matches.opt_strs("check-themes"); + let to_check = matches.opt_strs("check-theme"); if !to_check.is_empty() { let paths = theme::load_css_paths(static_files::themes::LIGHT.as_bytes()); let mut errors = 0; - println!("rustdoc: [check-themes] Starting tests! (Ignoring all other arguments)"); + println!("rustdoc: [check-theme] Starting tests! (Ignoring all other arguments)"); for theme_file in to_check.iter() { print!(" - Checking \"{}\"...", theme_file); let (success, differences) = theme::test_theme_against(theme_file, &paths, &diag); @@ -360,15 +360,15 @@ impl Options { } let mut themes = Vec::new(); - if matches.opt_present("themes") { + if matches.opt_present("theme") { let paths = theme::load_css_paths(static_files::themes::LIGHT.as_bytes()); - for (theme_file, theme_s) in matches.opt_strs("themes") + for (theme_file, theme_s) in matches.opt_strs("theme") .iter() .map(|s| (PathBuf::from(&s), s.to_owned())) { if !theme_file.is_file() { diag.struct_err(&format!("invalid file: \"{}\"", theme_s)) - .help("option --themes arguments must all be files") + .help("option --theme arguments must all be files") .emit(); return Err(1); } @@ -386,7 +386,7 @@ impl Options { default theme", theme_s)) .warn("the theme may appear incorrect when loaded") .help(&format!("to see what rules are missing, call `rustdoc \ - --check-themes \"{}\"`", theme_s)) + --check-theme \"{}\"`", theme_s)) .emit(); } themes.push(theme_file); diff --git a/src/librustdoc/html/static_files.rs b/src/librustdoc/html/static_files.rs index 8702ba224db56..9fc1d76185fb7 100644 --- a/src/librustdoc/html/static_files.rs +++ b/src/librustdoc/html/static_files.rs @@ -59,7 +59,7 @@ pub static RUST_FAVICON: &'static [u8] = include_bytes!("static/favicon.ico"); /// The built-in themes given to every documentation site. pub mod themes { /// The "light" theme, selected by default when no setting is available. Used as the basis for - /// the `--check-themes` functionality. + /// the `--check-theme` functionality. pub static LIGHT: &'static str = include_str!("static/themes/light.css"); /// The "dark" theme. diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index fe4f413662018..38417ce6ee8fe 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -247,13 +247,13 @@ fn opts() -> Vec { o.optflag("", "sort-modules-by-appearance", "sort modules by where they appear in the \ program, rather than alphabetically") }), - stable("themes", |o| { - o.optmulti("", "themes", + stable("theme", |o| { + o.optmulti("", "theme", "additional themes which will be added to the generated docs", "FILES") }), - stable("check-themes", |o| { - o.optmulti("", "check-themes", + stable("check-theme", |o| { + o.optmulti("", "check-theme", "check if given theme is valid", "FILES") }), diff --git a/src/test/run-make-fulldeps/rustdoc-themes/Makefile b/src/test/run-make-fulldeps/rustdoc-themes/Makefile index a4536e77bd7b1..f5a471e66e573 100644 --- a/src/test/run-make-fulldeps/rustdoc-themes/Makefile +++ b/src/test/run-make-fulldeps/rustdoc-themes/Makefile @@ -6,5 +6,5 @@ OUTPUT_DIR := "$(TMPDIR)/rustdoc-themes" all: cp $(S)/src/librustdoc/html/static/themes/light.css $(TMPDIR)/test.css - $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs --themes $(TMPDIR)/test.css + $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs --theme $(TMPDIR)/test.css $(HTMLDOCCK) $(OUTPUT_DIR) foo.rs diff --git a/src/tools/rustdoc-themes/main.rs b/src/tools/rustdoc-themes/main.rs index fb0c9d7d4e0c4..87c1de3e715e1 100644 --- a/src/tools/rustdoc-themes/main.rs +++ b/src/tools/rustdoc-themes/main.rs @@ -38,9 +38,12 @@ fn main() { eprintln!("No theme found in \"{}\"...", themes_folder); exit(1); } + let arg_name = "--check-theme".to_owned(); let status = Command::new(rustdoc_bin) - .args(&["-Z", "unstable-options", "--check-themes"]) - .args(&themes) + .args(&["-Z", "unstable-options"]) + .args(&themes.iter() + .flat_map(|t| vec![&arg_name, t].into_iter()) + .collect::>()) .status() .expect("failed to execute child"); if !status.success() { From c614cadd7d6cc4ec1b80e5563f83ec20393d255d Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 10 Oct 2019 12:09:01 +0200 Subject: [PATCH 14/21] Apply review comments --- src/doc/rustdoc/src/command-line-arguments.md | 2 +- src/librustdoc/html/layout.rs | 10 ++++++---- src/librustdoc/html/render.rs | 6 ++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index c935699abb087..40bd6f43c61f0 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -374,7 +374,7 @@ Note that the theme's name will be the file name without its extension. So if yo ### `check-theme`: check if your themes implement all the required rules This flag allows you to check if your themes implement the necessary CSS rules. To put it more -simply, when adding a new theme, it needs to implements all the CSS rules present in the "light" +simply, when adding a new theme, it needs to implement all the CSS rules present in the "light" CSS theme. You can use this flag like this: diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs index 6414241727a72..af6c8cd435dff 100644 --- a/src/librustdoc/html/layout.rs +++ b/src/librustdoc/html/layout.rs @@ -1,6 +1,7 @@ use std::path::PathBuf; use crate::externalfiles::ExternalHtml; +use crate::html::escape::Escape; use crate::html::render::ensure_trailing_slash; use crate::html::format::{Buffer, Print}; @@ -213,10 +214,11 @@ pub fn render( themes = themes.iter() .filter_map(|t| t.file_stem()) .filter_map(|t| t.to_str()) - .map(|t| format!(r#""#, - static_root_path, - t, - page.resource_suffix)) + .map(|t| format!(r#""#, + Escape(&format!("{}{}{}", + static_root_path, + t, + page.resource_suffix)))) .collect::(), suffix=page.resource_suffix, static_extra_scripts=page.static_extra_scripts.iter().map(|e| { diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index ddf6c935d1a80..d32acd8649f27 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -568,9 +568,7 @@ fn write_shared( let content = try_err!(fs::read(&entry), &entry); let theme = try_none!(try_none!(entry.file_stem(), &entry).to_str(), &entry); let extension = try_none!(try_none!(entry.extension(), &entry).to_str(), &entry); - cx.shared.fs.write( - cx.path(&format!("{}.{}", Escape(theme), extension)), - content.as_slice())?; + cx.shared.fs.write(cx.path(&format!("{}.{}", theme, extension)), content.as_slice())?; themes.insert(theme.to_owned()); } @@ -636,7 +634,7 @@ themePicker.onclick = switchThemeButtonState; themePicker.onblur = handleThemeButtonsBlur; {}.forEach(function(item) {{ var but = document.createElement('button'); - but.innerHTML = item; + but.textContent = item; but.onclick = function(el) {{ switchTheme(currentTheme, mainTheme, item, true); }}; From 82a7b32220158bfcd8a6bd72aeaad9b46cf2d0e5 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 12 Oct 2019 11:53:02 +0200 Subject: [PATCH 15/21] remove -Z option from rustdoc theme checker tool --- src/tools/rustdoc-themes/main.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tools/rustdoc-themes/main.rs b/src/tools/rustdoc-themes/main.rs index 87c1de3e715e1..a549b0d0efaac 100644 --- a/src/tools/rustdoc-themes/main.rs +++ b/src/tools/rustdoc-themes/main.rs @@ -40,7 +40,6 @@ fn main() { } let arg_name = "--check-theme".to_owned(); let status = Command::new(rustdoc_bin) - .args(&["-Z", "unstable-options"]) .args(&themes.iter() .flat_map(|t| vec![&arg_name, t].into_iter()) .collect::>()) From 1ebb9ece2fd7453dd90fb48718a8faa8ca295eb2 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 17 Oct 2019 14:26:21 +0200 Subject: [PATCH 16/21] improve error messages and documentation --- src/doc/rustdoc/src/command-line-arguments.md | 34 ++++++++++++------- src/librustdoc/config.rs | 6 ++-- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md index 40bd6f43c61f0..2e32ce31ecae0 100644 --- a/src/doc/rustdoc/src/command-line-arguments.md +++ b/src/doc/rustdoc/src/command-line-arguments.md @@ -359,26 +359,34 @@ This flag allows `rustdoc` to treat your rust code as the given edition. It will the given edition as well. As with `rustc`, the default edition that `rustdoc` will use is `2015` (the first edition). -## `theme`: add more themes to generated documentation +## `--theme`: add a theme to the documentation output -By default, `rustdoc` only provides the "dark" and "light" themes. If you want to add new ones, -you'll need to use this flag as follows: +Using this flag looks like this: ```bash -$ rustdoc src/lib.rs --theme /path/to/your/theme/file.css +$ rustdoc src/lib.rs --theme /path/to/your/custom-theme.css ``` -Note that the theme's name will be the file name without its extension. So if you pass -`/path/to/your/theme/file.css` as theme, then the theme's name will be `file`. - -### `check-theme`: check if your themes implement all the required rules +`rustdoc`'s default output includes two themes: `light` (the default) and +`dark`. This flag allows you to add custom themes to the output. Giving a CSS +file to this flag adds it to your documentation as an additional theme choice. +The theme's name is determined by its filename; a theme file named +`custom-theme.css` will add a theme named `custom-theme` to the documentation. -This flag allows you to check if your themes implement the necessary CSS rules. To put it more -simply, when adding a new theme, it needs to implement all the CSS rules present in the "light" -CSS theme. +## `--check-theme`: verify custom themes against the default theme -You can use this flag like this: +Using this flag looks like this: ```bash -$ rustdoc --check-theme /path/to/your/theme/file.css +$ rustdoc --check-theme /path/to/your/custom-theme.css ``` + +While `rustdoc`'s HTML output is more-or-less consistent between versions, there +is no guarantee that a theme file will have the same effect. The `--theme` flag +will still allow you to add the theme to your documentation, but to ensure that +your theme works as expected, you can use this flag to verify that it implements +the same CSS rules as the official `light` theme. + +`--check-theme` is a separate mode in `rustdoc`. When `rustdoc` sees the +`--check-theme` flag, it discards all other flags and only performs the CSS rule +comparison operation. diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index e8367575b0ca4..c7497f5b49150 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -367,13 +367,13 @@ impl Options { .iter() .map(|s| (PathBuf::from(&s), s.to_owned())) { if !theme_file.is_file() { - diag.struct_err(&format!("invalid file: \"{}\"", theme_s)) - .help("option --theme arguments must all be files") + diag.struct_err(&format!("invalid argument: \"{}\"", theme_s)) + .help("arguments to --theme must be files") .emit(); return Err(1); } if theme_file.extension() != Some(OsStr::new("css")) { - diag.struct_err(&format!("invalid file: \"{}\": expected CSS file", theme_s)) + diag.struct_err(&format!("invalid argument: \"{}\"", theme_s)) .emit(); return Err(1); } From 1907589fbb87e63b2c93808f485f021d2cc81ca5 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Fri, 8 Nov 2019 16:15:17 -0800 Subject: [PATCH 17/21] rustdoc: Stabilize `edition` annotation. --- src/librustdoc/html/markdown.rs | 4 +--- src/test/rustdoc/edition-flag.rs | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index 9ff1e1d31197d..fc4dc52f127df 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -680,9 +680,7 @@ impl LangString { seen_rust_tags = !seen_other_tags || seen_rust_tags; data.no_run = true; } - x if allow_error_code_check && x.starts_with("edition") => { - // allow_error_code_check is true if we're on nightly, which - // is needed for edition support + x if x.starts_with("edition") => { data.edition = x[7..].parse::().ok(); } x if allow_error_code_check && x.starts_with("E") && x.len() == 5 => { diff --git a/src/test/rustdoc/edition-flag.rs b/src/test/rustdoc/edition-flag.rs index ddbc2be651d90..e54c7d2969bfe 100644 --- a/src/test/rustdoc/edition-flag.rs +++ b/src/test/rustdoc/edition-flag.rs @@ -1,4 +1,4 @@ -// compile-flags:--test -Z unstable-options +// compile-flags:--test // edition:2018 /// ```rust From 71cf364c3cf1c6b437be0e9352fa6d3ee8191404 Mon Sep 17 00:00:00 2001 From: Stefan Schindler Date: Fri, 15 Nov 2019 02:02:09 +0100 Subject: [PATCH 18/21] Fix the source code highlighting on source comments --- src/librustdoc/html/static/main.js | 56 +++++++++++++++++------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 04c0a0f005b82..e992c0b62bf00 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -396,38 +396,46 @@ function getSearchElement() { document.onkeypress = handleShortcut; document.onkeydown = handleShortcut; - document.onclick = function(ev) { - if (hasClass(ev.target, "collapse-toggle")) { - collapseDocs(ev.target, "toggle"); - } else if (hasClass(ev.target.parentNode, "collapse-toggle")) { - collapseDocs(ev.target.parentNode, "toggle"); - } else if (ev.target.tagName === "SPAN" && hasClass(ev.target.parentNode, "line-numbers")) { - var prev_id = 0; - var set_fragment = function(name) { - if (browserSupportsHistoryApi()) { - history.replaceState(null, null, "#" + name); - highlightSourceLines(); - } else { - location.replace("#" + name); - } - }; + var handleSourceHighlight = (function() { + var prev_line_id = 0; + + var set_fragment = function(name) { + if (browserSupportsHistoryApi()) { + history.replaceState(null, null, "#" + name); + highlightSourceLines(); + } else { + location.replace("#" + name); + } + }; - var cur_id = parseInt(ev.target.id, 10); + return function(ev) { + var cur_line_id = parseInt(ev.target.id, 10); - if (ev.shiftKey && prev_id) { - if (prev_id > cur_id) { - var tmp = prev_id; - prev_id = cur_id; - cur_id = tmp; + if (ev.shiftKey && prev_line_id) { + // Swap selection if needed + if (prev_line_id > cur_line_id) { + var tmp = prev_line_id; + prev_line_id = cur_line_id; + cur_line_id = tmp; } - set_fragment(prev_id + "-" + cur_id); + set_fragment(prev_line_id + "-" + cur_line_id); } else { - prev_id = cur_id; + prev_line_id = cur_line_id; - set_fragment(cur_id); + set_fragment(cur_line_id); } + } + })(); + + document.onclick = function(ev) { + if (hasClass(ev.target, "collapse-toggle")) { + collapseDocs(ev.target, "toggle"); + } else if (hasClass(ev.target.parentNode, "collapse-toggle")) { + collapseDocs(ev.target.parentNode, "toggle"); + } else if (ev.target.tagName === "SPAN" && hasClass(ev.target.parentNode, "line-numbers")) { + handleSourceHighlight(ev); } else if (hasClass(getHelpElement(), "hidden") === false) { var help = getHelpElement(); var is_inside_help_popup = ev.target !== help && help.contains(ev.target); From 1bbb8168ec5aa2d03e1b49d5a38eda0300c67da4 Mon Sep 17 00:00:00 2001 From: Stefan Schindler Date: Fri, 15 Nov 2019 02:30:44 +0100 Subject: [PATCH 19/21] Prevent jumps when selecting one or many lines --- src/librustdoc/html/static/main.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index e992c0b62bf00..4db02d58c51ac 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -401,16 +401,21 @@ function getSearchElement() { var prev_line_id = 0; var set_fragment = function(name) { + var x = window.scrollX, + y = window.scrollY; if (browserSupportsHistoryApi()) { history.replaceState(null, null, "#" + name); highlightSourceLines(); } else { location.replace("#" + name); } + // Prevent jumps when selecting one or many lines + window.scrollTo(x, y); }; return function(ev) { var cur_line_id = parseInt(ev.target.id, 10); + ev.preventDefault(); if (ev.shiftKey && prev_line_id) { // Swap selection if needed From 4e1eeb9a4543c9c1bfbbac0b7813520c5b0be5ef Mon Sep 17 00:00:00 2001 From: clemencetbk Date: Sat, 16 Nov 2019 12:04:17 -0500 Subject: [PATCH 20/21] Add explanation message for E0641 --- src/librustc_error_codes/error_codes.rs | 2 +- src/librustc_error_codes/error_codes/E0641.md | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/librustc_error_codes/error_codes/E0641.md diff --git a/src/librustc_error_codes/error_codes.rs b/src/librustc_error_codes/error_codes.rs index ffefe51f854f5..f886d06b96d1b 100644 --- a/src/librustc_error_codes/error_codes.rs +++ b/src/librustc_error_codes/error_codes.rs @@ -351,6 +351,7 @@ E0635: include_str!("./error_codes/E0635.md"), E0636: include_str!("./error_codes/E0636.md"), E0638: include_str!("./error_codes/E0638.md"), E0639: include_str!("./error_codes/E0639.md"), +E0641: include_str!("./error_codes/E0641.md"), E0642: include_str!("./error_codes/E0642.md"), E0643: include_str!("./error_codes/E0643.md"), E0644: include_str!("./error_codes/E0644.md"), @@ -585,7 +586,6 @@ E0744: include_str!("./error_codes/E0744.md"), E0634, // type has conflicting packed representaton hints E0637, // "'_" is not a valid lifetime bound E0640, // infer outlives requirements - E0641, // cannot cast to/from a pointer with an unknown kind // E0645, // trait aliases not finished E0657, // `impl Trait` can only capture lifetimes bound at the fn level E0667, // `impl Trait` in projections diff --git a/src/librustc_error_codes/error_codes/E0641.md b/src/librustc_error_codes/error_codes/E0641.md new file mode 100644 index 0000000000000..e39bebce1fea6 --- /dev/null +++ b/src/librustc_error_codes/error_codes/E0641.md @@ -0,0 +1,19 @@ +Attempted to cast to/from a pointer with an unknown kind. + +Erroneous code examples: + +```compile_fail,E0641 +let b = 0 as *const _; // error +``` + +Must give information for type of pointer that is being cast from/to if the +type cannot be inferred. + +``` +// Creating a pointer from reference: type can be inferred +let a = &(String::from("Hello world!")) as *const _; // Ok + +let b = 0 as *const i32; // Ok + +let c: *const i32 = 0 as *const _; // Ok +``` \ No newline at end of file From dc137dd868daaa2d7821997e6a87d49fbb9e4ca8 Mon Sep 17 00:00:00 2001 From: clemencetbk Date: Sat, 16 Nov 2019 12:05:26 -0500 Subject: [PATCH 21/21] Update ui tests --- src/test/ui/issues/issue-45730.stderr | 1 + src/test/ui/order-dependent-cast-inference.stderr | 1 + 2 files changed, 2 insertions(+) diff --git a/src/test/ui/issues/issue-45730.stderr b/src/test/ui/issues/issue-45730.stderr index 4fc1e3835f7ad..3c400d6eefaa8 100644 --- a/src/test/ui/issues/issue-45730.stderr +++ b/src/test/ui/issues/issue-45730.stderr @@ -30,3 +30,4 @@ LL | let x = 0 as *const i32 as *const _ as *mut _; error: aborting due to 3 previous errors +For more information about this error, try `rustc --explain E0641`. diff --git a/src/test/ui/order-dependent-cast-inference.stderr b/src/test/ui/order-dependent-cast-inference.stderr index 01e59f8f022fd..081038c573acf 100644 --- a/src/test/ui/order-dependent-cast-inference.stderr +++ b/src/test/ui/order-dependent-cast-inference.stderr @@ -10,3 +10,4 @@ LL | let mut y = 0 as *const _; error: aborting due to previous error +For more information about this error, try `rustc --explain E0641`.