Skip to content

Commit c9f55ea

Browse files
committed
review comments: use partition_map
1 parent e84cb65 commit c9f55ea

File tree

3 files changed

+14
-21
lines changed

3 files changed

+14
-21
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3537,6 +3537,7 @@ dependencies = [
35373537
name = "rustc_ast_passes"
35383538
version = "0.0.0"
35393539
dependencies = [
3540+
"itertools 0.8.0",
35403541
"log",
35413542
"rustc_ast",
35423543
"rustc_ast_pretty",

src/librustc_ast_passes/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ name = "rustc_ast_passes"
99
path = "lib.rs"
1010

1111
[dependencies]
12+
itertools = "0.8"
1213
log = "0.4"
1314
rustc_ast_pretty = { path = "../librustc_ast_pretty" }
1415
rustc_attr = { path = "../librustc_attr" }

src/librustc_ast_passes/ast_validation.rs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// This pass is supposed to perform only simple checks not requiring name resolution
77
// or type checking or some other kind of complex analysis.
88

9+
use itertools::{Either, Itertools};
910
use rustc_ast::ast::*;
1011
use rustc_ast::attr;
1112
use rustc_ast::expand::is_proc_macro_attr;
@@ -640,7 +641,7 @@ impl<'a> AstValidator<'a> {
640641
}
641642
}
642643

643-
fn suggest_correct_generic_order(&self, data: &AngleBracketedArgs) -> String {
644+
fn correct_generic_order_suggestion(&self, data: &AngleBracketedArgs) -> String {
644645
// Lifetimes always come first.
645646
let lt_sugg = data.args.iter().filter_map(|arg| match arg {
646647
AngleBracketedArg::Arg(lt @ GenericArg::Lifetime(_)) => {
@@ -649,11 +650,12 @@ impl<'a> AstValidator<'a> {
649650
_ => None,
650651
});
651652
let args_sugg = data.args.iter().filter_map(|a| match a {
652-
AngleBracketedArg::Arg(GenericArg::Lifetime(_)) => None,
653+
AngleBracketedArg::Arg(GenericArg::Lifetime(_)) | AngleBracketedArg::Constraint(_) => {
654+
None
655+
}
653656
AngleBracketedArg::Arg(arg) => Some(pprust::to_string(|s| s.print_generic_arg(arg))),
654-
AngleBracketedArg::Constraint(_) => None,
655657
});
656-
// Cosntraints always come last.
658+
// Constraints always come last.
657659
let constraint_sugg = data.args.iter().filter_map(|a| match a {
658660
AngleBracketedArg::Arg(_) => None,
659661
AngleBracketedArg::Constraint(c) => {
@@ -673,22 +675,11 @@ impl<'a> AstValidator<'a> {
673675
return;
674676
}
675677
// Find all generic argument coming after the first constraint...
676-
let constraint_spans = data
677-
.args
678-
.iter()
679-
.filter_map(|arg| match arg {
680-
AngleBracketedArg::Constraint(c) => Some(c.span),
681-
_ => None,
682-
})
683-
.collect::<Vec<_>>();
684-
let arg_spans = data
685-
.args
686-
.iter()
687-
.filter_map(|arg| match arg {
688-
AngleBracketedArg::Arg(a) => Some(a.span()),
689-
_ => None,
690-
})
691-
.collect::<Vec<_>>();
678+
let (constraint_spans, arg_spans): (Vec<Span>, Vec<Span>) =
679+
data.args.iter().partition_map(|arg| match arg {
680+
AngleBracketedArg::Constraint(c) => Either::Left(c.span),
681+
AngleBracketedArg::Arg(a) => Either::Right(a.span()),
682+
});
692683
let args_len = arg_spans.len();
693684
let constraint_len = constraint_spans.len();
694685
// ...and then error:
@@ -706,7 +697,7 @@ impl<'a> AstValidator<'a> {
706697
pluralize!(constraint_len),
707698
pluralize!(args_len)
708699
),
709-
self.suggest_correct_generic_order(&data),
700+
self.correct_generic_order_suggestion(&data),
710701
Applicability::MachineApplicable,
711702
)
712703
.emit();

0 commit comments

Comments
 (0)