mirror of
https://github.com/rust-lang/rust-clippy
synced 2025-02-25 20:07:21 +00:00
pub_use
This commit is contained in:
parent
5c19ae96e7
commit
66d253f0f2
7 changed files with 86 additions and 0 deletions
|
@ -3527,6 +3527,7 @@ Released 2018-09-13
|
||||||
[`ptr_eq`]: https://rust-lang.github.io/rust-clippy/master/index.html#ptr_eq
|
[`ptr_eq`]: https://rust-lang.github.io/rust-clippy/master/index.html#ptr_eq
|
||||||
[`ptr_offset_with_cast`]: https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast
|
[`ptr_offset_with_cast`]: https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast
|
||||||
[`pub_enum_variant_names`]: https://rust-lang.github.io/rust-clippy/master/index.html#pub_enum_variant_names
|
[`pub_enum_variant_names`]: https://rust-lang.github.io/rust-clippy/master/index.html#pub_enum_variant_names
|
||||||
|
[`pub_use`]: https://rust-lang.github.io/rust-clippy/master/index.html#pub_use
|
||||||
[`question_mark`]: https://rust-lang.github.io/rust-clippy/master/index.html#question_mark
|
[`question_mark`]: https://rust-lang.github.io/rust-clippy/master/index.html#question_mark
|
||||||
[`range_minus_one`]: https://rust-lang.github.io/rust-clippy/master/index.html#range_minus_one
|
[`range_minus_one`]: https://rust-lang.github.io/rust-clippy/master/index.html#range_minus_one
|
||||||
[`range_plus_one`]: https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one
|
[`range_plus_one`]: https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one
|
||||||
|
|
|
@ -432,6 +432,7 @@ store.register_lints(&[
|
||||||
ptr::PTR_ARG,
|
ptr::PTR_ARG,
|
||||||
ptr_eq::PTR_EQ,
|
ptr_eq::PTR_EQ,
|
||||||
ptr_offset_with_cast::PTR_OFFSET_WITH_CAST,
|
ptr_offset_with_cast::PTR_OFFSET_WITH_CAST,
|
||||||
|
pub_use::PUB_USE,
|
||||||
question_mark::QUESTION_MARK,
|
question_mark::QUESTION_MARK,
|
||||||
ranges::MANUAL_RANGE_CONTAINS,
|
ranges::MANUAL_RANGE_CONTAINS,
|
||||||
ranges::RANGE_MINUS_ONE,
|
ranges::RANGE_MINUS_ONE,
|
||||||
|
|
|
@ -53,6 +53,7 @@ store.register_group(true, "clippy::restriction", Some("clippy_restriction"), ve
|
||||||
LintId::of(panic_unimplemented::UNIMPLEMENTED),
|
LintId::of(panic_unimplemented::UNIMPLEMENTED),
|
||||||
LintId::of(panic_unimplemented::UNREACHABLE),
|
LintId::of(panic_unimplemented::UNREACHABLE),
|
||||||
LintId::of(pattern_type_mismatch::PATTERN_TYPE_MISMATCH),
|
LintId::of(pattern_type_mismatch::PATTERN_TYPE_MISMATCH),
|
||||||
|
LintId::of(pub_use::PUB_USE),
|
||||||
LintId::of(redundant_slicing::DEREF_BY_SLICING),
|
LintId::of(redundant_slicing::DEREF_BY_SLICING),
|
||||||
LintId::of(same_name_method::SAME_NAME_METHOD),
|
LintId::of(same_name_method::SAME_NAME_METHOD),
|
||||||
LintId::of(shadow::SHADOW_REUSE),
|
LintId::of(shadow::SHADOW_REUSE),
|
||||||
|
|
|
@ -336,6 +336,7 @@ mod precedence;
|
||||||
mod ptr;
|
mod ptr;
|
||||||
mod ptr_eq;
|
mod ptr_eq;
|
||||||
mod ptr_offset_with_cast;
|
mod ptr_offset_with_cast;
|
||||||
|
mod pub_use;
|
||||||
mod question_mark;
|
mod question_mark;
|
||||||
mod ranges;
|
mod ranges;
|
||||||
mod redundant_clone;
|
mod redundant_clone;
|
||||||
|
@ -870,6 +871,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
||||||
store.register_early_pass(|| Box::new(crate_in_macro_def::CrateInMacroDef));
|
store.register_early_pass(|| Box::new(crate_in_macro_def::CrateInMacroDef));
|
||||||
store.register_early_pass(|| Box::new(empty_structs_with_brackets::EmptyStructsWithBrackets));
|
store.register_early_pass(|| Box::new(empty_structs_with_brackets::EmptyStructsWithBrackets));
|
||||||
store.register_late_pass(|| Box::new(unnecessary_owned_empty_strings::UnnecessaryOwnedEmptyStrings));
|
store.register_late_pass(|| Box::new(unnecessary_owned_empty_strings::UnnecessaryOwnedEmptyStrings));
|
||||||
|
store.register_early_pass(|| Box::new(pub_use::PubUse));
|
||||||
// add lints here, do not remove this comment, it's used in `new_lint`
|
// add lints here, do not remove this comment, it's used in `new_lint`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
56
clippy_lints/src/pub_use.rs
Normal file
56
clippy_lints/src/pub_use.rs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
use clippy_utils::diagnostics::span_lint_and_help;
|
||||||
|
use rustc_ast::ast::{Item, ItemKind, VisibilityKind};
|
||||||
|
use rustc_lint::{EarlyContext, EarlyLintPass};
|
||||||
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
|
|
||||||
|
declare_clippy_lint! {
|
||||||
|
/// ### What it does
|
||||||
|
///
|
||||||
|
/// Restricts the usage of `pub use ...`
|
||||||
|
///
|
||||||
|
/// ### Why is this bad?
|
||||||
|
///
|
||||||
|
/// `pub use` is usually fine, but a project may wish to limit `pub use` instances to prevent
|
||||||
|
/// unintentional exports or to encourage placing exported items directly in public modules
|
||||||
|
///
|
||||||
|
/// ### Example
|
||||||
|
/// ```rust
|
||||||
|
/// pub mod outer {
|
||||||
|
/// mod inner {
|
||||||
|
/// pub struct Test {}
|
||||||
|
/// }
|
||||||
|
/// pub use inner::Test;
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// use outer::Test;
|
||||||
|
/// ```
|
||||||
|
/// Use instead:
|
||||||
|
/// ```rust
|
||||||
|
/// pub mod outer {
|
||||||
|
/// pub struct Test {}
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// use outer::Test;
|
||||||
|
/// ```
|
||||||
|
#[clippy::version = "1.62.0"]
|
||||||
|
pub PUB_USE,
|
||||||
|
restriction,
|
||||||
|
"restricts the usage of `pub use`"
|
||||||
|
}
|
||||||
|
declare_lint_pass!(PubUse => [PUB_USE]);
|
||||||
|
|
||||||
|
impl EarlyLintPass for PubUse {
|
||||||
|
fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
||||||
|
if let ItemKind::Use(_) = item.kind &&
|
||||||
|
let VisibilityKind::Public = item.vis.kind {
|
||||||
|
span_lint_and_help(
|
||||||
|
cx,
|
||||||
|
PUB_USE,
|
||||||
|
item.span,
|
||||||
|
"using `pub use`",
|
||||||
|
None,
|
||||||
|
"move the exported item to a public module instead",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
tests/ui/pub_use.rs
Normal file
14
tests/ui/pub_use.rs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#![warn(clippy::pub_use)]
|
||||||
|
#![allow(unused_imports)]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
pub mod outer {
|
||||||
|
mod inner {
|
||||||
|
pub struct Test {}
|
||||||
|
}
|
||||||
|
// should be linted
|
||||||
|
pub use inner::Test;
|
||||||
|
}
|
||||||
|
|
||||||
|
// should not be linted
|
||||||
|
use std::fmt;
|
11
tests/ui/pub_use.stderr
Normal file
11
tests/ui/pub_use.stderr
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
error: using `pub use`
|
||||||
|
--> $DIR/pub_use.rs:10:5
|
||||||
|
|
|
||||||
|
LL | pub use inner::Test;
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `-D clippy::pub-use` implied by `-D warnings`
|
||||||
|
= help: move the exported item to a public module instead
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Add table
Reference in a new issue