Skip to content

Commit fba110c

Browse files
committed
reduce repetition in librustc(_lint) wrt. impl LintPass
1 parent f8673e0 commit fba110c

File tree

11 files changed

+198
-591
lines changed

11 files changed

+198
-591
lines changed

src/librustc/lint/builtin.rs

+66-75
Original file line numberDiff line numberDiff line change
@@ -392,81 +392,72 @@ declare_lint! {
392392
"nested occurrence of `impl Trait` type"
393393
}
394394

395-
/// Does nothing as a lint pass, but registers some `Lint`s
396-
/// that are used by other parts of the compiler.
397-
#[derive(Copy, Clone)]
398-
pub struct HardwiredLints;
399-
400-
impl LintPass for HardwiredLints {
401-
fn name(&self) -> &'static str {
402-
"HardwiredLints"
403-
}
404-
405-
fn get_lints(&self) -> LintArray {
406-
lint_array!(
407-
ILLEGAL_FLOATING_POINT_LITERAL_PATTERN,
408-
EXCEEDING_BITSHIFTS,
409-
UNUSED_IMPORTS,
410-
UNUSED_EXTERN_CRATES,
411-
UNUSED_QUALIFICATIONS,
412-
UNKNOWN_LINTS,
413-
UNUSED_VARIABLES,
414-
UNUSED_ASSIGNMENTS,
415-
DEAD_CODE,
416-
UNREACHABLE_CODE,
417-
UNREACHABLE_PATTERNS,
418-
UNUSED_MACROS,
419-
WARNINGS,
420-
UNUSED_FEATURES,
421-
STABLE_FEATURES,
422-
UNKNOWN_CRATE_TYPES,
423-
TRIVIAL_CASTS,
424-
TRIVIAL_NUMERIC_CASTS,
425-
PRIVATE_IN_PUBLIC,
426-
EXPORTED_PRIVATE_DEPENDENCIES,
427-
PUB_USE_OF_PRIVATE_EXTERN_CRATE,
428-
INVALID_TYPE_PARAM_DEFAULT,
429-
CONST_ERR,
430-
RENAMED_AND_REMOVED_LINTS,
431-
SAFE_EXTERN_STATICS,
432-
SAFE_PACKED_BORROWS,
433-
PATTERNS_IN_FNS_WITHOUT_BODY,
434-
LEGACY_DIRECTORY_OWNERSHIP,
435-
LEGACY_CONSTRUCTOR_VISIBILITY,
436-
MISSING_FRAGMENT_SPECIFIER,
437-
PARENTHESIZED_PARAMS_IN_TYPES_AND_MODULES,
438-
LATE_BOUND_LIFETIME_ARGUMENTS,
439-
INCOHERENT_FUNDAMENTAL_IMPLS,
440-
ORDER_DEPENDENT_TRAIT_OBJECTS,
441-
DEPRECATED,
442-
UNUSED_UNSAFE,
443-
UNUSED_MUT,
444-
UNCONDITIONAL_RECURSION,
445-
SINGLE_USE_LIFETIMES,
446-
UNUSED_LIFETIMES,
447-
UNUSED_LABELS,
448-
TYVAR_BEHIND_RAW_POINTER,
449-
ELIDED_LIFETIMES_IN_PATHS,
450-
BARE_TRAIT_OBJECTS,
451-
ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
452-
UNSTABLE_NAME_COLLISIONS,
453-
IRREFUTABLE_LET_PATTERNS,
454-
DUPLICATE_MACRO_EXPORTS,
455-
INTRA_DOC_LINK_RESOLUTION_FAILURE,
456-
MISSING_DOC_CODE_EXAMPLES,
457-
PRIVATE_DOC_TESTS,
458-
WHERE_CLAUSES_OBJECT_SAFETY,
459-
PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
460-
MACRO_USE_EXTERN_CRATE,
461-
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
462-
parser::QUESTION_MARK_MACRO_SEP,
463-
parser::ILL_FORMED_ATTRIBUTE_INPUT,
464-
DEPRECATED_IN_FUTURE,
465-
AMBIGUOUS_ASSOCIATED_ITEMS,
466-
NESTED_IMPL_TRAIT,
467-
DUPLICATE_MATCHER_BINDING_NAME,
468-
)
469-
}
395+
declare_lint_pass! {
396+
/// Does nothing as a lint pass, but registers some `Lint`s
397+
/// that are used by other parts of the compiler.
398+
HardwiredLints => [
399+
ILLEGAL_FLOATING_POINT_LITERAL_PATTERN,
400+
EXCEEDING_BITSHIFTS,
401+
UNUSED_IMPORTS,
402+
UNUSED_EXTERN_CRATES,
403+
UNUSED_QUALIFICATIONS,
404+
UNKNOWN_LINTS,
405+
UNUSED_VARIABLES,
406+
UNUSED_ASSIGNMENTS,
407+
DEAD_CODE,
408+
UNREACHABLE_CODE,
409+
UNREACHABLE_PATTERNS,
410+
UNUSED_MACROS,
411+
WARNINGS,
412+
UNUSED_FEATURES,
413+
STABLE_FEATURES,
414+
UNKNOWN_CRATE_TYPES,
415+
TRIVIAL_CASTS,
416+
TRIVIAL_NUMERIC_CASTS,
417+
PRIVATE_IN_PUBLIC,
418+
EXPORTED_PRIVATE_DEPENDENCIES,
419+
PUB_USE_OF_PRIVATE_EXTERN_CRATE,
420+
INVALID_TYPE_PARAM_DEFAULT,
421+
CONST_ERR,
422+
RENAMED_AND_REMOVED_LINTS,
423+
SAFE_EXTERN_STATICS,
424+
SAFE_PACKED_BORROWS,
425+
PATTERNS_IN_FNS_WITHOUT_BODY,
426+
LEGACY_DIRECTORY_OWNERSHIP,
427+
LEGACY_CONSTRUCTOR_VISIBILITY,
428+
MISSING_FRAGMENT_SPECIFIER,
429+
PARENTHESIZED_PARAMS_IN_TYPES_AND_MODULES,
430+
LATE_BOUND_LIFETIME_ARGUMENTS,
431+
INCOHERENT_FUNDAMENTAL_IMPLS,
432+
ORDER_DEPENDENT_TRAIT_OBJECTS,
433+
DEPRECATED,
434+
UNUSED_UNSAFE,
435+
UNUSED_MUT,
436+
UNCONDITIONAL_RECURSION,
437+
SINGLE_USE_LIFETIMES,
438+
UNUSED_LIFETIMES,
439+
UNUSED_LABELS,
440+
TYVAR_BEHIND_RAW_POINTER,
441+
ELIDED_LIFETIMES_IN_PATHS,
442+
BARE_TRAIT_OBJECTS,
443+
ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
444+
UNSTABLE_NAME_COLLISIONS,
445+
IRREFUTABLE_LET_PATTERNS,
446+
DUPLICATE_MACRO_EXPORTS,
447+
INTRA_DOC_LINK_RESOLUTION_FAILURE,
448+
MISSING_DOC_CODE_EXAMPLES,
449+
PRIVATE_DOC_TESTS,
450+
WHERE_CLAUSES_OBJECT_SAFETY,
451+
PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
452+
MACRO_USE_EXTERN_CRATE,
453+
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
454+
parser::QUESTION_MARK_MACRO_SEP,
455+
parser::ILL_FORMED_ATTRIBUTE_INPUT,
456+
DEPRECATED_IN_FUTURE,
457+
AMBIGUOUS_ASSOCIATED_ITEMS,
458+
NESTED_IMPL_TRAIT,
459+
DUPLICATE_MATCHER_BINDING_NAME,
460+
]
470461
}
471462

