Skip to content

Commit c996c4d

Browse files
committed
Add support for running doc test in specific edition
1 parent b80cb47 commit c996c4d

File tree

3 files changed

+34
-20
lines changed

3 files changed

+34
-20
lines changed

src/librustdoc/html/markdown.rs

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ use std::fmt::{self, Write};
3737
use std::borrow::Cow;
3838
use std::ops::Range;
3939
use std::str;
40+
use syntax::edition::Edition;
4041

4142
use html::toc::TocBuilder;
4243
use html::highlight;
@@ -577,6 +578,7 @@ pub struct LangString {
577578
pub compile_fail: bool,
578579
pub error_codes: Vec<String>,
579580
pub allow_fail: bool,
581+
pub edition: Option<Edition>
580582
}
581583

582584
impl LangString {
@@ -591,6 +593,7 @@ impl LangString {
591593
compile_fail: false,
592594
error_codes: Vec::new(),
593595
allow_fail: false,
596+
edition: None,
594597
}
595598
}
596599

@@ -625,6 +628,11 @@ impl LangString {
625628
seen_rust_tags = !seen_other_tags || seen_rust_tags;
626629
data.no_run = true;
627630
}
631+
x if allow_error_code_check && x.starts_with("edition") => {
632+
// allow_error_code_check is true if we're on nightly, which
633+
// is needed for edition support
634+
data.edition = x[7..].parse::<Edition>().ok();
635+
}
628636
x if allow_error_code_check && x.starts_with("E") && x.len() == 5 => {
629637
if x[1..].parse::<u32>().is_ok() {
630638
data.error_codes.push(x.to_owned());
@@ -925,12 +933,14 @@ mod tests {
925933
use super::{ErrorCodes, LangString, Markdown, MarkdownHtml, IdMap};
926934
use super::plain_summary_line;
927935
use std::cell::RefCell;
936+
use syntax::edition::Edition;
928937

929938
#[test]
930939
fn test_lang_string_parse() {
931940
fn t(s: &str,
932941
should_panic: bool, no_run: bool, ignore: bool, rust: bool, test_harness: bool,
933-
compile_fail: bool, allow_fail: bool, error_codes: Vec<String>) {
942+
compile_fail: bool, allow_fail: bool, error_codes: Vec<String>,
943+
edition: Option<Edition>) {
934944
assert_eq!(LangString::parse(s, ErrorCodes::Yes), LangString {
935945
should_panic,
936946
no_run,
@@ -941,30 +951,34 @@ mod tests {
941951
error_codes,
942952
original: s.to_owned(),
943953
allow_fail,
954+
edition,
944955
})
945956
}
946957

947958
fn v() -> Vec<String> {
948959
Vec::new()
949960
}
950961

951-
// marker | should_panic| no_run| ignore| rust | test_harness| compile_fail
952-
// | allow_fail | error_codes
953-
t("", false, false, false, true, false, false, false, v());
954-
t("rust", false, false, false, true, false, false, false, v());
955-
t("sh", false, false, false, false, false, false, false, v());
956-
t("ignore", false, false, true, true, false, false, false, v());
957-
t("should_panic", true, false, false, true, false, false, false, v());
958-
t("no_run", false, true, false, true, false, false, false, v());
959-
t("test_harness", false, false, false, true, true, false, false, v());
960-
t("compile_fail", false, true, false, true, false, true, false, v());
961-
t("allow_fail", false, false, false, true, false, false, true, v());
962-
t("{.no_run .example}", false, true, false, true, false, false, false, v());
963-
t("{.sh .should_panic}", true, false, false, false, false, false, false, v());
964-
t("{.example .rust}", false, false, false, true, false, false, false, v());
965-
t("{.test_harness .rust}", false, false, false, true, true, false, false, v());
966-
t("text, no_run", false, true, false, false, false, false, false, v());
967-
t("text,no_run", false, true, false, false, false, false, false, v());
962+
// ignore-tidy-linelength
963+
// marker | should_panic | no_run | ignore | rust | test_harness
964+
// | compile_fail | allow_fail | error_codes | edition
965+
t("", false, false, false, true, false, false, false, v(), None);
966+
t("rust", false, false, false, true, false, false, false, v(), None);
967+
t("sh", false, false, false, false, false, false, false, v(), None);
968+
t("ignore", false, false, true, true, false, false, false, v(), None);
969+
t("should_panic", true, false, false, true, false, false, false, v(), None);
970+
t("no_run", false, true, false, true, false, false, false, v(), None);
971+
t("test_harness", false, false, false, true, true, false, false, v(), None);
972+
t("compile_fail", false, true, false, true, false, true, false, v(), None);
973+
t("allow_fail", false, false, false, true, false, false, true, v(), None);
974+
t("{.no_run .example}", false, true, false, true, false, false, false, v(), None);
975+
t("{.sh .should_panic}", true, false, false, false, false, false, false, v(), None);
976+
t("{.example .rust}", false, false, false, true, false, false, false, v(), None);
977+
t("{.test_harness .rust}", false, false, false, true, true, false, false, v(), None);
978+
t("text, no_run", false, true, false, false, false, false, false, v(), None);
979+
t("text,no_run", false, true, false, false, false, false, false, v(), None);
980+
t("edition2015", false, false, false, true, false, false, false, v(), Some(Edition::Edition2015));
981+
t("edition2018", false, false, false, true, false, false, false, v(), Some(Edition::Edition2018));
968982
}
969983

970984
#[test]

src/librustdoc/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,7 @@ impl Collector {
545545
let opts = self.opts.clone();
546546
let maybe_sysroot = self.maybe_sysroot.clone();
547547
let linker = self.linker.clone();
548-
let edition = self.edition;
548+
let edition = config.edition.unwrap_or(self.edition);
549549
debug!("Creating test {}: {}", name, test);
550550
self.tests.push(testing::TestDescAndFn {
551551
desc: testing::TestDesc {

src/libsyntax_pos/edition.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::fmt;
1212
use std::str::FromStr;
1313

1414
/// The edition of the compiler (RFC 2052)
15-
#[derive(Clone, Copy, Hash, PartialEq, PartialOrd, Debug, RustcEncodable, RustcDecodable)]
15+
#[derive(Clone, Copy, Hash, PartialEq, PartialOrd, Debug, RustcEncodable, RustcDecodable, Eq)]
1616
#[non_exhaustive]
1717
pub enum Edition {
1818
// editions must be kept in order, oldest to newest

0 commit comments

Comments
 (0)