Skip to content

Commit

Permalink
Turn declare_clippy_lint into a common macro
Browse files Browse the repository at this point in the history
  • Loading branch information
blyxyas committed Sep 6, 2024
1 parent fb9913e commit f58aae5
Show file tree
Hide file tree
Showing 7 changed files with 181 additions and 201 deletions.
1 change: 0 additions & 1 deletion clippy_lints/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ arrayvec = { version = "0.7", default-features = false }
cargo_metadata = "0.18"
clippy_config = { path = "../clippy_config" }
clippy_utils = { path = "../clippy_utils" }
declare_clippy_lint = { path = "../declare_clippy_lint" }
itertools = "0.12"
quine-mc_cluskey = "0.2"
regex-syntax = "0.8"
Expand Down
2 changes: 0 additions & 2 deletions clippy_lints/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,6 @@ extern crate thin_vec;

#[macro_use]
extern crate clippy_utils;
#[macro_use]
extern crate declare_clippy_lint;

#[cfg_attr(feature = "internal", allow(clippy::missing_clippy_version_attribute))]
mod utils;
Expand Down
1 change: 1 addition & 0 deletions clippy_utils/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ arrayvec = { version = "0.7", default-features = false }
itertools = "0.12"
# FIXME(f16_f128): remove when no longer needed for parsing
rustc_apfloat = "0.2.0"
paste = "1.0.15"

[package.metadata.rust-analyzer]
# This crate uses #[feature(rustc_private)]
Expand Down
176 changes: 176 additions & 0 deletions clippy_utils/src/declare_clippy_lint.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
// warn on lints, that are included in `rust-lang/rust`s bootstrap
#![warn(rust_2018_idioms, unused_lifetimes)]

pub use paste;

#[macro_export]
macro_rules! declare_clippy_lint {
(@
// $(#[$($attrss:tt)*])*
$(#[doc = $lit:literal])*
pub $lint_name:ident,
$category:ident,
$lintcategory:expr,
$desc:literal,
$version_expr:expr,
$version_lit:literal
) => {
rustc_session::declare_tool_lint! {
$(#[doc = $lit])*
#[clippy::version = $version_lit]
pub clippy::$lint_name,$category,$desc,
report_in_external_macro:true
}

$crate::paste::paste! {
pub(crate) static [< $lint_name _INFO >]: &'static crate::LintInfo = &crate::LintInfo {
lint: &$lint_name,
category: $lintcategory,
explanation: concat!($($lit,"\n",)*),
location: concat!(file!(), "#L", line!()),
version: $version_expr
};
}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
restriction,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name,Allow, crate::LintCategory::Restriction,$desc,
declare_clippy_lint!(__version = $version), $version
}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
style,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name, Warn, crate::LintCategory::Style,$desc,
declare_clippy_lint!(__version = $version), $version

}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
correctness,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name,Deny, crate::LintCategory::Correctness,$desc,
declare_clippy_lint!(__version = $version), $version

}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
perf,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name, Warn, crate::LintCategory::Perf,$desc,
declare_clippy_lint!(__version = $version), $version
}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
complexity,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name, Warn, crate::LintCategory::Complexity,$desc,
declare_clippy_lint!(__version = $version), $version
}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
suspicious,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name, Warn, crate::LintCategory::Suspicious,$desc,
declare_clippy_lint!(__version = $version), $version
}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
nursery,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name,Allow, crate::LintCategory::Nursery,$desc,
declare_clippy_lint!(__version = $version), $version
}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
pedantic,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name,Allow, crate::LintCategory::Pedantic,$desc,
declare_clippy_lint!(__version = $version), $version
}
};
(
$(#[doc = $lit:literal])*
#[clippy::version = $version:literal]
pub $lint_name:ident,
cargo,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name,Allow, crate::LintCategory::Cargo,$desc,
declare_clippy_lint!(__version = $version), $version
}
};

(
$(#[doc = $lit:literal])*
$(#[clippy::version = $version:literal])?
pub $lint_name:ident,
internal,
$desc:literal
) => {
declare_clippy_lint! {@
$(#[doc = $lit])*
pub $lint_name,Allow, crate::LintCategory::Internal,$desc,
declare_clippy_lint!(__version = $($version)?), "0.0.0"
}
};

// VERSION HANDLING
(__version = ) => {
None
};
(__version = $version:literal) => {
Some($version)
};
}
4 changes: 4 additions & 0 deletions clippy_utils/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ pub mod attrs;
mod check_proc_macro;
pub mod comparisons;
pub mod consts;
pub mod declare_clippy_lint;
pub mod diagnostics;
pub mod eager_or_lazy;
pub mod higher;
Expand Down Expand Up @@ -130,6 +131,9 @@ use crate::higher::Range;
use crate::ty::{adt_and_variant_of_res, can_partially_move_ty, expr_sig, is_copy, is_recursively_primitive_type};
use crate::visitors::for_each_expr_without_closures;

#[doc(hidden)]
pub use paste;

use rustc_middle::hir::nested_filter;

#[macro_export]
Expand Down
13 changes: 0 additions & 13 deletions declare_clippy_lint/Cargo.toml

This file was deleted.

Loading

0 comments on commit f58aae5

Please sign in to comment.