472463
// this could be a closure, but then implementing derive traits

src/librustc/lint/mod.rs

+21
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,27 @@ pub trait LintPass {
181181
fn get_lints(&self) -> LintArray;
182182
}
183183

184+
/// Implements `LintPass for $name` with the given list of `Lint` statics.
185+
#[macro_export]
186+
macro_rules! impl_lint_pass {
187+
($name:ident => [$($lint:expr),* $(,)?]) => {
188+
impl LintPass for $name {
189+
fn name(&self) -> &'static str { stringify!($name) }
190+
fn get_lints(&self) -> LintArray { $crate::lint_array!($($lint),*) }
191+
}
192+
};
193+
}
194+
195+
/// Declares a type named `$name` which implements `LintPass`.
196+
/// To the right of `=>` a comma separated list of `Lint` statics is given.
197+
#[macro_export]
198+
macro_rules! declare_lint_pass {
199+
($(#[$m:meta])* $name:ident => [$($lint:expr),* $(,)?]) => {
200+
$(#[$m])* #[derive(Copy, Clone)] pub struct $name;
201+
$crate::impl_lint_pass!($name => [$($lint),*]);
202+
};
203+
}
204+
184205
#[macro_export]
185206
macro_rules! late_lint_methods {
186207
($macro:path, $args:tt, [$hir:tt]) => (

0 commit comments

Comments
 (0)