Rename rustdoc lints to be a tool lint instead of built-in.
- Rename `broken_intra_doc_links` to `rustdoc::broken_intra_doc_links` - Ensure that the old lint names still work and give deprecation errors - Register lints even when running doctests Otherwise, all `rustdoc::` lints would be ignored. - Register all existing lints as removed This unfortunately doesn't work with `register_renamed` because tool lints have not yet been registered when rustc is running. For similar reasons, `check_backwards_compat` doesn't work either. Call `register_removed` directly instead. - Fix fallout + Rustdoc lints for compiler/ + Rustdoc lints for library/ Note that this does *not* suggest `rustdoc::broken_intra_doc_links` for `rustdoc::intra_doc_link_resolution_failure`, since there was no time when the latter was valid.
This commit is contained in:
parent
4f20caa625
commit
cc62018e61
78 changed files with 301 additions and 243 deletions
|
@ -34,7 +34,7 @@ impl MarkedAttrs {
|
|||
}
|
||||
|
||||
pub fn is_known_lint_tool(m_item: Ident) -> bool {
|
||||
[sym::clippy, sym::rustc].contains(&m_item.name)
|
||||
[sym::clippy, sym::rustc, sym::rustdoc].contains(&m_item.name)
|
||||
}
|
||||
|
||||
impl NestedMetaItem {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#![deny(invalid_codeblock_attributes)]
|
||||
#![cfg_attr(bootstrap, deny(invalid_codeblock_attributes))]
|
||||
#![cfg_attr(not(bootstrap), deny(rustdoc::invalid_codeblock_attributes))]
|
||||
//! This library is used to gather all error codes into one place,
|
||||
//! the goal being to make their maintenance easier.
|
||||
|
||||
|
|
|
@ -89,6 +89,7 @@ impl SessionLintStore for LintStore {
|
|||
}
|
||||
|
||||
/// The target of the `by_name` map, which accounts for renaming/deprecation.
|
||||
#[derive(Debug)]
|
||||
enum TargetLint {
|
||||
/// A direct lint target
|
||||
Id(LintId),
|
||||
|
@ -470,7 +471,10 @@ impl LintStore {
|
|||
Some(&Id(ref id)) => {
|
||||
CheckLintNameResult::Tool(Err((Some(slice::from_ref(id)), complete_name)))
|
||||
}
|
||||
_ => CheckLintNameResult::NoLint(None),
|
||||
Some(other) => {
|
||||
tracing::debug!("got renamed lint {:?}", other);
|
||||
CheckLintNameResult::NoLint(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,9 +69,7 @@ use rustc_hir::def_id::LocalDefId;
|
|||
use rustc_middle::ty::query::Providers;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_session::lint::builtin::{
|
||||
BARE_TRAIT_OBJECTS, BROKEN_INTRA_DOC_LINKS, ELIDED_LIFETIMES_IN_PATHS,
|
||||
EXPLICIT_OUTLIVES_REQUIREMENTS, INVALID_CODEBLOCK_ATTRIBUTES, INVALID_HTML_TAGS,
|
||||
MISSING_DOC_CODE_EXAMPLES, NON_AUTOLINKS, PRIVATE_DOC_TESTS,
|
||||
BARE_TRAIT_OBJECTS, ELIDED_LIFETIMES_IN_PATHS, EXPLICIT_OUTLIVES_REQUIREMENTS,
|
||||
};
|
||||
use rustc_span::symbol::{Ident, Symbol};
|
||||
use rustc_span::Span;
|
||||
|
@ -314,17 +312,6 @@ fn register_builtins(store: &mut LintStore, no_interleave_lints: bool) {
|
|||
// MACRO_USE_EXTERN_CRATE
|
||||
);
|
||||
|
||||
add_lint_group!(
|
||||
"rustdoc",
|
||||
NON_AUTOLINKS,
|
||||
BROKEN_INTRA_DOC_LINKS,
|
||||
PRIVATE_INTRA_DOC_LINKS,
|
||||
INVALID_CODEBLOCK_ATTRIBUTES,
|
||||
MISSING_DOC_CODE_EXAMPLES,
|
||||
PRIVATE_DOC_TESTS,
|
||||
INVALID_HTML_TAGS
|
||||
);
|
||||
|
||||
// Register renamed and removed lints.
|
||||
store.register_renamed("single_use_lifetime", "single_use_lifetimes");
|
||||
store.register_renamed("elided_lifetime_in_path", "elided_lifetimes_in_paths");
|
||||
|
@ -334,8 +321,25 @@ fn register_builtins(store: &mut LintStore, no_interleave_lints: bool) {
|
|||
store.register_renamed("async_idents", "keyword_idents");
|
||||
store.register_renamed("exceeding_bitshifts", "arithmetic_overflow");
|
||||
store.register_renamed("redundant_semicolon", "redundant_semicolons");
|
||||
store.register_renamed("intra_doc_link_resolution_failure", "broken_intra_doc_links");
|
||||
store.register_renamed("overlapping_patterns", "overlapping_range_endpoints");
|
||||
|
||||
// These were moved to tool lints, but rustc still sees them when compiling normally, before
|
||||
// tool lints are registered, so `check_tool_name_for_backwards_compat` doesn't work. Use
|
||||
// `register_renamed` explicitly.
|
||||
const RUSTDOC_LINTS: &[&str] = &[
|
||||
"broken_intra_doc_links",
|
||||
"private_intra_doc_links",
|
||||
"missing_doc_code_examples",
|
||||
"private_doc_tests",
|
||||
"invalid_codeblock_attributes",
|
||||
"invalid_html_tags",
|
||||
"non_autolinks",
|
||||
];
|
||||
for rustdoc_lint in RUSTDOC_LINTS {
|
||||
// FIXME: maybe we could get `register_renamed` to work for tool lints?
|
||||
store.register_removed(rustdoc_lint, &format!("use `rustdoc::{}` instead", rustdoc_lint));
|
||||
}
|
||||
|
||||
store.register_removed("unknown_features", "replaced by an error");
|
||||
store.register_removed("unsigned_negation", "replaced by negate_unsigned feature gate");
|
||||
store.register_removed("negate_unsigned", "cast a signed value instead");
|
||||
|
|
|
@ -1875,39 +1875,6 @@ declare_lint! {
|
|||
"detects labels that are never used"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `broken_intra_doc_links` lint detects failures in resolving
|
||||
/// intra-doc link targets. This is a `rustdoc` only lint, see the
|
||||
/// documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#broken_intra_doc_links
|
||||
pub BROKEN_INTRA_DOC_LINKS,
|
||||
Warn,
|
||||
"failures in resolving intra-doc link targets"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// This is a subset of `broken_intra_doc_links` that warns when linking from
|
||||
/// a public item to a private one. This is a `rustdoc` only lint, see the
|
||||
/// documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#private_intra_doc_links
|
||||
pub PRIVATE_INTRA_DOC_LINKS,
|
||||
Warn,
|
||||
"linking from a public item to a private one"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `invalid_codeblock_attributes` lint detects code block attributes
|
||||
/// in documentation examples that have potentially mis-typed values. This
|
||||
/// is a `rustdoc` only lint, see the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#invalid_codeblock_attributes
|
||||
pub INVALID_CODEBLOCK_ATTRIBUTES,
|
||||
Warn,
|
||||
"codeblock attribute looks a lot like a known one"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `missing_crate_level_docs` lint detects if documentation is
|
||||
/// missing at the crate root. This is a `rustdoc` only lint, see the
|
||||
|
@ -1919,49 +1886,6 @@ declare_lint! {
|
|||
"detects crates with no crate-level documentation"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `missing_doc_code_examples` lint detects publicly-exported items
|
||||
/// without code samples in their documentation. This is a `rustdoc` only
|
||||
/// lint, see the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#missing_doc_code_examples
|
||||
pub MISSING_DOC_CODE_EXAMPLES,
|
||||
Allow,
|
||||
"detects publicly-exported items without code samples in their documentation"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `private_doc_tests` lint detects code samples in docs of private
|
||||
/// items not documented by `rustdoc`. This is a `rustdoc` only lint, see
|
||||
/// the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#private_doc_tests
|
||||
pub PRIVATE_DOC_TESTS,
|
||||
Allow,
|
||||
"detects code samples in docs of private items not documented by rustdoc"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `invalid_html_tags` lint detects invalid HTML tags. This is a
|
||||
/// `rustdoc` only lint, see the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#invalid_html_tags
|
||||
pub INVALID_HTML_TAGS,
|
||||
Allow,
|
||||
"detects invalid HTML tags in doc comments"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `non_autolinks` lint detects when a URL could be written using
|
||||
/// only angle brackets. This is a `rustdoc` only lint, see the
|
||||
/// documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#non_autolinks
|
||||
pub NON_AUTOLINKS,
|
||||
Warn,
|
||||
"detects URLs that could be written using only angle brackets"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `where_clauses_object_safety` lint detects for [object safety] of
|
||||
/// [where clauses].
|
||||
|
@ -3020,14 +2944,7 @@ declare_lint_pass! {
|
|||
ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
|
||||
UNSTABLE_NAME_COLLISIONS,
|
||||
IRREFUTABLE_LET_PATTERNS,
|
||||
BROKEN_INTRA_DOC_LINKS,
|
||||
PRIVATE_INTRA_DOC_LINKS,
|
||||
INVALID_CODEBLOCK_ATTRIBUTES,
|
||||
MISSING_CRATE_LEVEL_DOCS,
|
||||
MISSING_DOC_CODE_EXAMPLES,
|
||||
INVALID_HTML_TAGS,
|
||||
PRIVATE_DOC_TESTS,
|
||||
NON_AUTOLINKS,
|
||||
WHERE_CLAUSES_OBJECT_SAFETY,
|
||||
PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
|
||||
MACRO_USE_EXTERN_CRATE,
|
||||
|
|
|
@ -1020,6 +1020,7 @@ symbols! {
|
|||
rustc_then_this_would_need,
|
||||
rustc_unsafe_specialization_marker,
|
||||
rustc_variance,
|
||||
rustdoc,
|
||||
rustfmt,
|
||||
rvalue_static_promotion,
|
||||
sanitize,
|
||||
|
|
|
@ -297,7 +297,8 @@ pub mod primitive;
|
|||
unused_imports,
|
||||
unsafe_op_in_unsafe_fn
|
||||
)]
|
||||
#[allow(non_autolinks)]
|
||||
#[cfg_attr(bootstrap, allow(non_autolinks))]
|
||||
#[cfg_attr(not(bootstrap), allow(rustdoc::non_autolinks))]
|
||||
// FIXME: This annotation should be moved into rust-lang/stdarch after clashing_extern_declarations is
|
||||
// merged. It currently cannot because bootstrap fails as the lint hasn't been defined yet.
|
||||
#[allow(clashing_extern_declarations)]
|
||||
|
|
|
@ -735,8 +735,15 @@ impl<'a> Builder<'a> {
|
|||
.env("RUSTDOC_LIBDIR", self.rustc_libdir(compiler))
|
||||
.env("CFG_RELEASE_CHANNEL", &self.config.channel)
|
||||
.env("RUSTDOC_REAL", self.rustdoc(compiler))
|
||||
.env("RUSTC_BOOTSTRAP", "1")
|
||||
.arg("-Winvalid_codeblock_attributes");
|
||||
.env("RUSTC_BOOTSTRAP", "1");
|
||||
|
||||
// cfg(bootstrap), can be removed on the next beta bump
|
||||
if compiler.stage == 0 {
|
||||
cmd.arg("-Winvalid_codeblock_attributes");
|
||||
} else {
|
||||
cmd.arg("-Wrustdoc::invalid_codeblock_attributes");
|
||||
}
|
||||
|
||||
if self.config.deny_warnings {
|
||||
cmd.arg("-Dwarnings");
|
||||
}
|
||||
|
@ -1292,7 +1299,12 @@ impl<'a> Builder<'a> {
|
|||
// fixed via better support from Cargo.
|
||||
cargo.env("RUSTC_LINT_FLAGS", lint_flags.join(" "));
|
||||
|
||||
rustdocflags.arg("-Winvalid_codeblock_attributes");
|
||||
// cfg(bootstrap), can be removed on the next beta bump
|
||||
if compiler.stage == 0 {
|
||||
rustdocflags.arg("-Winvalid_codeblock_attributes");
|
||||
} else {
|
||||
rustdocflags.arg("-Wrustdoc::invalid_codeblock_attributes");
|
||||
}
|
||||
}
|
||||
|
||||
if mode == Mode::Rustc {
|
||||
|
|
|
@ -12,6 +12,8 @@ use rustc_hir::{
|
|||
Path,
|
||||
};
|
||||
use rustc_interface::{interface, Queries};
|
||||
use rustc_lint::LintStore;
|
||||
use rustc_lint_defs::{declare_tool_lint, Lint, LintId};
|
||||
use rustc_middle::hir::map::Map;
|
||||
use rustc_middle::middle::privacy::AccessLevels;
|
||||
use rustc_middle::ty::{ParamEnv, Ty, TyCtxt};
|
||||
|
@ -24,9 +26,11 @@ use rustc_span::source_map;
|
|||
use rustc_span::symbol::sym;
|
||||
use rustc_span::DUMMY_SP;
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::lazy::SyncLazy as Lazy;
|
||||
use std::mem;
|
||||
use std::rc::Rc;
|
||||
use std::{cell::RefCell, collections::hash_map::Entry};
|
||||
|
||||
use crate::clean;
|
||||
use crate::clean::inline::build_external_trait;
|
||||
|
@ -286,6 +290,106 @@ where
|
|||
(lint_opts, lint_caps)
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `broken_intra_doc_links` lint detects failures in resolving
|
||||
/// intra-doc link targets. This is a `rustdoc` only lint, see the
|
||||
/// documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#broken_intra_doc_links
|
||||
pub rustdoc::BROKEN_INTRA_DOC_LINKS,
|
||||
Warn,
|
||||
"failures in resolving intra-doc link targets"
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// This is a subset of `broken_intra_doc_links` that warns when linking from
|
||||
/// a public item to a private one. This is a `rustdoc` only lint, see the
|
||||
/// documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#private_intra_doc_links
|
||||
pub rustdoc::PRIVATE_INTRA_DOC_LINKS,
|
||||
Warn,
|
||||
"linking from a public item to a private one"
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `invalid_codeblock_attributes` lint detects code block attributes
|
||||
/// in documentation examples that have potentially mis-typed values. This
|
||||
/// is a `rustdoc` only lint, see the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#invalid_codeblock_attributes
|
||||
pub rustdoc::INVALID_CODEBLOCK_ATTRIBUTES,
|
||||
Warn,
|
||||
"codeblock attribute looks a lot like a known one"
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `missing_doc_code_examples` lint detects publicly-exported items
|
||||
/// without code samples in their documentation. This is a `rustdoc` only
|
||||
/// lint, see the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#missing_doc_code_examples
|
||||
pub rustdoc::MISSING_DOC_CODE_EXAMPLES,
|
||||
Allow,
|
||||
"detects publicly-exported items without code samples in their documentation"
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `private_doc_tests` lint detects code samples in docs of private
|
||||
/// items not documented by `rustdoc`. This is a `rustdoc` only lint, see
|
||||
/// the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#private_doc_tests
|
||||
pub rustdoc::PRIVATE_DOC_TESTS,
|
||||
Allow,
|
||||
"detects code samples in docs of private items not documented by rustdoc"
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `invalid_html_tags` lint detects invalid HTML tags. This is a
|
||||
/// `rustdoc` only lint, see the documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#invalid_html_tags
|
||||
pub rustdoc::INVALID_HTML_TAGS,
|
||||
Allow,
|
||||
"detects invalid HTML tags in doc comments"
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `non_autolinks` lint detects when a URL could be written using
|
||||
/// only angle brackets. This is a `rustdoc` only lint, see the
|
||||
/// documentation in the [rustdoc book].
|
||||
///
|
||||
/// [rustdoc book]: ../../../rustdoc/lints.html#non_autolinks
|
||||
pub rustdoc::NON_AUTOLINKS,
|
||||
Warn,
|
||||
"detects URLs that could be written using only angle brackets"
|
||||
}
|
||||
|
||||
static RUSTDOC_LINTS: Lazy<Vec<&'static Lint>> = Lazy::new(|| {
|
||||
vec![
|
||||
BROKEN_INTRA_DOC_LINKS,
|
||||
PRIVATE_INTRA_DOC_LINKS,
|
||||
MISSING_DOC_CODE_EXAMPLES,
|
||||
PRIVATE_DOC_TESTS,
|
||||
INVALID_CODEBLOCK_ATTRIBUTES,
|
||||
INVALID_HTML_TAGS,
|
||||
NON_AUTOLINKS,
|
||||
]
|
||||
});
|
||||
|
||||
crate fn register_lints(_sess: &Session, lint_store: &mut LintStore) {
|
||||
lint_store.register_lints(&**RUSTDOC_LINTS);
|
||||
lint_store.register_group(
|
||||
true,
|
||||
"rustdoc",
|
||||
None,
|
||||
RUSTDOC_LINTS.iter().map(|&lint| LintId::of(lint)).collect(),
|
||||
);
|
||||
lint_store
|
||||
.register_renamed("intra_doc_link_resolution_failure", "rustdoc::broken_intra_doc_links");
|
||||
}
|
||||
|
||||
/// Parse, resolve, and typecheck the given crate.
|
||||
crate fn create_config(
|
||||
RustdocOptions {
|
||||
|
@ -314,37 +418,23 @@ crate fn create_config(
|
|||
let cpath = Some(input.clone());
|
||||
let input = Input::File(input);
|
||||
|
||||
let broken_intra_doc_links = lint::builtin::BROKEN_INTRA_DOC_LINKS.name;
|
||||
let private_intra_doc_links = lint::builtin::PRIVATE_INTRA_DOC_LINKS.name;
|
||||
let missing_docs = rustc_lint::builtin::MISSING_DOCS.name;
|
||||
let missing_doc_example = rustc_lint::builtin::MISSING_DOC_CODE_EXAMPLES.name;
|
||||
let private_doc_tests = rustc_lint::builtin::PRIVATE_DOC_TESTS.name;
|
||||
let no_crate_level_docs = rustc_lint::builtin::MISSING_CRATE_LEVEL_DOCS.name;
|
||||
let invalid_codeblock_attributes_name = rustc_lint::builtin::INVALID_CODEBLOCK_ATTRIBUTES.name;
|
||||
let invalid_html_tags = rustc_lint::builtin::INVALID_HTML_TAGS.name;
|
||||
let renamed_and_removed_lints = rustc_lint::builtin::RENAMED_AND_REMOVED_LINTS.name;
|
||||
let non_autolinks = rustc_lint::builtin::NON_AUTOLINKS.name;
|
||||
let unknown_lints = rustc_lint::builtin::UNKNOWN_LINTS.name;
|
||||
|
||||
// In addition to those specific lints, we also need to allow those given through
|
||||
// command line, otherwise they'll get ignored and we don't want that.
|
||||
let lints_to_show = vec![
|
||||
broken_intra_doc_links.to_owned(),
|
||||
private_intra_doc_links.to_owned(),
|
||||
missing_docs.to_owned(),
|
||||
missing_doc_example.to_owned(),
|
||||
private_doc_tests.to_owned(),
|
||||
no_crate_level_docs.to_owned(),
|
||||
invalid_codeblock_attributes_name.to_owned(),
|
||||
invalid_html_tags.to_owned(),
|
||||
renamed_and_removed_lints.to_owned(),
|
||||
unknown_lints.to_owned(),
|
||||
non_autolinks.to_owned(),
|
||||
let mut lints_to_show = vec![
|
||||
// it's unclear whether these should be part of rustdoc directly
|
||||
rustc_lint::builtin::MISSING_DOCS.name.to_string(),
|
||||
rustc_lint::builtin::MISSING_CRATE_LEVEL_DOCS.name.to_string(),
|
||||
// these are definitely not part of rustdoc, but we want to warn on them anyway.
|
||||
rustc_lint::builtin::RENAMED_AND_REMOVED_LINTS.name.to_string(),
|
||||
rustc_lint::builtin::UNKNOWN_LINTS.name.to_string(),
|
||||
];
|
||||
lints_to_show.extend(RUSTDOC_LINTS.iter().map(|lint| lint.name.to_string()));
|
||||
|
||||
let (lint_opts, lint_caps) = init_lints(lints_to_show, lint_opts, |lint| {
|
||||
// FIXME: why is this necessary?
|
||||
if lint.name == broken_intra_doc_links || lint.name == invalid_codeblock_attributes_name {
|
||||
if lint.name == BROKEN_INTRA_DOC_LINKS.name
|
||||
|| lint.name == INVALID_CODEBLOCK_ATTRIBUTES.name
|
||||
{
|
||||
None
|
||||
} else {
|
||||
Some((lint.name_lower(), lint::Allow))
|
||||
|
@ -384,7 +474,7 @@ crate fn create_config(
|
|||
diagnostic_output: DiagnosticOutput::Default,
|
||||
stderr: None,
|
||||
lint_caps,
|
||||
register_lints: None,
|
||||
register_lints: Some(box register_lints),
|
||||
override_queries: Some(|_sess, providers, _external_providers| {
|
||||
// Most lints will require typechecking, so just don't run them.
|
||||
providers.lint_mod = |_, _| {};
|
||||
|
|
|
@ -44,11 +44,15 @@ crate struct TestOptions {
|
|||
crate fn run(options: Options) -> Result<(), ErrorReported> {
|
||||
let input = config::Input::File(options.input.clone());
|
||||
|
||||
let invalid_codeblock_attributes_name = rustc_lint::builtin::INVALID_CODEBLOCK_ATTRIBUTES.name;
|
||||
let invalid_codeblock_attributes_name = crate::core::INVALID_CODEBLOCK_ATTRIBUTES.name;
|
||||
|
||||
// In addition to those specific lints, we also need to allow those given through
|
||||
// command line, otherwise they'll get ignored and we don't want that.
|
||||
let allowed_lints = vec![invalid_codeblock_attributes_name.to_owned()];
|
||||
let allowed_lints = vec![
|
||||
invalid_codeblock_attributes_name.to_owned(),
|
||||
lint::builtin::UNKNOWN_LINTS.name.to_owned(),
|
||||
lint::builtin::RENAMED_AND_REMOVED_LINTS.name.to_owned(),
|
||||
];
|
||||
|
||||
let (lint_opts, lint_caps) = init_lints(allowed_lints, options.lint_opts.clone(), |lint| {
|
||||
if lint.name == invalid_codeblock_attributes_name {
|
||||
|
@ -92,7 +96,7 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
|
|||
diagnostic_output: DiagnosticOutput::Default,
|
||||
stderr: None,
|
||||
lint_caps,
|
||||
register_lints: None,
|
||||
register_lints: Some(box crate::core::register_lints),
|
||||
override_queries: None,
|
||||
make_codegen_backend: None,
|
||||
registry: rustc_driver::diagnostics_registry(),
|
||||
|
|
|
@ -21,7 +21,6 @@ use rustc_data_structures::fx::FxHashMap;
|
|||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::HirId;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_session::lint;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::Span;
|
||||
use std::borrow::Cow;
|
||||
|
@ -721,7 +720,7 @@ impl<'tcx> ExtraInfo<'tcx> {
|
|||
(None, None) => return,
|
||||
};
|
||||
self.tcx.struct_span_lint_hir(
|
||||
lint::builtin::INVALID_CODEBLOCK_ATTRIBUTES,
|
||||
crate::core::INVALID_CODEBLOCK_ATTRIBUTES,
|
||||
hir_id,
|
||||
self.sp,
|
||||
|lint| {
|
||||
|
|
|
@ -45,6 +45,7 @@ extern crate rustc_infer;
|
|||
extern crate rustc_interface;
|
||||
extern crate rustc_lexer;
|
||||
extern crate rustc_lint;
|
||||
extern crate rustc_lint_defs;
|
||||
extern crate rustc_metadata;
|
||||
extern crate rustc_middle;
|
||||
extern crate rustc_mir;
|
||||
|
|
|
@ -16,10 +16,7 @@ use rustc_hir::def_id::{CrateNum, DefId};
|
|||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_middle::{bug, ty};
|
||||
use rustc_resolve::ParentScope;
|
||||
use rustc_session::lint::{
|
||||
builtin::{BROKEN_INTRA_DOC_LINKS, PRIVATE_INTRA_DOC_LINKS},
|
||||
Lint,
|
||||
};
|
||||
use rustc_session::lint::Lint;
|
||||
use rustc_span::hygiene::{MacroKind, SyntaxContext};
|
||||
use rustc_span::symbol::{sym, Ident, Symbol};
|
||||
use rustc_span::DUMMY_SP;
|
||||
|
@ -35,6 +32,7 @@ use std::ops::Range;
|
|||
|
||||
use crate::clean::{self, utils::find_nearest_parent_module, Crate, Item, ItemLink, PrimitiveType};
|
||||
use crate::core::DocContext;
|
||||
use crate::core::{BROKEN_INTRA_DOC_LINKS, PRIVATE_INTRA_DOC_LINKS};
|
||||
use crate::fold::DocFolder;
|
||||
use crate::html::markdown::{markdown_links, MarkdownLink};
|
||||
use crate::passes::Pass;
|
||||
|
|
|
@ -68,8 +68,7 @@ crate fn should_have_doc_example(cx: &DocContext<'_>, item: &clean::Item) -> boo
|
|||
return false;
|
||||
}
|
||||
let hir_id = cx.tcx.hir().local_def_id_to_hir_id(item.def_id.expect_local());
|
||||
let (level, source) =
|
||||
cx.tcx.lint_level_at_node(lint::builtin::MISSING_DOC_CODE_EXAMPLES, hir_id);
|
||||
let (level, source) = cx.tcx.lint_level_at_node(crate::core::MISSING_DOC_CODE_EXAMPLES, hir_id);
|
||||
level != lint::Level::Allow || matches!(source, LintLevelSource::Default)
|
||||
}
|
||||
|
||||
|
@ -91,7 +90,7 @@ crate fn look_for_tests<'tcx>(cx: &DocContext<'tcx>, dox: &str, item: &Item) {
|
|||
debug!("reporting error for {:?} (hir_id={:?})", item, hir_id);
|
||||
let sp = span_of_attrs(&item.attrs).unwrap_or(item.source.span());
|
||||
cx.tcx.struct_span_lint_hir(
|
||||
lint::builtin::MISSING_DOC_CODE_EXAMPLES,
|
||||
crate::core::MISSING_DOC_CODE_EXAMPLES,
|
||||
hir_id,
|
||||
sp,
|
||||
|lint| lint.build("missing code example in this documentation").emit(),
|
||||
|
@ -99,7 +98,7 @@ crate fn look_for_tests<'tcx>(cx: &DocContext<'tcx>, dox: &str, item: &Item) {
|
|||
}
|
||||
} else if tests.found_tests > 0 && !cx.renderinfo.access_levels.is_public(item.def_id) {
|
||||
cx.tcx.struct_span_lint_hir(
|
||||
lint::builtin::PRIVATE_DOC_TESTS,
|
||||
crate::core::PRIVATE_DOC_TESTS,
|
||||
hir_id,
|
||||
span_of_attrs(&item.attrs).unwrap_or(item.source.span()),
|
||||
|lint| lint.build("documentation test in private item").emit(),
|
||||
|
|
|
@ -5,7 +5,6 @@ use crate::fold::DocFolder;
|
|||
use crate::html::markdown::opts;
|
||||
use core::ops::Range;
|
||||
use pulldown_cmark::{Event, Parser, Tag};
|
||||
use rustc_session::lint;
|
||||
use std::iter::Peekable;
|
||||
use std::str::CharIndices;
|
||||
|
||||
|
@ -183,7 +182,7 @@ impl<'a, 'tcx> DocFolder for InvalidHtmlTagsLinter<'a, 'tcx> {
|
|||
Some(sp) => sp,
|
||||
None => span_of_attrs(&item.attrs).unwrap_or(item.source.span()),
|
||||
};
|
||||
cx.tcx.struct_span_lint_hir(lint::builtin::INVALID_HTML_TAGS, hir_id, sp, |lint| {
|
||||
cx.tcx.struct_span_lint_hir(crate::core::INVALID_HTML_TAGS, hir_id, sp, |lint| {
|
||||
lint.build(msg).emit()
|
||||
});
|
||||
};
|
||||
|
|
|
@ -7,7 +7,6 @@ use core::ops::Range;
|
|||
use pulldown_cmark::{Event, LinkType, Parser, Tag};
|
||||
use regex::Regex;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_session::lint;
|
||||
|
||||
crate const CHECK_NON_AUTOLINKS: Pass = Pass {
|
||||
name: "check-non-autolinks",
|
||||
|
@ -74,7 +73,7 @@ impl<'a, 'tcx> DocFolder for NonAutolinksLinter<'a, 'tcx> {
|
|||
let sp = super::source_span_for_markdown_range(cx, &dox, &range, &item.attrs)
|
||||
.or_else(|| span_of_attrs(&item.attrs))
|
||||
.unwrap_or(item.source.span());
|
||||
cx.tcx.struct_span_lint_hir(lint::builtin::NON_AUTOLINKS, hir_id, sp, |lint| {
|
||||
cx.tcx.struct_span_lint_hir(crate::core::NON_AUTOLINKS, hir_id, sp, |lint| {
|
||||
lint.build(msg)
|
||||
.span_suggestion(
|
||||
sp,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
#[derive(Debug)]
|
||||
/// Link to [`S::fmt`]
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// Link to [`S::fmt`]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/assoc-item-not-in-scope.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// compile-flags:--test
|
||||
|
||||
#![deny(invalid_codeblock_attributes)]
|
||||
#![deny(rustdoc::invalid_codeblock_attributes)]
|
||||
|
||||
/// foo
|
||||
///
|
||||
|
|
|
@ -11,8 +11,8 @@ error: unknown attribute `compile-fail`. Did you mean `compile_fail`?
|
|||
note: the lint level is defined here
|
||||
--> $DIR/check-attr-test.rs:3:9
|
||||
|
|
||||
3 | #![deny(invalid_codeblock_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
3 | #![deny(rustdoc::invalid_codeblock_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: the code block will either not be tested if not marked as a rust one or won't fail if it compiles successfully
|
||||
|
||||
error: unknown attribute `compilefail`. Did you mean `compile_fail`?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(invalid_codeblock_attributes)]
|
||||
#![deny(rustdoc::invalid_codeblock_attributes)]
|
||||
|
||||
/// foo
|
||||
//~^ ERROR
|
||||
|
|
|
@ -13,8 +13,8 @@ LL | | /// ```
|
|||
note: the lint level is defined here
|
||||
--> $DIR/check-attr.rs:1:9
|
||||
|
|
||||
LL | #![deny(invalid_codeblock_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::invalid_codeblock_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: the code block will either not be tested if not marked as a rust one or won't fail if it compiles successfully
|
||||
|
||||
error: unknown attribute `compilefail`. Did you mean `compile_fail`?
|
||||
|
|
|
@ -21,7 +21,7 @@ note: the lint level is defined here
|
|||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(missing_doc_code_examples)]` implied by `#[deny(rustdoc)]`
|
||||
= note: `#[deny(rustdoc::missing_doc_code_examples)]` implied by `#[deny(rustdoc)]`
|
||||
|
||||
error: unknown attribute `testharness`. Did you mean `test_harness`?
|
||||
--> $DIR/check-fail.rs:6:1
|
||||
|
@ -37,7 +37,7 @@ note: the lint level is defined here
|
|||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(invalid_codeblock_attributes)]` implied by `#[deny(rustdoc)]`
|
||||
= note: `#[deny(rustdoc::invalid_codeblock_attributes)]` implied by `#[deny(rustdoc)]`
|
||||
= help: the code block will either not be tested if not marked as a rust one or the code will be wrapped inside a main function
|
||||
|
||||
error: unknown attribute `testharness`. Did you mean `test_harness`?
|
||||
|
|
|
@ -37,7 +37,7 @@ note: the lint level is defined here
|
|||
|
|
||||
LL | #![warn(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[warn(missing_doc_code_examples)]` implied by `#[warn(rustdoc)]`
|
||||
= note: `#[warn(rustdoc::missing_doc_code_examples)]` implied by `#[warn(rustdoc)]`
|
||||
|
||||
warning: missing code example in this documentation
|
||||
--> $DIR/check.rs:9:1
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
/// [v2] //~ ERROR
|
||||
pub fn foo() {}
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [v2]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/deny-intra-link-resolution-failure.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(missing_doc_code_examples)] //~ ERROR missing code example in this documentation
|
||||
#![deny(rustdoc::missing_doc_code_examples)] //~ ERROR missing code example in this documentation
|
||||
|
||||
/// Some docs.
|
||||
//~^ ERROR missing code example in this documentation
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error: missing code example in this documentation
|
||||
--> $DIR/doc-without-codeblock.rs:1:1
|
||||
|
|
||||
LL | / #![deny(missing_doc_code_examples)]
|
||||
LL | / #![deny(rustdoc::missing_doc_code_examples)]
|
||||
LL | |
|
||||
LL | | /// Some docs.
|
||||
LL | |
|
||||
|
@ -13,8 +13,8 @@ LL | | }
|
|||
note: the lint level is defined here
|
||||
--> $DIR/doc-without-codeblock.rs:1:9
|
||||
|
|
||||
LL | #![deny(missing_doc_code_examples)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::missing_doc_code_examples)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: missing code example in this documentation
|
||||
--> $DIR/doc-without-codeblock.rs:7:1
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
pub type TypeAlias = usize;
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [broken cross-reference](TypeAlias::hoge)
|
|||
note: the lint level is defined here
|
||||
--> $DIR/alias-ice.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
#![allow(non_camel_case_types)]
|
||||
#![allow(non_upper_case_globals)]
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [true]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/ambiguity.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
help: to link to the module, prefix with `mod@`
|
||||
|
|
||||
LL | /// [mod@true]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
// A few tests on anchors.
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// Or maybe [Foo::f#hola].
|
|||
note: the lint level is defined here
|
||||
--> $DIR/anchors.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `hello#people#!` contains multiple anchors
|
||||
--> $DIR/anchors.rs:31:28
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// aux-build:intra-doc-broken.rs
|
||||
// check-pass
|
||||
|
||||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
extern crate intra_doc_broken;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
//~^ NOTE lint level is defined
|
||||
pub enum S {}
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// Link to [struct@S]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/disambiguator-mismatch.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: this link resolved to an enum, which is not a struct
|
||||
|
||||
error: incompatible link kind for `S`
|
||||
|
|
|
@ -4,7 +4,7 @@ warning: `with#anchor#error` contains multiple anchors
|
|||
LL | /// docs [label][with#anchor#error]
|
||||
| ^^^^^^^^^^^^^^^^^ contains invalid anchor
|
||||
|
|
||||
= note: `#[warn(broken_intra_doc_links)]` on by default
|
||||
= note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
//~^ NOTE lint level is defined
|
||||
|
||||
// FIXME: this should say that it was skipped (maybe an allowed by default lint?)
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [path::to::nonexistent::module]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/errors.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unresolved link to `path::to::nonexistent::macro`
|
||||
--> $DIR/errors.rs:11:6
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
//! [static@u8::MIN]
|
||||
//~^ ERROR incompatible link kind
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | //! [static@u8::MIN]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/incompatible-primitive-disambiguator.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: this link resolved to an associated constant, which is not a static
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
//! [Vec<] //~ ERROR
|
||||
//! [Vec<Box<T] //~ ERROR
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | //! [Vec<]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/malformed-generics.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unresolved link to `Vec<Box<T`
|
||||
--> $DIR/malformed-generics.rs:4:6
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
#![feature(intra_doc_pointers)]
|
||||
// These are links that could reasonably expected to work, but don't.
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | //! [[T]::rotate_left]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/non-path-primitives.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
error: unresolved link to `Z`
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
//~^ NOTE lint level is defined
|
||||
|
||||
/// [char]
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [char]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/prim-conflict.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
help: to link to the module, prefix with `mod@`
|
||||
|
|
||||
LL | /// [mod@char]
|
||||
|
|
|
@ -4,7 +4,7 @@ warning: public documentation for `DocMe` links to private item `DontDocMe`
|
|||
LL | /// docs [DontDocMe] [DontDocMe::f]
|
||||
| ^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: `#[warn(private_intra_doc_links)]` on by default
|
||||
= note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
|
||||
= note: this link resolves only because you passed `--document-private-items`, but will break without
|
||||
|
||||
warning: public documentation for `DocMe` links to private item `DontDocMe::f`
|
||||
|
|
|
@ -4,7 +4,7 @@ warning: public documentation for `DocMe` links to private item `DontDocMe`
|
|||
LL | /// docs [DontDocMe] [DontDocMe::f]
|
||||
| ^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: `#[warn(private_intra_doc_links)]` on by default
|
||||
= note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
|
||||
= note: this link will resolve properly if you pass `--document-private-items`
|
||||
|
||||
warning: public documentation for `DocMe` links to private item `DontDocMe::f`
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
// An error in calculating spans while reporting intra-doc link resolution errors caused rustdoc to
|
||||
// attempt to slice in the middle of a multibyte character. See
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// (arr[i])
|
|||
note: the lint level is defined here
|
||||
--> $DIR/span-ice-55723.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// compile-flags: --extern zip=whatever.rlib
|
||||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
/// See [zip] crate.
|
||||
//~^ ERROR unresolved
|
||||
pub struct ArrayZip;
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// See [zip] crate.
|
|||
note: the lint level is defined here
|
||||
--> $DIR/unused-extern-crate.rs:2:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
|
@ -4,7 +4,7 @@ warning: unresolved link to `error`
|
|||
LL | /// [error]
|
||||
| ^^^^^ no item named `error` in scope
|
||||
|
|
||||
= note: `#[warn(broken_intra_doc_links)]` on by default
|
||||
= note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
warning: unresolved link to `error1`
|
||||
|
|
|
@ -4,7 +4,7 @@ warning: unresolved link to `Foo::baz`
|
|||
LL | //! Test with [Foo::baz], [Bar::foo], ...
|
||||
| ^^^^^^^^ the struct `Foo` has no field or associated item named `baz`
|
||||
|
|
||||
= note: `#[warn(broken_intra_doc_links)]` on by default
|
||||
= note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
|
||||
|
||||
warning: unresolved link to `Bar::foo`
|
||||
--> $DIR/warning.rs:3:35
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(invalid_html_tags)]
|
||||
#![deny(rustdoc::invalid_html_tags)]
|
||||
|
||||
//! <p>💩<p>
|
||||
//~^ ERROR unclosed HTML tag `p`
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | //! <p>💩<p>
|
|||
note: the lint level is defined here
|
||||
--> $DIR/invalid-html-tags.rs:1:9
|
||||
|
|
||||
LL | #![deny(invalid_html_tags)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::invalid_html_tags)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unclosed HTML tag `p`
|
||||
--> $DIR/invalid-html-tags.rs:3:9
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// check-pass
|
||||
|
||||
#![deny(private_doc_tests)]
|
||||
#![deny(rustdoc::private_doc_tests)]
|
||||
|
||||
mod foo {
|
||||
/**
|
||||
|
|
|
@ -4,7 +4,7 @@ warning: public documentation for `public_item` links to private item `PrivateTy
|
|||
LL | /// [`PrivateType`]
|
||||
| ^^^^^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: `#[warn(private_intra_doc_links)]` on by default
|
||||
= note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
|
||||
= note: this link resolves only because you passed `--document-private-items`, but will break without
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
|
|
@ -4,7 +4,7 @@ warning: public documentation for `public_item` links to private item `PrivateTy
|
|||
LL | /// [`PrivateType`]
|
||||
| ^^^^^^^^^^^^^ this item is private
|
||||
|
|
||||
= note: `#[warn(private_intra_doc_links)]` on by default
|
||||
= note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
|
||||
= note: this link will resolve properly if you pass `--document-private-items`
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
|
|
@ -9,7 +9,7 @@ note: the lint level is defined here
|
|||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(missing_doc_code_examples)]` implied by `#[deny(rustdoc)]`
|
||||
= note: `#[deny(rustdoc::missing_doc_code_examples)]` implied by `#[deny(rustdoc)]`
|
||||
|
||||
error: documentation test in private item
|
||||
--> $DIR/lint-group.rs:19:1
|
||||
|
@ -26,7 +26,7 @@ note: the lint level is defined here
|
|||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(private_doc_tests)]` implied by `#[deny(rustdoc)]`
|
||||
= note: `#[deny(rustdoc::private_doc_tests)]` implied by `#[deny(rustdoc)]`
|
||||
|
||||
error: missing code example in this documentation
|
||||
--> $DIR/lint-group.rs:26:1
|
||||
|
@ -45,7 +45,7 @@ note: the lint level is defined here
|
|||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(broken_intra_doc_links)]` implied by `#[deny(rustdoc)]`
|
||||
= note: `#[deny(rustdoc::broken_intra_doc_links)]` implied by `#[deny(rustdoc)]`
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
error: unclosed HTML tag `unknown`
|
||||
|
@ -59,7 +59,7 @@ note: the lint level is defined here
|
|||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(invalid_html_tags)]` implied by `#[deny(rustdoc)]`
|
||||
= note: `#[deny(rustdoc::invalid_html_tags)]` implied by `#[deny(rustdoc)]`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#![deny(missing_docs)]
|
||||
#![deny(missing_doc_code_examples)]
|
||||
#![deny(rustdoc::missing_doc_code_examples)]
|
||||
|
||||
//! crate level doc
|
||||
//! ```
|
||||
|
@ -19,7 +19,7 @@ fn test() {
|
|||
mod module1 { //~ ERROR
|
||||
}
|
||||
|
||||
#[allow(missing_doc_code_examples)]
|
||||
#[allow(rustdoc::missing_doc_code_examples)]
|
||||
/// doc
|
||||
mod module2 {
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ LL | | }
|
|||
note: the lint level is defined here
|
||||
--> $DIR/lint-missing-doc-code-example.rs:2:9
|
||||
|
|
||||
LL | #![deny(missing_doc_code_examples)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::missing_doc_code_examples)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: missing code example in this documentation
|
||||
--> $DIR/lint-missing-doc-code-example.rs:37:3
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// check-pass
|
||||
|
||||
#![deny(private_doc_tests)]
|
||||
#![deny(rustdoc::private_doc_tests)]
|
||||
|
||||
mod foo {
|
||||
/// private doc test
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(private_doc_tests)]
|
||||
#![deny(rustdoc::private_doc_tests)]
|
||||
|
||||
mod foo {
|
||||
/// private doc test
|
||||
|
|
|
@ -11,8 +11,8 @@ LL | | /// ```
|
|||
note: the lint level is defined here
|
||||
--> $DIR/private-item-doc-test.rs:1:9
|
||||
|
|
||||
LL | #![deny(private_doc_tests)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::private_doc_tests)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
/// [aloha]
|
||||
//~^ ERROR unresolved link to `aloha`
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [aloha]
|
|||
note: the lint level is defined here
|
||||
--> $DIR/pub-export-lint.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
/// Links to [a] [link][a]
|
||||
/// And also a [third link][a]
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [a]: ref
|
|||
note: the lint level is defined here
|
||||
--> $DIR/reference-link-reports-error-once.rs:1:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
|
||||
|
||||
error: unresolved link to `ref2`
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Test that errors point to the reference, not to the title text.
|
||||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
//! Links to [a] [link][a]
|
||||
//!
|
||||
//! [a]: std::process::Comman
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | //! [a]: std::process::Comman
|
|||
note: the lint level is defined here
|
||||
--> $DIR/reference-links.rs:2:9
|
||||
|
|
||||
LL | #![deny(broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -4,5 +4,16 @@
|
|||
//~^ NOTE lint level is defined
|
||||
#![deny(x)]
|
||||
//~^ ERROR unknown lint
|
||||
#![deny(rustdoc::x)]
|
||||
//~^ ERROR unknown lint: `rustdoc::x`
|
||||
#![deny(intra_doc_link_resolution_failure)]
|
||||
//~^ ERROR lint `intra_doc_link_resolution_failure` has been renamed
|
||||
//~^ ERROR has been renamed
|
||||
|
||||
// This would ideally say 'renamed to rustdoc::non_autolinks', but this is close enough.
|
||||
#![deny(non_autolinks)]
|
||||
//~^ ERROR has been removed: use `rustdoc::non_autolinks` instead [renamed_and_removed_lints]
|
||||
|
||||
// This doesn't give you the right code directly, but at least points you on the
|
||||
// right path.
|
||||
#![deny(rustdoc::intra_doc_link_resolution_failure)]
|
||||
//~^ ERROR unknown lint
|
||||
|
|
|
@ -10,11 +10,17 @@ note: the lint level is defined here
|
|||
LL | #![deny(unknown_lints)]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: lint `intra_doc_link_resolution_failure` has been renamed to `broken_intra_doc_links`
|
||||
error: unknown lint: `rustdoc::x`
|
||||
--> $DIR/unknown-renamed-lints.rs:7:9
|
||||
|
|
||||
LL | #![deny(rustdoc::x)]
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: lint `intra_doc_link_resolution_failure` has been renamed to `rustdoc::broken_intra_doc_links`
|
||||
--> $DIR/unknown-renamed-lints.rs:9:9
|
||||
|
|
||||
LL | #![deny(intra_doc_link_resolution_failure)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `broken_intra_doc_links`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `rustdoc::broken_intra_doc_links`
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/unknown-renamed-lints.rs:3:9
|
||||
|
@ -22,7 +28,19 @@ note: the lint level is defined here
|
|||
LL | #![deny(renamed_and_removed_lints)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: lint `non_autolinks` has been removed: use `rustdoc::non_autolinks` instead
|
||||
--> $DIR/unknown-renamed-lints.rs:13:9
|
||||
|
|
||||
LL | #![deny(non_autolinks)]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: unknown lint: `rustdoc::intra_doc_link_resolution_failure`
|
||||
--> $DIR/unknown-renamed-lints.rs:18:9
|
||||
|
|
||||
LL | #![deny(rustdoc::intra_doc_link_resolution_failure)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: Compilation failed, aborting rustdoc
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![deny(non_autolinks)]
|
||||
#![deny(rustdoc::non_autolinks)]
|
||||
|
||||
/// [http://aa.com](http://aa.com)
|
||||
//~^ ERROR unneeded long form for URL
|
||||
|
@ -59,7 +59,7 @@ pub fn c() {}
|
|||
/// [should_not.lint](should_not.lint)
|
||||
pub fn everything_is_fine_here() {}
|
||||
|
||||
#[allow(non_autolinks)]
|
||||
#[allow(rustdoc::non_autolinks)]
|
||||
pub mod foo {
|
||||
/// https://somewhere.com/a?hello=12&bye=11#xyz
|
||||
pub fn bar() {}
|
||||
|
|
|
@ -7,8 +7,8 @@ LL | /// [http://aa.com](http://aa.com)
|
|||
note: the lint level is defined here
|
||||
--> $DIR/url-improvements.rs:1:9
|
||||
|
|
||||
LL | #![deny(non_autolinks)]
|
||||
| ^^^^^^^^^^^^^
|
||||
LL | #![deny(rustdoc::non_autolinks)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unneeded long form for URL
|
||||
--> $DIR/url-improvements.rs:5:5
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// ignore-tidy-linelength
|
||||
#![crate_name = "foo"]
|
||||
#![feature(intra_doc_pointers)]
|
||||
#![deny(broken_intra_doc_links)]
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
// @has foo/index.html '//a[@href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rotate_left"]' 'slice::rotate_left'
|
||||
//! [slice::rotate_left]
|
||||
|
|
Loading…
Add table
Reference in a new issue