Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/syntax_helpers/suggest_name.rs')
-rw-r--r--crates/ide-db/src/syntax_helpers/suggest_name.rs21
1 files changed, 9 insertions, 12 deletions
diff --git a/crates/ide-db/src/syntax_helpers/suggest_name.rs b/crates/ide-db/src/syntax_helpers/suggest_name.rs
index e085bf15cb..9b9f450bc7 100644
--- a/crates/ide-db/src/syntax_helpers/suggest_name.rs
+++ b/crates/ide-db/src/syntax_helpers/suggest_name.rs
@@ -7,8 +7,9 @@ use itertools::Itertools;
use rustc_hash::FxHashMap;
use stdx::to_lower_snake_case;
use syntax::{
+ AstNode, Edition, SmolStr, SmolStrBuilder, ToSmolStr,
ast::{self, HasName},
- match_ast, AstNode, Edition, SmolStr, SmolStrBuilder, ToSmolStr,
+ match_ast,
};
use crate::RootDatabase;
@@ -82,7 +83,7 @@ const USELESS_METHODS: &[&str] = &[
///
/// ```
/// # use ide_db::syntax_helpers::suggest_name::NameGenerator;
-/// let mut generator = NameGenerator::new();
+/// let mut generator = NameGenerator::default();
/// assert_eq!(generator.suggest_name("a"), "a");
/// assert_eq!(generator.suggest_name("a"), "a1");
///
@@ -95,21 +96,16 @@ pub struct NameGenerator {
}
impl NameGenerator {
- /// Create a new empty generator
- pub fn new() -> Self {
- Self { pool: FxHashMap::default() }
- }
-
/// Create a new generator with existing names. When suggesting a name, it will
/// avoid conflicts with existing names.
pub fn new_with_names<'a>(existing_names: impl Iterator<Item = &'a str>) -> Self {
- let mut generator = Self::new();
+ let mut generator = Self::default();
existing_names.for_each(|name| generator.insert(name));
generator
}
pub fn new_from_scope_locals(scope: Option<SemanticsScope<'_>>) -> Self {
- let mut generator = Self::new();
+ let mut generator = Self::default();
if let Some(scope) = scope {
scope.process_all_names(&mut |name, scope| {
if let hir::ScopeDef::Local(_) = scope {
@@ -457,9 +453,10 @@ mod tests {
fn check(#[rust_analyzer::rust_fixture] ra_fixture: &str, expected: &str) {
let (db, file_id, range_or_offset) = RootDatabase::with_range_or_offset(ra_fixture);
let frange = FileRange { file_id, range: range_or_offset.into() };
-
let sema = Semantics::new(&db);
+
let source_file = sema.parse(frange.file_id);
+
let element = source_file.syntax().covering_element(frange.range);
let expr =
element.ancestors().find_map(ast::Expr::cast).expect("selection is not an expression");
@@ -468,7 +465,7 @@ mod tests {
frange.range,
"selection is not an expression(yet contained in one)"
);
- let name = NameGenerator::new().for_variable(&expr, &sema);
+ let name = NameGenerator::default().for_variable(&expr, &sema);
assert_eq!(&name, expected);
}
@@ -1115,7 +1112,7 @@ fn main() {
#[test]
fn conflicts_with_existing_names() {
- let mut generator = NameGenerator::new();
+ let mut generator = NameGenerator::default();
assert_eq!(generator.suggest_name("a"), "a");
assert_eq!(generator.suggest_name("a"), "a1");
assert_eq!(generator.suggest_name("a"), "a2");