about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <jtitor@2k36.org>2021-06-22 20:01:04 +0900
committerGitHub <noreply@github.com>2021-06-22 20:01:04 +0900
commit8af9339e49304f504d6c1c6c2210c44bbed45fc4 (patch)
tree05d98a63483fcc866936effd4f9f3a332f1037fd
parent555fbd7a43824503e3163762978fc21761d40b31 (diff)
parentff0e0466abc364f90bd5930b9e48cce41aa08137 (diff)
Rollup merge of #86501 - jyn514:doctest-cleanup, r=CraftSpider
Cleanup handling of `crate_name` for doctests

- Remove unnecessary reallocation
- Remove unnecessary messing around with `queries` for the crate name; it's simpler and faster to go through the TyCtxt instead
- Rename `cratename` -> `crate_name` for consistency with the rest of the compiler
-rw-r--r--src/librustdoc/doctest.rs40
-rw-r--r--src/librustdoc/markdown.rs3
2 files changed, 22 insertions, 21 deletions
diff --git a/src/librustdoc/doctest.rs b/src/librustdoc/doctest.rs
index 88e2f6048e9..1750f05b4dc 100644
--- a/src/librustdoc/doctest.rs
+++ b/src/librustdoc/doctest.rs
@@ -3,6 +3,7 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet};
 use rustc_data_structures::sync::Lrc;
 use rustc_errors::{ColorConfig, ErrorReported};
 use rustc_hir as hir;
+use rustc_hir::def_id::LOCAL_CRATE;
 use rustc_hir::intravisit;
 use rustc_hir::{HirId, CRATE_HIR_ID};
 use rustc_interface::interface;
@@ -13,6 +14,7 @@ use rustc_session::{lint, DiagnosticOutput, Session};
 use rustc_span::edition::Edition;
 use rustc_span::source_map::SourceMap;
 use rustc_span::symbol::sym;
+use rustc_span::Symbol;
 use rustc_span::{BytePos, FileName, Pos, Span, DUMMY_SP};
 use rustc_target::spec::TargetTriple;
 use tempfile::Builder as TempFileBuilder;
