diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2021-07-08 18:30:32 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-08 18:30:32 +0200 |
| commit | d9297aea101473d2dc59c702f96a02e64772c149 (patch) | |
| tree | 4ae63026c187fa7a877a265ac169690649e9ce01 /src | |
| parent | 0deb536ff987d7200f5ea35634781e9df9d5b666 (diff) | |
| parent | d891c8cd544e7f01dba2163cd1016ddf90dfedaf (diff) | |
| download | rust-d9297aea101473d2dc59c702f96a02e64772c149.tar.gz rust-d9297aea101473d2dc59c702f96a02e64772c149.zip | |
Rollup merge of #84961 - GuillaumeGomez:rework-session-globals, r=oli-obk
Rework SESSION_GLOBALS API Fixes #84954. <s>Needs #84953 to be merged first (I cherry-picked its commits to have CI pass).</s> (done) r? ``@Aaron1011``
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/clean/cfg/tests.rs | 18 | ||||
| -rw-r--r-- | src/librustdoc/doctest.rs | 2 | ||||
| -rw-r--r-- | src/librustdoc/html/highlight/tests.rs | 6 | ||||
| -rw-r--r-- | src/librustdoc/passes/unindent_comments/tests.rs | 4 | ||||
| -rw-r--r-- | src/test/ui-fulldeps/mod_dir_path_canonicalized.rs | 2 | ||||
| -rw-r--r-- | src/test/ui-fulldeps/pprust-expr-roundtrip.rs | 2 | ||||
| -rw-r--r-- | src/tools/clippy/clippy_lints/src/doc.rs | 12 | ||||
| -rw-r--r-- | src/tools/error_index_generator/main.rs | 3 | ||||
| -rw-r--r-- | src/tools/rustfmt/src/formatting.rs | 2 |
9 files changed, 28 insertions, 23 deletions
diff --git a/src/librustdoc/clean/cfg/tests.rs b/src/librustdoc/clean/cfg/tests.rs index 34b9cbcb679..275d1b3ebd9 100644 --- a/src/librustdoc/clean/cfg/tests.rs +++ b/src/librustdoc/clean/cfg/tests.rs @@ -2,8 +2,8 @@ use super::*; use rustc_ast::attr; use rustc_ast::Path; +use rustc_span::create_default_session_globals_then; use rustc_span::symbol::{Ident, Symbol}; -use rustc_span::with_default_session_globals; use rustc_span::DUMMY_SP; fn word_cfg(s: &str) -> Cfg { @@ -52,7 +52,7 @@ macro_rules! dummy_meta_item_list { #[test] fn test_cfg_not() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { assert_eq!(!Cfg::False, Cfg::True); assert_eq!(!Cfg::True, Cfg::False); assert_eq!(!word_cfg("test"), Cfg::Not(Box::new(word_cfg("test")))); @@ -70,7 +70,7 @@ fn test_cfg_not() { #[test] fn test_cfg_and() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { let mut x = Cfg::False; x &= Cfg::True; assert_eq!(x, Cfg::False); @@ -154,7 +154,7 @@ fn test_cfg_and() { #[test] fn test_cfg_or() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { let mut x = Cfg::True; x |= Cfg::False; assert_eq!(x, Cfg::True); @@ -238,7 +238,7 @@ fn test_cfg_or() { #[test] fn test_parse_ok() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { let mi = dummy_meta_item_word("all"); assert_eq!(Cfg::parse(&mi), Ok(word_cfg("all"))); @@ -271,7 +271,7 @@ fn test_parse_ok() { #[test] fn test_parse_err() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { let mi = attr::mk_name_value_item(Ident::from_str("foo"), LitKind::Bool(false), DUMMY_SP); assert!(Cfg::parse(&mi).is_err()); @@ -303,7 +303,7 @@ fn test_parse_err() { #[test] fn test_render_short_html() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { assert_eq!(word_cfg("unix").render_short_html(), "Unix"); assert_eq!(name_value_cfg("target_os", "macos").render_short_html(), "macOS"); assert_eq!(name_value_cfg("target_pointer_width", "16").render_short_html(), "16-bit"); @@ -358,7 +358,7 @@ fn test_render_short_html() { #[test] fn test_render_long_html() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { assert_eq!( word_cfg("unix").render_long_html(), "This is supported on <strong>Unix</strong> only." @@ -442,7 +442,7 @@ fn test_render_long_html() { fn test_simplify_with() { // This is a tiny subset of things that could be simplified, but it likely covers 90% of // real world usecases well. - with_default_session_globals(|| { + create_default_session_globals_then(|| { let foo = word_cfg("foo"); let bar = word_cfg("bar"); let baz = word_cfg("baz"); diff --git a/src/librustdoc/doctest.rs b/src/librustdoc/doctest.rs index 1281f76fd0f..cd914f05e68 100644 --- a/src/librustdoc/doctest.rs +++ b/src/librustdoc/doctest.rs @@ -513,7 +513,7 @@ crate fn make_test( // Uses librustc_ast to parse the doctest and find if there's a main fn and the extern // crate already is included. let result = rustc_driver::catch_fatal_errors(|| { - rustc_span::with_session_globals(edition, || { + rustc_span::create_session_if_not_set_then(edition, |_| { use rustc_errors::emitter::{Emitter, EmitterWriter}; use rustc_errors::Handler; use rustc_parse::maybe_new_parser_from_source_str; diff --git a/src/librustdoc/html/highlight/tests.rs b/src/librustdoc/html/highlight/tests.rs index a0da2c963d1..a505865b149 100644 --- a/src/librustdoc/html/highlight/tests.rs +++ b/src/librustdoc/html/highlight/tests.rs @@ -1,8 +1,8 @@ use super::write_code; use crate::html::format::Buffer; use expect_test::expect_file; +use rustc_span::create_default_session_globals_then; use rustc_span::edition::Edition; -use rustc_span::with_default_session_globals; const STYLE: &str = r#" <style> @@ -18,7 +18,7 @@ const STYLE: &str = r#" #[test] fn test_html_highlighting() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { let src = include_str!("fixtures/sample.rs"); let html = { let mut out = Buffer::new(); @@ -31,7 +31,7 @@ fn test_html_highlighting() { #[test] fn test_dos_backline() { - with_default_session_globals(|| { + create_default_session_globals_then(|| { let src = "pub fn foo() {\r\n\ println!(\"foo\");\r\n\ }\r\n"; diff --git a/src/librustdoc/passes/unindent_comments/tests.rs b/src/librustdoc/passes/unindent_comments/tests.rs index 9c9924841b9..82d1afac5ec 100644 --- a/src/librustdoc/passes/unindent_comments/tests.rs +++ b/src/librustdoc/passes/unindent_comments/tests.rs @@ -1,7 +1,7 @@ use super::*; +use rustc_span::create_default_session_globals_then; use rustc_span::source_map::DUMMY_SP; use rustc_span::symbol::Symbol; -use rustc_span::with_default_session_globals; fn create_doc_fragment(s: &str) -> Vec<DocFragment> { vec![DocFragment { @@ -17,7 +17,7 @@ fn create_doc_fragment(s: &str) -> Vec<DocFragment> { #[track_caller] fn run_test(input: &str, expected: &str) { - with_default_session_globals(|| { + create_default_session_globals_then(|| { let mut s = create_doc_fragment(input); unindent_fragments(&mut s); assert_eq!(&s.iter().collect::<String>(), expected); diff --git a/src/test/ui-fulldeps/mod_dir_path_canonicalized.rs b/src/test/ui-fulldeps/mod_dir_path_canonicalized.rs index 448c57da754..bb246de0e57 100644 --- a/src/test/ui-fulldeps/mod_dir_path_canonicalized.rs +++ b/src/test/ui-fulldeps/mod_dir_path_canonicalized.rs @@ -19,7 +19,7 @@ use std::path::Path; mod gravy; pub fn main() { - rustc_span::with_default_session_globals(|| parse()); + rustc_span::create_default_session_globals_then(|| parse()); assert_eq!(gravy::foo(), 10); } diff --git a/src/test/ui-fulldeps/pprust-expr-roundtrip.rs b/src/test/ui-fulldeps/pprust-expr-roundtrip.rs index 091c834eccf..36ff8b01fd4 100644 --- a/src/test/ui-fulldeps/pprust-expr-roundtrip.rs +++ b/src/test/ui-fulldeps/pprust-expr-roundtrip.rs @@ -202,7 +202,7 @@ impl MutVisitor for AddParens { } fn main() { - rustc_span::with_default_session_globals(|| run()); + rustc_span::create_default_session_globals_then(|| run()); } fn run() { diff --git a/src/tools/clippy/clippy_lints/src/doc.rs b/src/tools/clippy/clippy_lints/src/doc.rs index 4e164d33a05..d6e3e92fc5e 100644 --- a/src/tools/clippy/clippy_lints/src/doc.rs +++ b/src/tools/clippy/clippy_lints/src/doc.rs @@ -26,6 +26,7 @@ use rustc_span::source_map::{BytePos, FilePathMapping, MultiSpan, SourceMap, Spa use rustc_span::{sym, FileName, Pos}; use std::io; use std::ops::Range; +use std::thread; use url::Url; declare_clippy_lint! { @@ -584,10 +585,10 @@ fn get_current_span(spans: &[(usize, Span)], idx: usize) -> (usize, Span) { } fn check_code(cx: &LateContext<'_>, text: &str, edition: Edition, span: Span) { - fn has_needless_main(code: &str, edition: Edition) -> bool { + fn has_needless_main(code: String, edition: Edition) -> bool { rustc_driver::catch_fatal_errors(|| { - rustc_span::with_session_globals(edition, || { - let filename = FileName::anon_source_code(code); + rustc_span::create_session_globals_then(edition, || { + let filename = FileName::anon_source_code(&code); let sm = Lrc::new(SourceMap::new(FilePathMapping::empty())); let emitter = EmitterWriter::new(box io::sink(), None, false, false, false, None, false); @@ -649,7 +650,10 @@ fn check_code(cx: &LateContext<'_>, text: &str, edition: Edition, span: Span) { .unwrap_or_default() } - if has_needless_main(text, edition) { + // Because of the global session, we need to create a new session in a different thread with + // the edition we need. + let text = text.to_owned(); + if thread::spawn(move || has_needless_main(text, edition)).join().expect("thread::spawn failed") { span_lint(cx, NEEDLESS_DOCTEST_MAIN, span, "needless `fn main` in doctest"); } } diff --git a/src/tools/error_index_generator/main.rs b/src/tools/error_index_generator/main.rs index e3700136aca..01a3fc812b2 100644 --- a/src/tools/error_index_generator/main.rs +++ b/src/tools/error_index_generator/main.rs @@ -284,7 +284,8 @@ fn parse_args() -> (OutputFormat, PathBuf) { fn main() { rustc_driver::init_env_logger("RUST_LOG"); let (format, dst) = parse_args(); - let result = rustc_span::with_default_session_globals(move || main_with_result(format, &dst)); + let result = + rustc_span::create_default_session_globals_then(move || main_with_result(format, &dst)); if let Err(e) = result { panic!("{}", e.to_string()); } diff --git a/src/tools/rustfmt/src/formatting.rs b/src/tools/rustfmt/src/formatting.rs index b69ecdc5cb8..e0403574eeb 100644 --- a/src/tools/rustfmt/src/formatting.rs +++ b/src/tools/rustfmt/src/formatting.rs @@ -34,7 +34,7 @@ impl<'b, T: Write + 'b> Session<'b, T> { return Err(ErrorKind::VersionMismatch); } - rustc_span::with_session_globals(self.config.edition().into(), || { + rustc_span::create_session_if_not_set_then(self.config.edition().into(), |_| { if self.config.disable_all_formatting() { // When the input is from stdin, echo back the input. if let Input::Text(ref buf) = input { |
