mirror of
https://github.com/eyre-rs/eyre.git
synced 2025-09-30 22:42:02 +00:00
Add build script to check for nightly (#112)
The rustdoc_missing_doc_code_examples lint has been sending warnings and causing CI issues due to being an unstable feature. This change introduces a small build script that detects whether the current toolchain is nightly and, if so, sets the config option "nightly_features". This config option then sets the feature gate for missing_doc_code_examples and turns on 'warn'. It expands the existing code for parsing minor version to parse the rest of the rust --version. This change also introduces a toolchain test that uses rust_version to double-check that the config option was enabled IFF the nightly toolchain is being used.
This commit is contained in:
parent
0b24ae558f
commit
7fefca5981
@ -60,10 +60,14 @@
|
|||||||
//! [`tracing_error::SpanTrace`]: https://docs.rs/tracing-error/*/tracing_error/struct.SpanTrace.html
|
//! [`tracing_error::SpanTrace`]: https://docs.rs/tracing-error/*/tracing_error/struct.SpanTrace.html
|
||||||
//! [`color-backtrace`]: https://github.com/athre0z/color-backtrace
|
//! [`color-backtrace`]: https://github.com/athre0z/color-backtrace
|
||||||
#![doc(html_root_url = "https://docs.rs/color-spantrace/0.2.0")]
|
#![doc(html_root_url = "https://docs.rs/color-spantrace/0.2.0")]
|
||||||
|
#![cfg_attr(
|
||||||
|
nightly_features,
|
||||||
|
feature(rustdoc_missing_doc_code_examples),
|
||||||
|
warn(rustdoc::missing_doc_code_examples)
|
||||||
|
)]
|
||||||
#![warn(
|
#![warn(
|
||||||
missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
missing_docs,
|
missing_docs,
|
||||||
rustdoc::missing_doc_code_examples,
|
|
||||||
rust_2018_idioms,
|
rust_2018_idioms,
|
||||||
unreachable_pub,
|
unreachable_pub,
|
||||||
bad_style,
|
bad_style,
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::env;
|
use std::env;
|
||||||
|
use std::ffi::OsString;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::process::{Command, ExitStatus};
|
use std::process::{Command, ExitStatus};
|
||||||
@ -55,16 +56,20 @@ fn main() {
|
|||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
let rustc = match rustc_minor_version() {
|
let version = match rustc_version_info() {
|
||||||
Some(rustc) => rustc,
|
Some(version) => version,
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
|
||||||
if rustc < 52 {
|
if version.is_nightly {
|
||||||
|
println!("cargo:rustc-cfg=nightly_features");
|
||||||
|
}
|
||||||
|
|
||||||
|
if version.minor < 52 {
|
||||||
println!("cargo:rustc-cfg=eyre_no_fmt_arguments_as_str");
|
println!("cargo:rustc-cfg=eyre_no_fmt_arguments_as_str");
|
||||||
}
|
}
|
||||||
|
|
||||||
if rustc < 58 {
|
if version.minor < 58 {
|
||||||
println!("cargo:rustc-cfg=eyre_no_fmt_args_capture");
|
println!("cargo:rustc-cfg=eyre_no_fmt_args_capture");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,13 +91,23 @@ fn compile_probe(probe: &str) -> Option<ExitStatus> {
|
|||||||
.ok()
|
.ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rustc_minor_version() -> Option<u32> {
|
struct VersionInfo {
|
||||||
let rustc = env::var_os("RUSTC")?;
|
minor: u32,
|
||||||
|
is_nightly: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rustc_version_info() -> Option<VersionInfo> {
|
||||||
|
let rustc = env::var_os("RUSTC").unwrap_or_else(|| OsString::from("rustc"));
|
||||||
let output = Command::new(rustc).arg("--version").output().ok()?;
|
let output = Command::new(rustc).arg("--version").output().ok()?;
|
||||||
let version = str::from_utf8(&output.stdout).ok()?;
|
let version = str::from_utf8(&output.stdout).ok()?;
|
||||||
let mut pieces = version.split('.');
|
let mut pieces = version.split(['.', ' ', '-']);
|
||||||
if pieces.next() != Some("rustc 1") {
|
if pieces.next() != Some("rustc") {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
pieces.next()?.parse().ok()
|
let _major: u32 = pieces.next()?.parse().ok()?;
|
||||||
|
let minor = pieces.next()?.parse().ok()?;
|
||||||
|
let _patch: u32 = pieces.next()?.parse().ok()?;
|
||||||
|
let is_nightly = pieces.next() == Some("nightly");
|
||||||
|
let version = VersionInfo { minor, is_nightly };
|
||||||
|
Some(version)
|
||||||
}
|
}
|
||||||
|
@ -329,11 +329,14 @@
|
|||||||
//! [`color-spantrace`]: https://github.com/eyre-rs/color-spantrace
|
//! [`color-spantrace`]: https://github.com/eyre-rs/color-spantrace
|
||||||
//! [`color-backtrace`]: https://github.com/athre0z/color-backtrace
|
//! [`color-backtrace`]: https://github.com/athre0z/color-backtrace
|
||||||
#![doc(html_root_url = "https://docs.rs/eyre/0.6.8")]
|
#![doc(html_root_url = "https://docs.rs/eyre/0.6.8")]
|
||||||
|
#![cfg_attr(
|
||||||
|
nightly_features,
|
||||||
|
feature(rustdoc_missing_doc_code_examples),
|
||||||
|
warn(rustdoc::missing_doc_code_examples)
|
||||||
|
)]
|
||||||
#![warn(
|
#![warn(
|
||||||
missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
missing_docs,
|
missing_docs,
|
||||||
// FIXME: this lint is currently nightly only
|
|
||||||
rustdoc::missing_doc_code_examples,
|
|
||||||
unsafe_op_in_unsafe_fn,
|
unsafe_op_in_unsafe_fn,
|
||||||
rust_2018_idioms,
|
rust_2018_idioms,
|
||||||
unreachable_pub,
|
unreachable_pub,
|
||||||
|
17
eyre/tests/test_toolchain.rs
Normal file
17
eyre/tests/test_toolchain.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#[rustversion::attr(not(nightly), ignore)]
|
||||||
|
//#[cfg_attr(miri, ignore)]
|
||||||
|
#[test]
|
||||||
|
fn nightlytest() {
|
||||||
|
if !cfg!(nightly_features) {
|
||||||
|
panic!("nightly feature isn't set when the toolchain is nightly");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rustversion::attr(nightly, ignore)]
|
||||||
|
//#[cfg_attr(miri, ignore)]
|
||||||
|
#[test]
|
||||||
|
fn stabletest() {
|
||||||
|
if cfg!(nightly_features) {
|
||||||
|
panic!("nightly feature is set when the toolchain isn't nightly");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user