@@ -111,8 +113,6 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
     let res = interface::run_compiler(config, |compiler| {
         compiler.enter(|queries| {
             let _lower_to_hir = queries.lower_to_hir()?;
-
-            let crate_name = queries.crate_name()?.peek().to_string();
             let mut global_ctxt = queries.global_ctxt()?.take();
 
             let collector = global_ctxt.enter(|tcx| {
@@ -123,7 +123,7 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
                 opts.display_warnings |= options.display_warnings;
                 let enable_per_target_ignores = options.enable_per_target_ignores;
                 let mut collector = Collector::new(
-                    crate_name,
+                    tcx.crate_name(LOCAL_CRATE),
                     options,
                     false,
                     opts,
@@ -293,7 +293,7 @@ struct UnusedExterns {
 
 fn run_test(
     test: &str,
-    cratename: &str,
+    crate_name: &str,
     line: usize,
     options: Options,
     should_panic: bool,
@@ -312,7 +312,7 @@ fn run_test(
     report_unused_externs: impl Fn(UnusedExterns),
 ) -> Result<(), TestFailure> {
     let (test, line_offset, supports_color) =
-        make_test(test, Some(cratename), as_test_harness, opts, edition, Some(test_id));
+        make_test(test, Some(crate_name), as_test_harness, opts, edition, Some(test_id));
 
     let output_file = outdir.path().join("rust_out");
 
@@ -479,7 +479,7 @@ fn run_test(
 /// lines before the test code begins as well as if the output stream supports colors or not.
 crate fn make_test(
     s: &str,
-    cratename: Option<&str>,
+    crate_name: Option<&str>,
     dont_insert_main: bool,
     opts: &TestOptions,
     edition: Edition,
@@ -540,7 +540,7 @@ crate fn make_test(
             let sess = ParseSess::with_span_handler(handler, sm);
 
             let mut found_main = false;
-            let mut found_extern_crate = cratename.is_none();
+            let mut found_extern_crate = crate_name.is_none();
             let mut found_macro = false;
 
             let mut parser = match maybe_new_parser_from_source_str(&sess, filename, source) {
@@ -567,13 +567,13 @@ crate fn make_test(
 
                         if !found_extern_crate {
                             if let ast::ItemKind::ExternCrate(original) = item.kind {
-                                // This code will never be reached if `cratename` is none because
+                                // This code will never be reached if `crate_name` is none because
                                 // `found_extern_crate` is initialized to `true` if it is none.
-                                let cratename = cratename.unwrap();
+                                let crate_name = crate_name.unwrap();
 
                                 match original {
-                                    Some(name) => found_extern_crate = name.as_str() == cratename,
-                                    None => found_extern_crate = item.ident.as_str() == cratename,
+                                    Some(name) => found_extern_crate = name.as_str() == crate_name,
+                                    None => found_extern_crate = item.ident.as_str() == crate_name,
                                 }
                             }
                         }
@@ -631,14 +631,14 @@ crate fn make_test(
 
     // Don't inject `extern crate std` because it's already injected by the
     // compiler.
-    if !already_has_extern_crate && !opts.no_crate_inject && cratename != Some("std") {
-        if let Some(cratename) = cratename {
+    if !already_has_extern_crate && !opts.no_crate_inject && crate_name != Some("std") {
+        if let Some(crate_name) = crate_name {
             // Don't inject `extern crate` if the crate is never used.
             // NOTE: this is terribly inaccurate because it doesn't actually
             // parse the source, but only has false positives, not false
             // negatives.
-            if s.contains(cratename) {
-                prog.push_str(&format!("extern crate r#{};\n", cratename));
+            if s.contains(crate_name) {
+                prog.push_str(&format!("extern crate r#{};\n", crate_name));
                 line_offset += 1;
             }
         }
@@ -797,7 +797,7 @@ crate struct Collector {
     options: Options,
     use_headers: bool,
     enable_per_target_ignores: bool,
-    cratename: String,
+    crate_name: Symbol,
     opts: TestOptions,
     position: Span,
     source_map: Option<Lrc<SourceMap>>,
@@ -809,7 +809,7 @@ crate struct Collector {
 
 impl Collector {
     crate fn new(
-        cratename: String,
+        crate_name: Symbol,
         options: Options,
         use_headers: bool,
         opts: TestOptions,
@@ -823,7 +823,7 @@ impl Collector {
             options,
             use_headers,
             enable_per_target_ignores,
-            cratename,
+            crate_name,
             opts,
             position: DUMMY_SP,
             source_map,
@@ -871,7 +871,7 @@ impl Tester for Collector {
     fn add_test(&mut self, test: String, config: LangString, line: usize) {
         let filename = self.get_filename();
         let name = self.generate_name(line, &filename);
-        let cratename = self.cratename.to_string();
+        let crate_name = self.crate_name.to_string();
         let opts = self.opts.clone();
         let edition = config.edition.unwrap_or(self.options.edition);
         let options = self.options.clone();
@@ -954,7 +954,7 @@ impl Tester for Collector {
                 };
                 let res = run_test(
                     &test,
-                    &cratename,
+                    &crate_name,
                     line,
                     options,
                     config.should_panic,
diff --git a/src/librustdoc/markdown.rs b/src/librustdoc/markdown.rs
index 963f2cf71f3..5da3a75e876 100644
--- a/src/librustdoc/markdown.rs
+++ b/src/librustdoc/markdown.rs
@@ -4,6 +4,7 @@ use std::path::Path;
 
 use rustc_span::edition::Edition;
 use rustc_span::source_map::DUMMY_SP;
+use rustc_span::Symbol;
 
 use crate::config::{Options, RenderOptions};
 use crate::doctest::{Collector, TestOptions};
@@ -121,7 +122,7 @@ crate fn test(mut options: Options) -> Result<(), String> {
     opts.no_crate_inject = true;
     opts.display_warnings = options.display_warnings;
     let mut collector = Collector::new(
-        options.input.display().to_string(),
+        Symbol::intern(&options.input.display().to_string()),
         options.clone(),
         true,
         opts,