Skip to content

Commit 7cff930

Browse files
committed
Use NameClass::classify to check for ConstReference
1 parent 75f0701 commit 7cff930

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

crates/ide_assists/src/handlers/replace_if_let_with_match.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use std::iter::{self, successors};
22

33
use either::Either;
4-
use ide_db::{ty_filter::TryEnum, RootDatabase};
4+
use ide_db::{defs::NameClass, ty_filter::TryEnum, RootDatabase};
55
use syntax::{
66
ast::{
77
self,
88
edit::{AstNodeEdit, IndentLevel},
9-
make,
9+
make, NameOwner,
1010
},
1111
AstNode,
1212
};
@@ -237,7 +237,7 @@ fn pick_pattern_and_expr_order(
237237
(ast::Pat::WildcardPat(_), _) => return None,
238238
(pat, _) if is_empty_expr(&expr2) => (pat, expr, expr2),
239239
(_, pat) if is_empty_expr(&expr) => (pat, expr2, expr),
240-
(pat, pat2) => match (binds_name(&pat), binds_name(&pat2)) {
240+
(pat, pat2) => match (binds_name(sema, &pat), binds_name(sema, &pat2)) {
241241
(true, true) => return None,
242242
(true, false) => (pat, expr, expr2),
243243
(false, true) => (pat2, expr2, expr),
@@ -259,11 +259,14 @@ fn is_empty_expr(expr: &ast::Expr) -> bool {
259259
}
260260
}
261261

262-
fn binds_name(pat: &ast::Pat) -> bool {
263-
let binds_name_v = |pat| binds_name(&pat);
262+
fn binds_name(sema: &hir::Semantics<RootDatabase>, pat: &ast::Pat) -> bool {
263+
let binds_name_v = |pat| binds_name(&sema, &pat);
264264
match pat {
265265
ast::Pat::IdentPat(pat) => {
266-
pat.to_string().starts_with(|c: char| c.is_lowercase() && c != '_')
266+
match pat.name().and_then(|name| NameClass::classify(sema, &name)) {
267+
Some(NameClass::ConstReference(_)) => false,
268+
_ => true,
269+
}
267270
}
268271
ast::Pat::MacroPat(_) => true,
269272
ast::Pat::OrPat(pat) => pat.pats().any(binds_name_v),

0 commit comments

Comments
 (0)