mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 03:38:29 +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_parse::parse_stream_from_source_str;
|
||||||
use rustc_session::parse::ParseSess;
|
use rustc_session::parse::ParseSess;
|
||||||
use rustc_span::source_map::{FilePathMapping, SourceMap};
|
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::clean;
|
||||||
use crate::core::DocContext;
|
use crate::core::DocContext;
|
||||||
@ -36,12 +36,22 @@ impl<'a, 'tcx> SyntaxChecker<'a, 'tcx> {
|
|||||||
let source = dox[code_block.code].to_owned();
|
let source = dox[code_block.code].to_owned();
|
||||||
let sess = ParseSess::with_span_handler(handler, sm);
|
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(|| {
|
let is_empty = rustc_driver::catch_fatal_errors(|| {
|
||||||
parse_stream_from_source_str(
|
parse_stream_from_source_str(
|
||||||
FileName::Custom(String::from("doctest")),
|
FileName::Custom(String::from("doctest")),
|
||||||
source,
|
source,
|
||||||
&sess,
|
&sess,
|
||||||
None,
|
Some(span),
|
||||||
)
|
)
|
||||||
.is_empty()
|
.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