mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-07 12:33:14 +00:00
Move declare_clippy_lint
back into clippy_lints
This commit is contained in:
parent
c7869b82a2
commit
ab7381f085
@ -186,17 +186,11 @@ fn gather_from_file(dir_entry: &walkdir::DirEntry) -> impl Iterator<Item = Lint>
|
|||||||
let path_buf = path.with_file_name(filename);
|
let path_buf = path.with_file_name(filename);
|
||||||
let mut rel_path = path_buf
|
let mut rel_path = path_buf
|
||||||
.strip_prefix(clippy_project_root().join("clippy_lints/src"))
|
.strip_prefix(clippy_project_root().join("clippy_lints/src"))
|
||||||
.map(PathBuf::from)
|
.expect("only files in `clippy_lints/src` should be looked at");
|
||||||
.or_else(|_| {
|
|
||||||
path_buf
|
|
||||||
.strip_prefix(clippy_project_root().join("clippy_utils/src"))
|
|
||||||
.map(|c| Path::new("utils").join(c))
|
|
||||||
})
|
|
||||||
.expect("only files in `clippy_lints/src` or `clippy_utils/src` should be looked at");
|
|
||||||
// If the lints are stored in mod.rs, we get the module name from
|
// If the lints are stored in mod.rs, we get the module name from
|
||||||
// the containing directory:
|
// the containing directory:
|
||||||
if filename == "mod" {
|
if filename == "mod" {
|
||||||
rel_path = rel_path.parent().unwrap().to_path_buf();
|
rel_path = rel_path.parent().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
let module = rel_path
|
let module = rel_path
|
||||||
@ -219,15 +213,13 @@ fn parse_contents(content: &str, module: &str) -> impl Iterator<Item = Lint> {
|
|||||||
lints.chain(deprecated).collect::<Vec<Lint>>().into_iter()
|
lints.chain(deprecated).collect::<Vec<Lint>>().into_iter()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Collects all .rs files in the `clippy_lints/src` and `clippy_utils/src` directories
|
/// Collects all .rs files in the `clippy_lints/src` directory
|
||||||
fn lint_files() -> impl Iterator<Item = walkdir::DirEntry> {
|
fn lint_files() -> impl Iterator<Item = walkdir::DirEntry> {
|
||||||
// We use `WalkDir` instead of `fs::read_dir` here in order to recurse into subdirectories.
|
// We use `WalkDir` instead of `fs::read_dir` here in order to recurse into subdirectories.
|
||||||
// Otherwise we would not collect all the lints, for example in `clippy_lints/src/methods/`.
|
// Otherwise we would not collect all the lints, for example in `clippy_lints/src/methods/`.
|
||||||
let clippy_lints_path = clippy_project_root().join("clippy_lints/src");
|
let path = clippy_project_root().join("clippy_lints/src");
|
||||||
let clippy_utils_path = clippy_project_root().join("clippy_utils/src");
|
WalkDir::new(path)
|
||||||
WalkDir::new(clippy_lints_path)
|
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.chain(WalkDir::new(clippy_utils_path).into_iter())
|
|
||||||
.filter_map(Result::ok)
|
.filter_map(Result::ok)
|
||||||
.filter(|f| f.path().extension() == Some(OsStr::new("rs")))
|
.filter(|f| f.path().extension() == Some(OsStr::new("rs")))
|
||||||
}
|
}
|
||||||
|
@ -46,9 +46,103 @@ use rustc_data_structures::fx::FxHashSet;
|
|||||||
use rustc_lint::LintId;
|
use rustc_lint::LintId;
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
|
|
||||||
|
/// Macro used to declare a Clippy lint.
|
||||||
|
///
|
||||||
|
/// Every lint declaration consists of 4 parts:
|
||||||
|
///
|
||||||
|
/// 1. The documentation, which is used for the website
|
||||||
|
/// 2. The `LINT_NAME`. See [lint naming][lint_naming] on lint naming conventions.
|
||||||
|
/// 3. The `lint_level`, which is a mapping from *one* of our lint groups to `Allow`, `Warn` or
|
||||||
|
/// `Deny`. The lint level here has nothing to do with what lint groups the lint is a part of.
|
||||||
|
/// 4. The `description` that contains a short explanation on what's wrong with code where the
|
||||||
|
/// lint is triggered.
|
||||||
|
///
|
||||||
|
/// Currently the categories `style`, `correctness`, `complexity` and `perf` are enabled by default.
|
||||||
|
/// As said in the README.md of this repository, if the lint level mapping changes, please update
|
||||||
|
/// README.md.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(rustc_private)]
|
||||||
|
/// extern crate rustc_session;
|
||||||
|
/// use rustc_session::declare_tool_lint;
|
||||||
|
/// use clippy_lints::declare_clippy_lint;
|
||||||
|
///
|
||||||
|
/// declare_clippy_lint! {
|
||||||
|
/// /// **What it does:** Checks for ... (describe what the lint matches).
|
||||||
|
/// ///
|
||||||
|
/// /// **Why is this bad?** Supply the reason for linting the code.
|
||||||
|
/// ///
|
||||||
|
/// /// **Known problems:** None. (Or describe where it could go wrong.)
|
||||||
|
/// ///
|
||||||
|
/// /// **Example:**
|
||||||
|
/// ///
|
||||||
|
/// /// ```rust
|
||||||
|
/// /// // Bad
|
||||||
|
/// /// Insert a short example of code that triggers the lint
|
||||||
|
/// ///
|
||||||
|
/// /// // Good
|
||||||
|
/// /// Insert a short example of improved code that doesn't trigger the lint
|
||||||
|
/// /// ```
|
||||||
|
/// pub LINT_NAME,
|
||||||
|
/// pedantic,
|
||||||
|
/// "description"
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
/// [lint_naming]: https://rust-lang.github.io/rfcs/0344-conventions-galore.html#lints
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! declare_clippy_lint {
|
macro_rules! declare_clippy_lint {
|
||||||
( $($x:tt)* ) => { clippy_utils::declare_clippy_lint!($($x)*); }
|
{ $(#[$attr:meta])* pub $name:tt, style, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, correctness, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Deny, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, complexity, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, perf, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, pedantic, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, restriction, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, cargo, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, nursery, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, internal, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
{ $(#[$attr:meta])* pub $name:tt, internal_warn, $description:tt } => {
|
||||||
|
declare_tool_lint! {
|
||||||
|
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
@ -1 +0,0 @@
|
|||||||
pub use clippy_utils::*;
|
|
@ -1,7 +1,7 @@
|
|||||||
//! A group of attributes that can be attached to Rust code in order
|
//! A group of attributes that can be attached to Rust code in order
|
||||||
//! to generate a clippy lint detecting said code automatically.
|
//! to generate a clippy lint detecting said code automatically.
|
||||||
|
|
||||||
use crate::{declare_clippy_lint, get_attr};
|
use crate::utils::get_attr;
|
||||||
use rustc_ast::ast::{Attribute, LitFloatType, LitKind};
|
use rustc_ast::ast::{Attribute, LitFloatType, LitKind};
|
||||||
use rustc_ast::walk_list;
|
use rustc_ast::walk_list;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
@ -1,6 +1,6 @@
|
|||||||
//! checks for attributes
|
//! checks for attributes
|
||||||
|
|
||||||
use crate::{declare_clippy_lint, get_attr};
|
use crate::utils::get_attr;
|
||||||
use rustc_ast::ast::{Attribute, InlineAsmTemplatePiece};
|
use rustc_ast::ast::{Attribute, InlineAsmTemplatePiece};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
@ -1,7 +1,7 @@
|
|||||||
use crate::consts::{constant_simple, Constant};
|
use crate::consts::{constant_simple, Constant};
|
||||||
use crate::{
|
use crate::utils::{
|
||||||
declare_clippy_lint, is_expn_of, match_def_path, match_qpath, match_type, method_calls, path_to_res, paths,
|
is_expn_of, match_def_path, match_qpath, match_type, method_calls, path_to_res, paths, run_lints, snippet,
|
||||||
run_lints, snippet, span_lint, span_lint_and_help, span_lint_and_sugg, SpanlessEq,
|
span_lint, span_lint_and_help, span_lint_and_sugg, SpanlessEq,
|
||||||
};
|
};
|
||||||
use if_chain::if_chain;
|
use if_chain::if_chain;
|
||||||
use rustc_ast::ast::{Crate as AstCrate, ItemKind, LitKind, NodeId};
|
use rustc_ast::ast::{Crate as AstCrate, ItemKind, LitKind, NodeId};
|
6
clippy_lints/src/utils/mod.rs
Normal file
6
clippy_lints/src/utils/mod.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
pub mod author;
|
||||||
|
pub mod inspector;
|
||||||
|
#[cfg(feature = "internal-lints")]
|
||||||
|
pub mod internal_lints;
|
||||||
|
|
||||||
|
pub use clippy_utils::*;
|
@ -30,7 +30,6 @@ pub mod sym_helper;
|
|||||||
#[allow(clippy::module_name_repetitions)]
|
#[allow(clippy::module_name_repetitions)]
|
||||||
pub mod ast_utils;
|
pub mod ast_utils;
|
||||||
pub mod attrs;
|
pub mod attrs;
|
||||||
pub mod author;
|
|
||||||
pub mod camel_case;
|
pub mod camel_case;
|
||||||
pub mod comparisons;
|
pub mod comparisons;
|
||||||
pub mod conf;
|
pub mod conf;
|
||||||
@ -39,9 +38,6 @@ mod diagnostics;
|
|||||||
pub mod eager_or_lazy;
|
pub mod eager_or_lazy;
|
||||||
pub mod higher;
|
pub mod higher;
|
||||||
mod hir_utils;
|
mod hir_utils;
|
||||||
pub mod inspector;
|
|
||||||
#[cfg(feature = "internal-lints")]
|
|
||||||
pub mod internal_lints;
|
|
||||||
pub mod numeric_literal;
|
pub mod numeric_literal;
|
||||||
pub mod paths;
|
pub mod paths;
|
||||||
pub mod ptr;
|
pub mod ptr;
|
||||||
@ -90,105 +86,6 @@ use smallvec::SmallVec;
|
|||||||
|
|
||||||
use crate::consts::{constant, Constant};
|
use crate::consts::{constant, Constant};
|
||||||
|
|
||||||
/// Macro used to declare a Clippy lint.
|
|
||||||
///
|
|
||||||
/// Every lint declaration consists of 4 parts:
|
|
||||||
///
|
|
||||||
/// 1. The documentation, which is used for the website
|
|
||||||
/// 2. The `LINT_NAME`. See [lint naming][lint_naming] on lint naming conventions.
|
|
||||||
/// 3. The `lint_level`, which is a mapping from *one* of our lint groups to `Allow`, `Warn` or
|
|
||||||
/// `Deny`. The lint level here has nothing to do with what lint groups the lint is a part of.
|
|
||||||
/// 4. The `description` that contains a short explanation on what's wrong with code where the
|
|
||||||
/// lint is triggered.
|
|
||||||
///
|
|
||||||
/// Currently the categories `style`, `correctness`, `complexity` and `perf` are enabled by default.
|
|
||||||
/// As said in the README.md of this repository, if the lint level mapping changes, please update
|
|
||||||
/// README.md.
|
|
||||||
///
|
|
||||||
/// # Example
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// #![feature(rustc_private)]
|
|
||||||
/// extern crate rustc_session;
|
|
||||||
/// use rustc_session::declare_tool_lint;
|
|
||||||
/// use clippy_utils::declare_clippy_lint;
|
|
||||||
///
|
|
||||||
/// declare_clippy_lint! {
|
|
||||||
/// /// **What it does:** Checks for ... (describe what the lint matches).
|
|
||||||
/// ///
|
|
||||||
/// /// **Why is this bad?** Supply the reason for linting the code.
|
|
||||||
/// ///
|
|
||||||
/// /// **Known problems:** None. (Or describe where it could go wrong.)
|
|
||||||
/// ///
|
|
||||||
/// /// **Example:**
|
|
||||||
/// ///
|
|
||||||
/// /// ```rust
|
|
||||||
/// /// // Bad
|
|
||||||
/// /// Insert a short example of code that triggers the lint
|
|
||||||
/// ///
|
|
||||||
/// /// // Good
|
|
||||||
/// /// Insert a short example of improved code that doesn't trigger the lint
|
|
||||||
/// /// ```
|
|
||||||
/// pub LINT_NAME,
|
|
||||||
/// pedantic,
|
|
||||||
/// "description"
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
/// [lint_naming]: https://rust-lang.github.io/rfcs/0344-conventions-galore.html#lints
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! declare_clippy_lint {
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, style, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, correctness, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Deny, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, complexity, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, perf, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, pedantic, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, restriction, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, cargo, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, nursery, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, internal, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Allow, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
{ $(#[$attr:meta])* pub $name:tt, internal_warn, $description:tt } => {
|
|
||||||
declare_tool_lint! {
|
|
||||||
$(#[$attr])* pub clippy::$name, Warn, $description, report_in_external_macro: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn parse_msrv(msrv: &str, sess: Option<&Session>, span: Option<Span>) -> Option<RustcVersion> {
|
pub fn parse_msrv(msrv: &str, sess: Option<&Session>, span: Option<Span>) -> Option<RustcVersion> {
|
||||||
if let Ok(version) = RustcVersion::parse(msrv) {
|
if let Ok(version) = RustcVersion::parse(msrv) {
|
||||||
return Some(version);
|
return Some(version);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
thread 'rustc' panicked at 'Would you like some help with that?', clippy_utils/src/internal_lints.rs
|
thread 'rustc' panicked at 'Would you like some help with that?', clippy_lints/src/utils/internal_lints.rs
|
||||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||||
|
|
||||||
error: internal compiler error: unexpected panic
|
error: internal compiler error: unexpected panic
|
||||||
|
Loading…
Reference in New Issue
Block a user