mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Use the correct edition when syntax highlighting doctests
Previously it would unconditionally use edition 2015, which was incorrect.
This commit is contained in:
parent
f4aa3b544f
commit
6f087aedb6
@ -4,7 +4,7 @@ use rustc_middle::lint::LintDiagnosticBuilder;
|
||||
use rustc_parse::parse_stream_from_source_str;
|
||||
use rustc_session::parse::ParseSess;
|
||||
use rustc_span::source_map::{FilePathMapping, SourceMap};
|
||||
use rustc_span::{FileName, InnerSpan};
|
||||
use rustc_span::{hygiene::AstPass, ExpnData, ExpnKind, FileName, InnerSpan, DUMMY_SP};
|
||||
|
||||
use crate::clean;
|
||||
use crate::core::DocContext;
|
||||
@ -36,12 +36,22 @@ impl<'a, 'tcx> SyntaxChecker<'a, 'tcx> {
|
||||
let source = dox[code_block.code].to_owned();
|
||||
let sess = ParseSess::with_span_handler(handler, sm);
|
||||
|
||||
let edition = code_block.lang_string.edition.unwrap_or(self.cx.tcx.sess.edition());
|
||||
let expn_data = ExpnData::default(
|
||||
ExpnKind::AstPass(AstPass::TestHarness),
|
||||
DUMMY_SP,
|
||||
edition,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
let span = DUMMY_SP.fresh_expansion(expn_data, self.cx.tcx.create_stable_hashing_context());
|
||||
|
||||
let is_empty = rustc_driver::catch_fatal_errors(|| {
|
||||
parse_stream_from_source_str(
|
||||
FileName::Custom(String::from("doctest")),
|
||||
source,
|
||||
&sess,
|
||||
None,
|
||||
Some(span),
|
||||
)
|
||||
.is_empty()
|
||||
})
|
||||
|
16
src/test/rustdoc-ui/doctest-edition.rs
Normal file
16
src/test/rustdoc-ui/doctest-edition.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// edition:2021
|
||||
|
||||
#![deny(rustdoc::invalid_rust_codeblocks)]
|
||||
//~^ NOTE lint level is defined here
|
||||
|
||||
// By default, rustdoc should use the edition of the crate.
|
||||
//! ```
|
||||
//! foo'b'
|
||||
//! ```
|
||||
//~^^^ ERROR could not parse
|
||||
//~| NOTE prefix `foo` is unknown
|
||||
|
||||
// Rustdoc should respect `edition2018` when highlighting syntax.
|
||||
//! ```edition2018
|
||||
//! foo'b'
|
||||
//! ```
|
22
src/test/rustdoc-ui/doctest-edition.stderr
Normal file
22
src/test/rustdoc-ui/doctest-edition.stderr
Normal file
@ -0,0 +1,22 @@
|
||||
error: could not parse code block as Rust code
|
||||
--> $DIR/doctest-edition.rs:7:5
|
||||
|
|
||||
LL | //! ```
|
||||
| _____^
|
||||
LL | | //! foo'b'
|
||||
LL | | //! ```
|
||||
| |_______^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/doctest-edition.rs:3:9
|
||||
|
|
||||
LL | #![deny(rustdoc::invalid_rust_codeblocks)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: error from rustc: prefix `foo` is unknown
|
||||
help: mark blocks that do not contain Rust code as text
|
||||
|
|
||||
LL | //! ```text
|
||||
| ++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Reference in New Issue
Block a user