Rollup merge of #47458 - mark-i-m:lint_array_comma, r=estebank
Allow a trailing comma in lint_array fix #47428
This commit is contained in:
commit
4b636d0165
3 changed files with 55 additions and 19 deletions
|
@ -97,12 +97,13 @@ macro_rules! declare_lint {
|
|||
|
||||
/// Declare a static `LintArray` and return it as an expression.
|
||||
#[macro_export]
|
||||
macro_rules! lint_array { ($( $lint:expr ),*) => (
|
||||
{
|
||||
static ARRAY: LintArray = &[ $( &$lint ),* ];
|
||||
ARRAY
|
||||
}
|
||||
) }
|
||||
macro_rules! lint_array {
|
||||
($( $lint:expr ),*,) => { lint_array!( $( $lint ),* ) };
|
||||
($( $lint:expr ),*) => {{
|
||||
static ARRAY: LintArray = &[ $( &$lint ),* ];
|
||||
ARRAY
|
||||
}}
|
||||
}
|
||||
|
||||
pub type LintArray = &'static [&'static &'static Lint];
|
||||
|
||||
|
|
|
@ -23,26 +23,57 @@ use rustc_plugin::Registry;
|
|||
use rustc::hir;
|
||||
use syntax::attr;
|
||||
|
||||
declare_lint!(CRATE_NOT_OKAY, Warn, "crate not marked with #![crate_okay]");
|
||||
macro_rules! fake_lint_pass {
|
||||
($struct:ident, $lints:expr, $($attr:expr),*) => {
|
||||
struct $struct;
|
||||
|
||||
struct Pass;
|
||||
impl LintPass for $struct {
|
||||
fn get_lints(&self) -> LintArray {
|
||||
$lints
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for $struct {
|
||||
fn check_crate(&mut self, cx: &LateContext, krate: &hir::Crate) {
|
||||
$(
|
||||
if !attr::contains_name(&krate.attrs, $attr) {
|
||||
cx.span_lint(CRATE_NOT_OKAY, krate.span,
|
||||
&format!("crate is not marked with #![{}]", $attr));
|
||||
}
|
||||
)*
|
||||
}
|
||||
}
|
||||
|
||||
impl LintPass for Pass {
|
||||
fn get_lints(&self) -> LintArray {
|
||||
lint_array!(CRATE_NOT_OKAY)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Pass {
|
||||
fn check_crate(&mut self, cx: &LateContext, krate: &hir::Crate) {
|
||||
if !attr::contains_name(&krate.attrs, "crate_okay") {
|
||||
cx.span_lint(CRATE_NOT_OKAY, krate.span,
|
||||
"crate is not marked with #![crate_okay]");
|
||||
}
|
||||
}
|
||||
declare_lint!(CRATE_NOT_OKAY, Warn, "crate not marked with #![crate_okay]");
|
||||
declare_lint!(CRATE_NOT_RED, Warn, "crate not marked with #![crate_red]");
|
||||
declare_lint!(CRATE_NOT_BLUE, Warn, "crate not marked with #![crate_blue]");
|
||||
declare_lint!(CRATE_NOT_GREY, Warn, "crate not marked with #![crate_grey]");
|
||||
declare_lint!(CRATE_NOT_GREEN, Warn, "crate not marked with #![crate_green]");
|
||||
|
||||
fake_lint_pass! {
|
||||
PassOkay,
|
||||
lint_array!(CRATE_NOT_OKAY), // Single lint
|
||||
"crate_okay"
|
||||
}
|
||||
|
||||
fake_lint_pass! {
|
||||
PassRedBlue,
|
||||
lint_array!(CRATE_NOT_RED, CRATE_NOT_BLUE), // Multiple lints
|
||||
"crate_red", "crate_blue"
|
||||
}
|
||||
|
||||
fake_lint_pass! {
|
||||
PassGreyGreen,
|
||||
lint_array!(CRATE_NOT_GREY, CRATE_NOT_GREEN, ), // Trailing comma
|
||||
"crate_grey", "crate_green"
|
||||
}
|
||||
|
||||
#[plugin_registrar]
|
||||
pub fn plugin_registrar(reg: &mut Registry) {
|
||||
reg.register_late_lint_pass(box Pass);
|
||||
reg.register_late_lint_pass(box PassOkay);
|
||||
reg.register_late_lint_pass(box PassRedBlue);
|
||||
reg.register_late_lint_pass(box PassGreyGreen);
|
||||
}
|
||||
|
|
|
@ -15,5 +15,9 @@
|
|||
#![feature(plugin, custom_attribute)]
|
||||
#![plugin(lint_for_crate)]
|
||||
#![crate_okay]
|
||||
#![crate_blue]
|
||||
#![crate_red]
|
||||
#![crate_grey]
|
||||
#![crate_green]
|
||||
|
||||
pub fn main() { }
|
||||
|
|
Loading…
Add table
Reference in a new issue