fix: Don't create hir::Locals from const path patterns

This commit is contained in:
Lukas Wirth 2022-04-09 01:08:13 +02:00
parent 15e7112da3
commit 9050db2e80
2 changed files with 21 additions and 2 deletions

View File

@ -213,10 +213,15 @@ impl SourceToDefCtx<'_, '_> {
src: InFile<ast::IdentPat>,
) -> Option<(DefWithBodyId, PatId)> {
let container = self.find_pat_or_label_container(src.syntax())?;
let (_body, source_map) = self.db.body_with_source_map(container);
let (body, source_map) = self.db.body_with_source_map(container);
let src = src.map(ast::Pat::from);
let pat_id = source_map.node_pat(src.as_ref())?;
Some((container, pat_id))
// the pattern could resolve to a constant, verify that that is not the case
if let crate::Pat::Bind { .. } = body[pat_id] {
Some((container, pat_id))
} else {
None
}
}
pub(super) fn self_param_to_def(
&mut self,

View File

@ -935,6 +935,20 @@ fn f() {
0
};
}
"#,
);
}
#[test]
fn test_inline_let_unit_struct() {
check_assist_not_applicable(
inline_local_variable,
r#"
struct S;
fn f() {
let S$0 = S;
S;
}
"#,
);
}