Show type hints for & patterns

This commit is contained in:
Aleksey Kladov 2019-12-07 19:14:01 +01:00
parent 6bd9fb8525
commit decc4cb084

View file

@ -122,18 +122,11 @@ fn get_leaf_pats(root_pat: ast::Pat) -> Vec<ast::Pat> {
while let Some(maybe_leaf_pat) = pats_to_process.pop_front() { while let Some(maybe_leaf_pat) = pats_to_process.pop_front() {
match &maybe_leaf_pat { match &maybe_leaf_pat {
ast::Pat::BindPat(bind_pat) => { ast::Pat::BindPat(bind_pat) => match bind_pat.pat() {
if let Some(pat) = bind_pat.pat() { Some(pat) => pats_to_process.push_back(pat),
pats_to_process.push_back(pat); _ => leaf_pats.push(maybe_leaf_pat),
} else { },
leaf_pats.push(maybe_leaf_pat); ast::Pat::TuplePat(tuple_pat) => pats_to_process.extend(tuple_pat.args()),
}
}
ast::Pat::TuplePat(tuple_pat) => {
for arg_pat in tuple_pat.args() {
pats_to_process.push_back(arg_pat);
}
}
ast::Pat::RecordPat(record_pat) => { ast::Pat::RecordPat(record_pat) => {
if let Some(pat_list) = record_pat.record_field_pat_list() { if let Some(pat_list) = record_pat.record_field_pat_list() {
pats_to_process.extend( pats_to_process.extend(
@ -151,10 +144,9 @@ fn get_leaf_pats(root_pat: ast::Pat) -> Vec<ast::Pat> {
} }
} }
ast::Pat::TupleStructPat(tuple_struct_pat) => { ast::Pat::TupleStructPat(tuple_struct_pat) => {
for arg_pat in tuple_struct_pat.args() { pats_to_process.extend(tuple_struct_pat.args())
pats_to_process.push_back(arg_pat);
}
} }
ast::Pat::RefPat(ref_pat) => pats_to_process.extend(ref_pat.pat()),
_ => (), _ => (),
} }
} }
@ -163,9 +155,10 @@ fn get_leaf_pats(root_pat: ast::Pat) -> Vec<ast::Pat> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::mock_analysis::single_file;
use insta::assert_debug_snapshot; use insta::assert_debug_snapshot;
use crate::mock_analysis::single_file;
#[test] #[test]
fn let_statement() { fn let_statement() {
let (analysis, file_id) = single_file( let (analysis, file_id) = single_file(
@ -202,6 +195,7 @@ fn main() {
let test = (42, 'a'); let test = (42, 'a');
let (a, (b, c, (d, e), f)) = (2, (3, 4, (6.6, 7.7), 5)); let (a, (b, c, (d, e), f)) = (2, (3, 4, (6.6, 7.7), 5));
let &x = &92;
}"#, }"#,
); );
@ -257,6 +251,11 @@ fn main() {
kind: TypeHint, kind: TypeHint,
label: "f64", label: "f64",
}, },
InlayHint {
range: [627; 628),
kind: TypeHint,
label: "i32",
},
] ]
"### "###
); );