review comments: use `partition_map`

This commit is contained in:
Esteban Küber 2020-04-05 16:34:16 -07:00
parent e84cb65fe1
commit c9f55ea689
3 changed files with 14 additions and 21 deletions

View File

@ -3537,6 +3537,7 @@ dependencies = [
name = "rustc_ast_passes" name = "rustc_ast_passes"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"itertools 0.8.0",
"log", "log",
"rustc_ast", "rustc_ast",
"rustc_ast_pretty", "rustc_ast_pretty",

View File

@ -9,6 +9,7 @@ name = "rustc_ast_passes"
path = "lib.rs" path = "lib.rs"
[dependencies] [dependencies]
itertools = "0.8"
log = "0.4" log = "0.4"
rustc_ast_pretty = { path = "../librustc_ast_pretty" } rustc_ast_pretty = { path = "../librustc_ast_pretty" }
rustc_attr = { path = "../librustc_attr" } rustc_attr = { path = "../librustc_attr" }

View File

@ -6,6 +6,7 @@
// This pass is supposed to perform only simple checks not requiring name resolution // This pass is supposed to perform only simple checks not requiring name resolution
// or type checking or some other kind of complex analysis. // or type checking or some other kind of complex analysis.
use itertools::{Either, Itertools};
use rustc_ast::ast::*; use rustc_ast::ast::*;
use rustc_ast::attr; use rustc_ast::attr;
use rustc_ast::expand::is_proc_macro_attr; use rustc_ast::expand::is_proc_macro_attr;
@ -640,7 +641,7 @@ impl<'a> AstValidator<'a> {
} }
} }
fn suggest_correct_generic_order(&self, data: &AngleBracketedArgs) -> String { fn correct_generic_order_suggestion(&self, data: &AngleBracketedArgs) -> String {
// Lifetimes always come first. // Lifetimes always come first.
let lt_sugg = data.args.iter().filter_map(|arg| match arg { let lt_sugg = data.args.iter().filter_map(|arg| match arg {
AngleBracketedArg::Arg(lt @ GenericArg::Lifetime(_)) => { AngleBracketedArg::Arg(lt @ GenericArg::Lifetime(_)) => {
@ -649,11 +650,12 @@ impl<'a> AstValidator<'a> {
_ => None, _ => None,
}); });
let args_sugg = data.args.iter().filter_map(|a| match a { let args_sugg = data.args.iter().filter_map(|a| match a {
AngleBracketedArg::Arg(GenericArg::Lifetime(_)) => None, AngleBracketedArg::Arg(GenericArg::Lifetime(_)) | AngleBracketedArg::Constraint(_) => {
None
}
AngleBracketedArg::Arg(arg) => Some(pprust::to_string(|s| s.print_generic_arg(arg))), AngleBracketedArg::Arg(arg) => Some(pprust::to_string(|s| s.print_generic_arg(arg))),
AngleBracketedArg::Constraint(_) => None,
}); });
// Cosntraints always come last. // Constraints always come last.
let constraint_sugg = data.args.iter().filter_map(|a| match a { let constraint_sugg = data.args.iter().filter_map(|a| match a {
AngleBracketedArg::Arg(_) => None, AngleBracketedArg::Arg(_) => None,
AngleBracketedArg::Constraint(c) => { AngleBracketedArg::Constraint(c) => {
@ -673,22 +675,11 @@ impl<'a> AstValidator<'a> {
return; return;
} }
// Find all generic argument coming after the first constraint... // Find all generic argument coming after the first constraint...
let constraint_spans = data let (constraint_spans, arg_spans): (Vec<Span>, Vec<Span>) =
.args data.args.iter().partition_map(|arg| match arg {
.iter() AngleBracketedArg::Constraint(c) => Either::Left(c.span),
.filter_map(|arg| match arg { AngleBracketedArg::Arg(a) => Either::Right(a.span()),
AngleBracketedArg::Constraint(c) => Some(c.span), });
_ => None,
})
.collect::<Vec<_>>();
let arg_spans = data
.args
.iter()
.filter_map(|arg| match arg {
AngleBracketedArg::Arg(a) => Some(a.span()),
_ => None,
})
.collect::<Vec<_>>();
let args_len = arg_spans.len(); let args_len = arg_spans.len();
let constraint_len = constraint_spans.len(); let constraint_len = constraint_spans.len();
// ...and then error: // ...and then error:
@ -706,7 +697,7 @@ impl<'a> AstValidator<'a> {
pluralize!(constraint_len), pluralize!(constraint_len),
pluralize!(args_len) pluralize!(args_len)
), ),
self.suggest_correct_generic_order(&data), self.correct_generic_order_suggestion(&data),
Applicability::MachineApplicable, Applicability::MachineApplicable,
) )
.emit(); .emit();