Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #22998 from bit-aloo/2026-08-02-bump-rowan-0.17
Bump rowan 0.17.0
57 files changed, 136 insertions, 276 deletions
diff --git a/Cargo.lock b/Cargo.lock index 7a2e2d493b..51d907024c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2296,9 +2296,9 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "rowan" -version = "0.15.19" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2441aaccb50f4267d4f0f58b21e0138e96a449f361ed57a2673a83c9bca0772" +checksum = "14b574c58582fa59fa43a2feb6608b8744184659f08a2e0117e4b8224d95ed61" dependencies = [ "countme", "hashbrown 0.14.5", diff --git a/Cargo.toml b/Cargo.toml index 4ef92c5bd2..a56d9770f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -123,7 +123,7 @@ process-wrap = { version = "9.1.0", features = ["std"] } pulldown-cmark-to-cmark = "10.0.4" pulldown-cmark = { version = "0.9.6", default-features = false } rayon = "1.10.0" -rowan = "=0.15.19" +rowan = "0.17.0" # Ideally we'd not enable the macros feature but unfortunately the `tracked` attribute does not work # on impls without it salsa = { version = "0.27.0", default-features = false, features = [ diff --git a/crates/hir-def/src/attrs.rs b/crates/hir-def/src/attrs.rs index d55509e2f0..c330b374f7 100644 --- a/crates/hir-def/src/attrs.rs +++ b/crates/hir-def/src/attrs.rs @@ -201,7 +201,7 @@ fn match_attr_flags(attr_flags: &mut AttrFlags, attr: ast::Meta) -> ControlFlow< let segment4 = segment4.and_then(|it| it.segment()?.name_ref()); segment1.text() == "test" && segment3.is_none_or(|it| it.text() == "prelude") - && segment4.is_none_or(|it| matches!(&*it.text(), "core" | "std")) + && segment4.is_none_or(|it| matches!(it.text(), "core" | "std")) }); if is_test { attr_flags.insert(AttrFlags::IS_TEST); diff --git a/crates/hir-def/src/expr_store/lower.rs b/crates/hir-def/src/expr_store/lower.rs index df4fc6e531..aaca830088 100644 --- a/crates/hir-def/src/expr_store/lower.rs +++ b/crates/hir-def/src/expr_store/lower.rs @@ -665,7 +665,7 @@ impl<'db> ExprCollector<'db> { lifetime: ast::Lifetime, ) -> LifetimeRefId { // FIXME: Keyword check? - let lifetime_ref = match &*lifetime.text() { + let lifetime_ref = match lifetime.text() { "" | "'" => LifetimeRef::Error, "'static" => LifetimeRef::Static, "'_" => LifetimeRef::Placeholder, @@ -1295,7 +1295,7 @@ impl<'db> ExprCollector<'db> { match binder.generic_param_list() { Some(gpl) => gpl .lifetime_params() - .flat_map(|lp| lp.lifetime().map(|lt| Name::new_lifetime(<.text()))) + .flat_map(|lp| lp.lifetime().map(|lt| Name::new_lifetime(lt.text()))) .collect(), None => ThinVec::default(), } @@ -3175,7 +3175,7 @@ impl<'db> ExprCollector<'db> { name: ast_label .lifetime() .as_ref() - .map_or_else(Name::missing, |lt| Name::new_lifetime(<.text())), + .map_or_else(Name::missing, |lt| Name::new_lifetime(lt.text())), }; self.alloc_label(label, AstPtr::new(&ast_label)) } @@ -3195,7 +3195,7 @@ impl<'db> ExprCollector<'db> { (hygiene_id.syntax_context().parent(self.db), expansion.def) }) }; - let name = Name::new_lifetime(&lifetime.text()); + let name = Name::new_lifetime(lifetime.text()); for (rib_idx, rib) in self.label_ribs.iter().enumerate().rev() { match &rib.kind { diff --git a/crates/hir-def/src/expr_store/lower/asm.rs b/crates/hir-def/src/expr_store/lower/asm.rs index 63a0594f74..fb0a5b0bf7 100644 --- a/crates/hir-def/src/expr_store/lower/asm.rs +++ b/crates/hir-def/src/expr_store/lower/asm.rs @@ -39,7 +39,7 @@ impl ExprCollector<'_> { Some(InlineAsmRegOrRegClass::Reg(Symbol::intern(string.text()))) } else { reg.name_ref().map(|name_ref| { - InlineAsmRegOrRegClass::RegClass(Symbol::intern(&name_ref.text())) + InlineAsmRegOrRegClass::RegClass(Symbol::intern(name_ref.text())) }) } }; @@ -69,7 +69,7 @@ impl ExprCollector<'_> { continue; } ast::AsmPiece::AsmOperandNamed(op) => { - let name = op.name().map(|name| Symbol::intern(&name.text())); + let name = op.name().map(|name| Symbol::intern(name.text())); if let Some(name) = &name { named_args.insert(name.clone(), slot); named_pos.insert(slot, name.clone()); diff --git a/crates/hir-def/src/expr_store/lower/generics.rs b/crates/hir-def/src/expr_store/lower/generics.rs index ce6e73670c..65877fb627 100644 --- a/crates/hir-def/src/expr_store/lower/generics.rs +++ b/crates/hir-def/src/expr_store/lower/generics.rs @@ -181,7 +181,7 @@ impl GenericParamsCollector { .map(|lifetime_param| { lifetime_param .lifetime() - .map_or_else(Name::missing, |lt| Name::new_lifetime(<.text())) + .map_or_else(Name::missing, |lt| Name::new_lifetime(lt.text())) }) .collect() }); diff --git a/crates/hir-expand/src/builtin/derive_macro.rs b/crates/hir-expand/src/builtin/derive_macro.rs index 5e85a710e0..63e5764728 100644 --- a/crates/hir-expand/src/builtin/derive_macro.rs +++ b/crates/hir-expand/src/builtin/derive_macro.rs @@ -412,7 +412,7 @@ fn name_to_token( })?; let span = token_map.span_at(name.syntax().text_range().start()); - let name_token = tt::Ident::new(name.text().as_ref(), span); + let name_token = tt::Ident::new(name.text(), span); Ok(name_token) } @@ -1184,7 +1184,7 @@ fn coerce_pointee_expand( let new_bounds = bounds.bounds().filter_map(|bound| { let new_bound = substitute_type_bound( bound.clone(), - &pointee_param_name.text(), + pointee_param_name.text(), ADDED_PARAM, ); @@ -1197,7 +1197,7 @@ fn coerce_pointee_expand( let new_bounds_target = if is_pointee { make.name_ref(ADDED_PARAM) } else { - make.name_ref(¶m_name.text()) + make.name_ref(param_name.text()) }; new_predicates.push(make.where_pred( Either::Right( @@ -1240,12 +1240,12 @@ fn coerce_pointee_expand( // If the target type references the pointee, duplicate the bound as whole. // Otherwise, duplicate only bounds that mention the pointee. if let Some(predicate_with_substituted_target) = - substitute_where_pred(&predicate, &pointee_param_name.text(), ADDED_PARAM) + substitute_where_pred(&predicate, pointee_param_name.text(), ADDED_PARAM) { new_predicates.push(predicate_with_substituted_target); } else if let Some(bounds) = predicate.type_bound_list() { let new_bounds = bounds.bounds().filter_map(|bound| { - substitute_type_bound(bound, &pointee_param_name.text(), ADDED_PARAM) + substitute_type_bound(bound, pointee_param_name.text(), ADDED_PARAM) }); new_predicates.push(make.where_pred(Either::Right(pred_target), new_bounds)); } @@ -1259,7 +1259,7 @@ fn coerce_pointee_expand( new_predicates.push( make.where_pred( Either::Right(make.ty_path_from_segments( - [make.path_segment(make.name_ref(&pointee_param_name.text()))], + [make.path_segment(make.name_ref(pointee_param_name.text()))], false, )), [make.type_bound( @@ -1294,7 +1294,7 @@ fn coerce_pointee_expand( .filter_map(|param| { Some(match param { ast::GenericParam::ConstParam(param) => { - ast::GenericArg::ConstArg(make.expr_const_value(¶m.name()?.text())) + ast::GenericArg::ConstArg(make.expr_const_value(param.name()?.text())) } ast::GenericParam::LifetimeParam(param) => { make.lifetime_arg(param.lifetime()?).into() @@ -1303,7 +1303,7 @@ fn coerce_pointee_expand( let name = if pointee_param_idx == type_param_idx { make.name_ref(ADDED_PARAM) } else { - make.name_ref(¶m.name()?.text()) + make.name_ref(param.name()?.text()) }; type_param_idx += 1; make.type_arg(make.ty_path_from_segments([make.path_segment(name)], false)) @@ -1314,7 +1314,7 @@ fn coerce_pointee_expand( make.path_from_segments( [make.generic_ty_path_segment( - make.name_ref(&struct_name.text()), + make.name_ref(struct_name.text()), self_params_for_traits, )], false, diff --git a/crates/hir-expand/src/name.rs b/crates/hir-expand/src/name.rs index d91b0f378e..7968adabbc 100644 --- a/crates/hir-expand/src/name.rs +++ b/crates/hir-expand/src/name.rs @@ -246,14 +246,14 @@ impl AsName for ast::NameRef { fn as_name(&self) -> Name { match self.as_tuple_field() { Some(idx) => Name::new_tuple_field(idx), - None => Name::new_root(&self.text()), + None => Name::new_root(self.text()), } } } impl AsName for ast::Name { fn as_name(&self) -> Name { - Name::new_root(&self.text()) + Name::new_root(self.text()) } } diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs index e80567641b..209091683a 100644 --- a/crates/hir/src/source_analyzer.rs +++ b/crates/hir/src/source_analyzer.rs @@ -1320,7 +1320,7 @@ impl<'db> SourceAnalyzer<'db> { .first_segment() .and_then(|it| it.name_ref()) .and_then(|name_ref| { - ToolModule::by_name(db, self.resolver.krate().into(), &name_ref.text()) + ToolModule::by_name(db, self.resolver.krate().into(), name_ref.text()) .map(PathResolution::ToolModule) }) .map(|it| (it, None)), @@ -1361,7 +1361,7 @@ impl<'db> SourceAnalyzer<'db> { // in this case we have to check for inert/builtin attributes and tools and prioritize // resolution of attributes over other namespaces if let Some(name_ref) = path.as_single_name_ref() { - let builtin = BuiltinAttr::builtin(&name_ref.text()); + let builtin = BuiltinAttr::builtin(name_ref.text()); if builtin.is_some() { return builtin.map(|it| (PathResolution::BuiltinAttr(it), None)); } @@ -1411,7 +1411,7 @@ impl<'db> SourceAnalyzer<'db> { .first_segment() .and_then(|it| it.name_ref()) .and_then(|name_ref| { - ToolModule::by_name(db, self.resolver.krate().into(), &name_ref.text()) + ToolModule::by_name(db, self.resolver.krate().into(), name_ref.text()) .map(PathResolution::ToolModule) }) .map(|it| (it, None)), diff --git a/crates/ide-assists/src/handlers/apply_demorgan.rs b/crates/ide-assists/src/handlers/apply_demorgan.rs index 10262445a2..e2c1048bdb 100644 --- a/crates/ide-assists/src/handlers/apply_demorgan.rs +++ b/crates/ide-assists/src/handlers/apply_demorgan.rs @@ -206,7 +206,7 @@ pub(crate) fn apply_demorgan_iterator( let closure_body = closure_expr.body()?; let op_range = method_call.syntax().text_range(); - let label = format!("Apply De Morgan's law to `Iterator::{}`", name.text().as_str()); + let label = format!("Apply De Morgan's law to `Iterator::{}`", name.text()); acc.add_group( &GroupLabel("Apply De Morgan's law".to_owned()), AssistId::refactor_rewrite("apply_demorgan_iterator"), @@ -216,7 +216,7 @@ pub(crate) fn apply_demorgan_iterator( let editor = builder.make_editor(method_call.syntax()); let make = editor.make(); // replace the method name - let new_name = match name.text().as_str() { + let new_name = match name.text() { "all" => make.name_ref("any"), "any" => make.name_ref("all"), "is_some_and" => make.name_ref("is_none_or"), diff --git a/crates/ide-assists/src/handlers/convert_closure_to_fn.rs b/crates/ide-assists/src/handlers/convert_closure_to_fn.rs index c9f5e0a4fb..83effa1182 100644 --- a/crates/ide-assists/src/handlers/convert_closure_to_fn.rs +++ b/crates/ide-assists/src/handlers/convert_closure_to_fn.rs @@ -507,7 +507,7 @@ fn wrap_capture_in_deref_if_needed( capture_kind: CaptureKind, is_ref: bool, ) -> ast::Expr { - let capture_name = make.expr_path(make.path_from_text(&capture_name.text())); + let capture_name = make.expr_path(make.path_from_text(capture_name.text())); if capture_kind == CaptureKind::Move || is_ref { return capture_name; } diff --git a/crates/ide-assists/src/handlers/convert_into_to_from.rs b/crates/ide-assists/src/handlers/convert_into_to_from.rs index a01a66e7b1..c8de14bed4 100644 --- a/crates/ide-assists/src/handlers/convert_into_to_from.rs +++ b/crates/ide-assists/src/handlers/convert_into_to_from.rs @@ -109,7 +109,7 @@ pub(crate) fn convert_into_to_from(acc: &mut Assists, ctx: &AssistContext<'_, '_ editor.replace(into_fn_name.syntax(), make.name("from").syntax()); for s in selfs { - match s.text().as_ref() { + match s.text() { "self" => editor.replace(s.syntax(), make.name_ref("val").syntax()), "Self" => { if let Some(path_segment) = diff --git a/crates/ide-assists/src/handlers/convert_match_to_let_else.rs b/crates/ide-assists/src/handlers/convert_match_to_let_else.rs index 9dffdf3f36..db084c6ea2 100644 --- a/crates/ide-assists/src/handlers/convert_match_to_let_else.rs +++ b/crates/ide-assists/src/handlers/convert_match_to_let_else.rs @@ -148,8 +148,7 @@ fn rename_variable(pat: &ast::Pat, extracted: &[Name], binding: ast::Pat) -> Syn if let Some(name_ref) = record_pat_field.field_name() { editor.replace( record_pat_field.syntax(), - make.record_pat_field(make.name_ref(&name_ref.text()), binding.clone()) - .syntax(), + make.record_pat_field(make.name_ref(name_ref.text()), binding.clone()).syntax(), ); } } else { diff --git a/crates/ide-assists/src/handlers/convert_range_for_to_while.rs b/crates/ide-assists/src/handlers/convert_range_for_to_while.rs index 7026b5bafd..ae8f626c5d 100644 --- a/crates/ide-assists/src/handlers/convert_range_for_to_while.rs +++ b/crates/ide-assists/src/handlers/convert_range_for_to_while.rs @@ -74,7 +74,7 @@ pub(crate) fn convert_range_for_to_while( let mut elements = vec![]; - let var_expr = make.expr_path(make.ident_path(&name.text())); + let var_expr = make.expr_path(make.ident_path(name.text())); let op = ast::BinaryOp::CmpOp(ast::CmpOp::Ord { ordering: ast::Ordering::Less, strict: !inclusive, diff --git a/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs b/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs index eb74e91075..0bb9bf12b1 100644 --- a/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs +++ b/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs @@ -194,7 +194,7 @@ fn process_struct_name_reference( let range = ctx.sema.original_range_opt(pat.syntax())?.range; let place = cover_edit_range(source.syntax(), range); let elements = vec![ - make.name_ref(&name.text()).syntax().clone().into(), + make.name_ref(name.text()).syntax().clone().into(), make.token(T![:]).into(), make.whitespace(" ").into(), ]; @@ -237,7 +237,7 @@ fn process_struct_name_reference( let range = ctx.sema.original_range_opt(expr.syntax())?.range; let place = cover_edit_range(source.syntax(), range); let elements = vec![ - make.name_ref(&name.text()).syntax().clone().into(), + make.name_ref(name.text()).syntax().clone().into(), make.token(T![:]).into(), make.whitespace(" ").into(), ]; diff --git a/crates/ide-assists/src/handlers/extract_function.rs b/crates/ide-assists/src/handlers/extract_function.rs index c2eb49dde5..46333ed726 100644 --- a/crates/ide-assists/src/handlers/extract_function.rs +++ b/crates/ide-assists/src/handlers/extract_function.rs @@ -934,7 +934,7 @@ impl FunctionBody { }; // FIXME: make trait arguments - let trait_name = trait_name.map(|name| make.ty_path(make.ident_path(&name.text())).into()); + let trait_name = trait_name.map(|name| make.ty_path(make.ident_path(name.text())).into()); let parent = self.parent()?; let parents = generic_parents(&parent); @@ -1561,7 +1561,7 @@ fn format_function<'db>( old_indent: IndentLevel, make: &SyntaxFactory, ) -> ast::Fn { - let fun_name = make.name(&fun.name.text()); + let fun_name = make.name(fun.name.text()); let params = fun.make_param_list(make, ctx, module, fun.mods.edition); let ret_ty = fun.make_ret_ty(make, ctx, module); let body = make_body(make, ctx, old_indent, fun); diff --git a/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs b/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs index 5e6e74bc94..c1ac4f1724 100644 --- a/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs +++ b/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs @@ -241,7 +241,7 @@ fn tag_generics_in_variant(ty: &ast::Type, generics: &mut [(ast::GenericParam, b if matches!(token.kind(), T![lifetime_ident]) => { if let Some(lt) = lt.lifetime() - && lt.text().as_str() == token.text() + && lt.text() == token.text() { *tag = true; tagged_one = true; @@ -250,18 +250,15 @@ fn tag_generics_in_variant(ty: &ast::Type, generics: &mut [(ast::GenericParam, b } param if matches!(token.kind(), T![ident]) => { if match param { - ast::GenericParam::ConstParam(konst) => konst - .name() - .map(|name| name.text().as_str() == token.text()) - .unwrap_or_default(), - ast::GenericParam::TypeParam(ty) => ty - .name() - .map(|name| name.text().as_str() == token.text()) - .unwrap_or_default(), - ast::GenericParam::LifetimeParam(lt) => lt - .lifetime() - .map(|lt| lt.text().as_str() == token.text()) - .unwrap_or_default(), + ast::GenericParam::ConstParam(konst) => { + konst.name().map(|name| name.text() == token.text()).unwrap_or_default() + } + ast::GenericParam::TypeParam(ty) => { + ty.name().map(|name| name.text() == token.text()).unwrap_or_default() + } + ast::GenericParam::LifetimeParam(lt) => { + lt.lifetime().map(|lt| lt.text() == token.text()).unwrap_or_default() + } } { *tag = true; tagged_one = true; @@ -338,7 +335,7 @@ fn update_variant( // FIXME: replace with a `ast::make` constructor let ty = match generic_args { Some(generic_args) => make.ty(&format!("{name}{generic_args}")), - None => make.ty(&name.text()), + None => make.ty(name.text()), }; // change from a record to a tuple field list diff --git a/crates/ide-assists/src/handlers/extract_type_alias.rs b/crates/ide-assists/src/handlers/extract_type_alias.rs index 329f8325b4..a378256b59 100644 --- a/crates/ide-assists/src/handlers/extract_type_alias.rs +++ b/crates/ide-assists/src/handlers/extract_type_alias.rs @@ -145,7 +145,7 @@ fn collect_used_generics<'gp>( .filter_map(|it| match it { ast::GenericArg::LifetimeArg(lt) => { let lt = lt.lifetime()?; - known_generics.iter().find(find_lifetime(<.text())) + known_generics.iter().find(find_lifetime(lt.text())) } _ => None, }), @@ -157,7 +157,7 @@ fn collect_used_generics<'gp>( generics.extend( it.bounds() .filter_map(|it| it.lifetime()) - .filter_map(|lt| known_generics.iter().find(find_lifetime(<.text()))), + .filter_map(|lt| known_generics.iter().find(find_lifetime(lt.text()))), ); } } @@ -166,13 +166,12 @@ fn collect_used_generics<'gp>( generics.extend( it.bounds() .filter_map(|it| it.lifetime()) - .filter_map(|lt| known_generics.iter().find(find_lifetime(<.text()))), + .filter_map(|lt| known_generics.iter().find(find_lifetime(lt.text()))), ); } } ast::Type::RefType(ref_) => generics.extend( - ref_.lifetime() - .and_then(|lt| known_generics.iter().find(find_lifetime(<.text()))), + ref_.lifetime().and_then(|lt| known_generics.iter().find(find_lifetime(lt.text()))), ), ast::Type::ArrayType(ar) => { if let Some(ast::Expr::PathExpr(p)) = ar.const_arg().and_then(|x| x.expr()) diff --git a/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs b/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs index acd98aed00..738f461a1f 100644 --- a/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs +++ b/crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs @@ -75,12 +75,12 @@ pub(crate) fn generate_blanket_trait_impl( |builder| { let editor = builder.make_editor(traitd.syntax()); let make = editor.make(); - let namety = make.ty_path(make.path_from_text(&name.text())); + let namety = make.ty_path(make.path_from_text(name.text())); let trait_where_clause = traitd.where_clause().map(|it| it.reset_indent()); let bounds = traitd.type_bound_list().and_then(|list| exclude_sized(make, list)); let is_unsafe = traitd.unsafe_token().is_some(); let thisname = this_name(make, &traitd); - let thisty = make.ty_path(make.path_from_text(&thisname.text())); + let thisty = make.ty_path(make.path_from_text(thisname.text())); let indent = traitd.indent_level(); let gendecl = make.generic_param_list([GenericParam::TypeParam(make.type_param( diff --git a/crates/ide-assists/src/handlers/generate_default_from_enum_variant.rs b/crates/ide-assists/src/handlers/generate_default_from_enum_variant.rs index 713d6a3fb7..07c191b0eb 100644 --- a/crates/ide-assists/src/handlers/generate_default_from_enum_variant.rs +++ b/crates/ide-assists/src/handlers/generate_default_from_enum_variant.rs @@ -76,7 +76,7 @@ pub(crate) fn generate_default_from_enum_variant( fn default_impl(variant_name: ast::Name, adt: &ast::Adt, make: &SyntaxFactory) -> ast::Impl { let impl_ = utils::generate_trait_impl_intransitive(make, adt, make.ty("Default")); - let fn_ = default_fn(&variant_name.text(), make); + let fn_ = default_fn(variant_name.text(), make); let (impl_editor, impl_) = SyntaxEditor::with_ast_node(&impl_); impl_ diff --git a/crates/ide-assists/src/handlers/generate_enum_is_method.rs b/crates/ide-assists/src/handlers/generate_enum_is_method.rs index 53e77b4947..5e2ee772b9 100644 --- a/crates/ide-assists/src/handlers/generate_enum_is_method.rs +++ b/crates/ide-assists/src/handlers/generate_enum_is_method.rs @@ -141,7 +141,7 @@ impl Method { }; let variant_name = variant.name()?; - let fn_name = format!("is_{}", to_lower_snake_case(&variant_name.text())); + let fn_name = format!("is_{}", to_lower_snake_case(variant_name.text())); Some(Method { pattern_suffix, fn_name, variant_name }) } } diff --git a/crates/ide-assists/src/handlers/generate_enum_projection_method.rs b/crates/ide-assists/src/handlers/generate_enum_projection_method.rs index 8a194ae02b..479143c133 100644 --- a/crates/ide-assists/src/handlers/generate_enum_projection_method.rs +++ b/crates/ide-assists/src/handlers/generate_enum_projection_method.rs @@ -219,7 +219,7 @@ impl Method { fn new(variant: &ast::Variant, fn_name_prefix: &str) -> Option<Self> { use itertools::Itertools as _; let variant_name = variant.name()?; - let fn_name = format!("{fn_name_prefix}_{}", to_lower_snake_case(&variant_name.text())); + let fn_name = format!("{fn_name_prefix}_{}", to_lower_snake_case(variant_name.text())); match variant.kind() { ast::StructKind::Record(record) => { diff --git a/crates/ide-assists/src/handlers/generate_enum_variant.rs b/crates/ide-assists/src/handlers/generate_enum_variant.rs index fb43e3eaa3..73837f486c 100644 --- a/crates/ide-assists/src/handlers/generate_enum_variant.rs +++ b/crates/ide-assists/src/handlers/generate_enum_variant.rs @@ -62,7 +62,7 @@ pub(crate) fn generate_enum_variant(acc: &mut Assists, ctx: &AssistContext<'_, ' let editor = builder.make_editor(enum_node.syntax()); let make = editor.make(); let field_list = parent.make_field_list(ctx, make); - let variant = make.variant(None, make.name(&name_ref.text()), field_list, None); + let variant = make.variant(None, make.name(name_ref.text()), field_list, None); if let Some(it) = enum_node.variant_list() { it.add_variant(&editor, &variant); } diff --git a/crates/ide-assists/src/handlers/generate_function.rs b/crates/ide-assists/src/handlers/generate_function.rs index 3c3fde80f9..13096c6efc 100644 --- a/crates/ide-assists/src/handlers/generate_function.rs +++ b/crates/ide-assists/src/handlers/generate_function.rs @@ -67,7 +67,7 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext<'_, '_>) -> Option<()> { return None; } - let fn_name = &*name_ref.text(); + let fn_name = name_ref.text(); let TargetInfo { target_module, adt_info, target, file } = fn_target_info(ctx, path, &call, fn_name)?; @@ -159,7 +159,7 @@ fn gen_method(acc: &mut Assists, ctx: &AssistContext<'_, '_>) -> Option<()> { let (impl_, file) = if let Some(impl_) = cursor_impl { (Some(impl_), ctx.vfs_file_id()) } else { - get_adt_source(ctx, &adt, fn_name.text().as_str())? + get_adt_source(ctx, &adt, fn_name.text())? }; let target = get_method_target(ctx, &impl_, &adt)?; @@ -269,7 +269,7 @@ impl FunctionBuilder { // If generated function has the name "new" and is an associated function, we generate fn body // as a constructor and assume a "Self" return type. if let Some(body) = - make_fn_body_as_new_function(make, ctx, &fn_name.text(), adt_info, target_edition) + make_fn_body_as_new_function(make, ctx, fn_name.text(), adt_info, target_edition) { ret_type = Some(make.ret_type(make.ty_path(make.ident_path("Self")).into())); should_focus_return_type = false; diff --git a/crates/ide-assists/src/handlers/generate_getter_or_setter.rs b/crates/ide-assists/src/handlers/generate_getter_or_setter.rs index 7e5d5cec71..b21e608762 100644 --- a/crates/ide-assists/src/handlers/generate_getter_or_setter.rs +++ b/crates/ide-assists/src/handlers/generate_getter_or_setter.rs @@ -225,7 +225,7 @@ fn generate_getter_from_info( ( make.ty_ref(record_field_info.field_ty.clone(), true), make.expr_ref( - make.expr_field(self_expr, &record_field_info.field_name.text()).into(), + make.expr_field(self_expr, record_field_info.field_name.text()).into(), true, ), ) @@ -250,7 +250,7 @@ fn generate_getter_from_info( make.expr_ref( make.expr_field( make.expr_path(make.ident_path("self")), - &record_field_info.field_name.text(), + record_field_info.field_name.text(), ) .into(), false, diff --git a/crates/ide-assists/src/handlers/generate_impl.rs b/crates/ide-assists/src/handlers/generate_impl.rs index ab0eb56fcf..ecff6267bb 100644 --- a/crates/ide-assists/src/handlers/generate_impl.rs +++ b/crates/ide-assists/src/handlers/generate_impl.rs @@ -185,7 +185,7 @@ pub(crate) fn generate_impl_trait(acc: &mut Assists, ctx: &AssistContext<'_, '_> None, None, false, - make.ty(&name.text()), + make.ty(name.text()), make.ty_placeholder(), None, None, diff --git a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs index fd095dd9b2..6858b62f8d 100644 --- a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs +++ b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs @@ -210,7 +210,7 @@ fn get_trait_mut(apply_trait: &hir::Trait, famous: FamousDefs<'_, '_>) -> Option } fn process_method_name(name: ast::Name) -> Option<(ast::Name, &'static str)> { - let new_name = match &*name.text() { + let new_name = match name.text() { "index" => "index_mut", "as_ref" => "as_mut", "borrow" => "borrow_mut", diff --git a/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs b/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs index d5629e2e7e..242712ff2e 100644 --- a/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs +++ b/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs @@ -4,14 +4,11 @@ use ide_db::{ RootDatabase, famous_defs::FamousDefs, helpers::mod_path_to_ast_with_factory, imports::import_assets::item_for_path_search, }; -use syntax::syntax_editor::{Position, SyntaxEditor}; -use syntax::{ - TokenText, - ast::{ - self, AstNode, HasAttrs, HasGenericParams, HasName, edit::AstNodeEdit, - syntax_factory::SyntaxFactory, - }, +use syntax::ast::{ + self, AstNode, HasAttrs, HasGenericParams, HasName, edit::AstNodeEdit, + syntax_factory::SyntaxFactory, }; +use syntax::syntax_editor::{Position, SyntaxEditor}; use crate::{ AssistId, @@ -71,8 +68,7 @@ pub(crate) fn generate_single_field_struct_from( return None; } - let main_field_name = - names.as_ref().map_or(TokenText::borrowed("value"), |names| names[main_field_i].text()); + let main_field_name = names.as_ref().map_or("value", |names| names[main_field_i].text()); let main_field_ty = types[main_field_i].clone(); acc.add( @@ -92,10 +88,10 @@ pub(crate) fn generate_single_field_struct_from( false, )); - let ty = make.ty(&strukt_name.text()); + let ty = make.ty(strukt_name.text()); let constructor = - make_adt_constructor(names.as_deref(), constructors, &main_field_name, make); + make_adt_constructor(names.as_deref(), constructors, main_field_name, make); let body = make.block_expr([], Some(constructor)); let fn_ = make @@ -108,7 +104,7 @@ pub(crate) fn generate_single_field_struct_from( make.param_list( None, [make.param( - make.path_pat(make.path_from_text(&main_field_name)), + make.path_pat(make.path_from_text(main_field_name)), main_field_ty, )], ), @@ -161,12 +157,12 @@ pub(crate) fn generate_single_field_struct_from( fn make_adt_constructor( names: Option<&[ast::Name]>, constructors: Vec<Option<ast::Expr>>, - main_field_name: &TokenText<'_>, + main_field_name: &str, make: &SyntaxFactory, ) -> ast::Expr { if let Some(names) = names { let fields = make.record_expr_field_list(names.iter().zip(constructors).map( - |(name, initializer)| make.record_expr_field(make.name_ref(&name.text()), initializer), + |(name, initializer)| make.record_expr_field(make.name_ref(name.text()), initializer), )); make.record_expr(make.path_from_text("Self"), fields).into() } else { diff --git a/crates/ide-assists/src/handlers/generate_trait_from_impl.rs b/crates/ide-assists/src/handlers/generate_trait_from_impl.rs index 12afd9ae6a..354447cf33 100644 --- a/crates/ide-assists/src/handlers/generate_trait_from_impl.rs +++ b/crates/ide-assists/src/handlers/generate_trait_from_impl.rs @@ -117,7 +117,7 @@ pub(crate) fn generate_trait_from_impl( let params = used_params(&impl_ast, make, ctx); let trait_ast = make.trait_( false, - &trait_name(&impl_assoc_items, make).text(), + trait_name(&impl_assoc_items, make).text(), params.clone(), impl_ast.where_clause(), trait_items, @@ -204,7 +204,7 @@ fn trait_name(items: &ast::AssocItemList, make: &SyntaxFactory) -> ast::Name { fn_names .next() .and_then(|name| { - fn_names.next().is_none().then(|| make.name(&stdx::to_camel_case(&name.text()))) + fn_names.next().is_none().then(|| make.name(&stdx::to_camel_case(name.text()))) }) .unwrap_or_else(|| make.name("NewTrait")) } diff --git a/crates/ide-assists/src/handlers/inline_type_alias.rs b/crates/ide-assists/src/handlers/inline_type_alias.rs index bb76e2743c..f5d5400404 100644 --- a/crates/ide-assists/src/handlers/inline_type_alias.rs +++ b/crates/ide-assists/src/handlers/inline_type_alias.rs @@ -140,7 +140,7 @@ pub(crate) fn inline_type_alias(acc: &mut Assists, ctx: &AssistContext<'_, '_>) let src = adt.source(ctx.db())?.value; let name = src.name()?; let generic_params = src.generic_param_list(); - let name_ref = make.name_ref(&name.text()); + let name_ref = make.name_ref(name.text()); let segment = match generic_params { Some(params) => { make.path_segment_generics(name_ref, params.to_generic_args(&make)) diff --git a/crates/ide-assists/src/handlers/merge_match_arms.rs b/crates/ide-assists/src/handlers/merge_match_arms.rs index f41769150c..5060886cfa 100644 --- a/crates/ide-assists/src/handlers/merge_match_arms.rs +++ b/crates/ide-assists/src/handlers/merge_match_arms.rs @@ -165,7 +165,7 @@ fn get_arm_types<'db>( { let pat_type = ctx.sema.type_of_binding_in_pat(ident_pat); - map.insert(name.text().to_string(), pat_type); + map.insert(name.text().to_owned(), pat_type); } } _ => (), diff --git a/crates/ide-assists/src/handlers/reorder_impl_items.rs b/crates/ide-assists/src/handlers/reorder_impl_items.rs index 658947abe1..ed5a372e54 100644 --- a/crates/ide-assists/src/handlers/reorder_impl_items.rs +++ b/crates/ide-assists/src/handlers/reorder_impl_items.rs @@ -82,7 +82,7 @@ pub(crate) fn reorder_impl_items(acc: &mut Assists, ctx: &AssistContext<'_, '_>) ast::AssocItem::MacroCall(_) => None, }; - name.and_then(|n| ranks.get(n.text().as_str().trim_start_matches("r#")).copied()) + name.and_then(|n| ranks.get(n.text().trim_start_matches("r#")).copied()) .unwrap_or(usize::MAX) }) .collect(); diff --git a/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs b/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs index 17ee8597c1..a414db0a6c 100644 --- a/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs +++ b/crates/ide-assists/src/handlers/replace_method_eager_lazy.rs @@ -39,7 +39,7 @@ pub(crate) fn replace_with_lazy_method( let (_, receiver_ty) = callable.receiver_param(ctx.sema.db)?; let n_params = callable.n_params() + 1; - let method_name_lazy = lazy_method_name(&method_name.text()); + let method_name_lazy = lazy_method_name(method_name.text()); receiver_ty.iterate_method_candidates_with_traits( ctx.sema.db, @@ -156,7 +156,7 @@ pub(crate) fn replace_with_eager_method( } let method_name_text = method_name.text(); - let method_name_eager = eager_method_name(&method_name_text)?; + let method_name_eager = eager_method_name(method_name_text)?; receiver_ty.iterate_method_candidates_with_traits( ctx.sema.db, diff --git a/crates/ide-assists/src/utils.rs b/crates/ide-assists/src/utils.rs index 670a030255..388aac19b4 100644 --- a/crates/ide-assists/src/utils.rs +++ b/crates/ide-assists/src/utils.rs @@ -344,7 +344,7 @@ fn invert_special_case(make: &SyntaxFactory, expr: &ast::Expr) -> Option<ast::Ex let method = mce.name_ref()?; let arg_list = mce.arg_list()?; - let method = match method.text().as_str() { + let method = match method.text() { "is_some" => "is_none", "is_none" => "is_some", "is_ok" => "is_err", @@ -550,7 +550,7 @@ fn has_any_fn(imp: &ast::Impl, names: &[String]) -> bool { for item in il.assoc_items() { if let ast::AssocItem::Fn(f) = item && let Some(name) = f.name() - && names.iter().any(|n| n.eq_ignore_ascii_case(&name.text())) + && names.iter().any(|n| n.eq_ignore_ascii_case(name.text())) { return true; } @@ -664,7 +664,7 @@ fn generate_impl_inner( .zip(generic_params.as_ref()) .and_then(|(trait_, params)| generic_param_associated_bounds(make, adt, trait_, params)); - let ty: ast::Type = make.ty_path(make.ident_path(&adt.name().unwrap().text())).into(); + let ty: ast::Type = make.ty_path(make.ident_path(adt.name().unwrap().text())).into(); let cfg_attrs = adt.attrs().filter(|attr| matches!(attr.meta(), Some(ast::Meta::CfgMeta(_)))); match trait_ { diff --git a/crates/ide-assists/src/utils/gen_trait_fn_body.rs b/crates/ide-assists/src/utils/gen_trait_fn_body.rs index c0ddcb950c..277b5bd8df 100644 --- a/crates/ide-assists/src/utils/gen_trait_fn_body.rs +++ b/crates/ide-assists/src/utils/gen_trait_fn_body.rs @@ -21,7 +21,7 @@ pub(crate) fn gen_trait_fn_body( trait_ref: Option<TraitRef<'_>>, ) -> Option<ast::BlockExpr> { let _ = func.body()?; - match trait_path.segment()?.name_ref()?.text().as_str() { + match trait_path.segment()?.name_ref()?.text() { "Clone" => { stdx::always!(func.name().is_some_and(|name| name.text() == "clone")); gen_clone_impl(make, adt) diff --git a/crates/ide-completion/src/completions/attribute.rs b/crates/ide-completion/src/completions/attribute.rs index 109ebce01c..c2d7cb98cf 100644 --- a/crates/ide-completion/src/completions/attribute.rs +++ b/crates/ide-completion/src/completions/attribute.rs @@ -40,7 +40,6 @@ pub(crate) fn complete_known_attribute_input( let path = attribute.path()?; let segments = path.segments().map(|s| s.name_ref()).collect::<Option<Vec<_>>>()?; let segments = segments.iter().map(|n| n.text()).collect::<Vec<_>>(); - let segments = segments.iter().map(|t| t.as_str()).collect::<Vec<_>>(); let tt = attribute.token_tree()?; match segments.as_slice() { diff --git a/crates/ide-completion/src/completions/attribute/repr.rs b/crates/ide-completion/src/completions/attribute/repr.rs index 63cddb365e..73ba847e7e 100644 --- a/crates/ide-completion/src/completions/attribute/repr.rs +++ b/crates/ide-completion/src/completions/attribute/repr.rs @@ -23,7 +23,7 @@ pub(super) fn complete_repr( }) .any(|it| { let text = it.text(); - lookup.unwrap_or(label) == text || collides.contains(&text.as_str()) + lookup.unwrap_or(label) == text || collides.contains(&text) }); if repr_already_annotated { continue; diff --git a/crates/ide-completion/src/completions/postfix.rs b/crates/ide-completion/src/completions/postfix.rs index 5a3a3ac39c..34b53e5e5b 100644 --- a/crates/ide-completion/src/completions/postfix.rs +++ b/crates/ide-completion/src/completions/postfix.rs @@ -365,7 +365,7 @@ fn suggest_receiver_name( match receiver { ast::Expr::PathExpr(path) => { if let Some(name) = path.path().and_then(|it| it.as_single_name_ref()) { - return placeholder(name.text().as_str()); + return placeholder(name.text()); } } ast::Expr::RefExpr(it) => { diff --git a/crates/ide-db/src/imports/import_assets.rs b/crates/ide-db/src/imports/import_assets.rs index f5dff47acf..422648c8d6 100644 --- a/crates/ide-db/src/imports/import_assets.rs +++ b/crates/ide-db/src/imports/import_assets.rs @@ -979,7 +979,7 @@ impl<'db> ImportCandidate<'db> { return None; } let after = std::iter::successors(path.parent_path(), |it| it.parent_path()) - .map(|seg| seg.segment()?.name_ref().map(|name| Name::new_root(&name.text()))) + .map(|seg| seg.segment()?.name_ref().map(|name| Name::new_root(name.text()))) .collect::<Option<_>>()?; path_import_candidate( sema, @@ -993,7 +993,7 @@ impl<'db> ImportCandidate<'db> { fn for_name(sema: &Semantics<'db, RootDatabase>, name: &ast::Name) -> Option<Self> { if sema .scope(name.syntax())? - .speculative_resolve(&make::ext::ident_path(&name.text())) + .speculative_resolve(&make::ext::ident_path(name.text())) .is_some() { return None; @@ -1033,7 +1033,7 @@ fn path_import_candidate<'db>( if qualifier.first_qualifier().is_none_or(|it| sema.resolve_path(&it).is_none()) { let qualifier = qualifier .segments() - .map(|seg| seg.name_ref().map(|name| Name::new_root(&name.text()))) + .map(|seg| seg.name_ref().map(|name| Name::new_root(name.text()))) .collect::<Option<Vec<_>>>()?; ImportCandidate::Path(PathImportCandidate { qualifier, diff --git a/crates/ide-db/src/imports/insert_use.rs b/crates/ide-db/src/imports/insert_use.rs index 27e3ed6bdb..0235389763 100644 --- a/crates/ide-db/src/imports/insert_use.rs +++ b/crates/ide-db/src/imports/insert_use.rs @@ -314,7 +314,7 @@ impl ImportGroup { PathSegmentKind::SelfKw => ImportGroup::ThisModule, PathSegmentKind::SuperKw => ImportGroup::SuperModule, PathSegmentKind::CrateKw => ImportGroup::ThisCrate, - PathSegmentKind::Name(name) => match name.text().as_str() { + PathSegmentKind::Name(name) => match name.text() { "std" => ImportGroup::Std, "core" => ImportGroup::Std, _ => ImportGroup::ExternCrate, diff --git a/crates/ide-db/src/imports/merge_imports.rs b/crates/ide-db/src/imports/merge_imports.rs index 59099056f5..f9251458fd 100644 --- a/crates/ide-db/src/imports/merge_imports.rs +++ b/crates/ide-db/src/imports/merge_imports.rs @@ -582,8 +582,8 @@ fn path_segment_cmp(a: &ast::PathSegment, b: &ast::PathSegment) -> Ordering { (Some(_), None) => Ordering::Greater, (None, Some(_)) => Ordering::Less, (Some(a_name), Some(b_name)) => { - let a_text = a_name.as_str().trim_start_matches("r#"); - let b_text = b_name.as_str().trim_start_matches("r#"); + let a_text = a_name.trim_start_matches("r#"); + let b_text = b_name.trim_start_matches("r#"); version_sort::version_sort(a_text, b_text) } } @@ -614,15 +614,13 @@ fn use_tree_cmp_by_tree_list_glob_or_alias( .name() .as_ref() .map(ast::Name::text) - .as_ref() - .map_or("_", |a_name| a_name.as_str().trim_start_matches("r#")) + .map_or("_", |a_name| a_name.trim_start_matches("r#")) .cmp( b_rename .name() .as_ref() .map(ast::Name::text) - .as_ref() - .map_or("_", |b_name| b_name.as_str().trim_start_matches("r#")), + .map_or("_", |b_name| b_name.trim_start_matches("r#")), ), }, }; diff --git a/crates/ide-db/src/path_transform.rs b/crates/ide-db/src/path_transform.rs index 101046cf54..ff32badd7f 100644 --- a/crates/ide-db/src/path_transform.rs +++ b/crates/ide-db/src/path_transform.rs @@ -536,7 +536,7 @@ impl Ctx<'_> { let name = ident_pat.name()?; let make = editor.make(); - let temp_path = make.path_from_text(&name.text()); + let temp_path = make.path_from_text(name.text()); let resolution = self.source_scope.speculative_resolve(&temp_path)?; @@ -651,7 +651,7 @@ fn find_trait_for_assoc_item( }); for name in names { - if assoc_item_name.as_str() == name.as_str() { + if assoc_item_name == name.as_str() { // It is fine to return the first match because in case of // multiple possibilities, the exact trait must be disambiguated // in the definition of trait being implemented, so this search diff --git a/crates/ide-db/src/ra_fixture.rs b/crates/ide-db/src/ra_fixture.rs index c8607a8099..09a270c143 100644 --- a/crates/ide-db/src/ra_fixture.rs +++ b/crates/ide-db/src/ra_fixture.rs @@ -102,8 +102,7 @@ impl RaFixtureAnalysis { else { return false; }; - segment1.text_non_mutable() == "rust_analyzer" - && segment2.text_non_mutable() == "rust_fixture" + segment1.text() == "rust_analyzer" && segment2.text() == "rust_fixture" }) }); if !has_rust_fixture_attr { diff --git a/crates/ide-db/src/rename.rs b/crates/ide-db/src/rename.rs index b89c2fdf4a..16224ae5ee 100644 --- a/crates/ide-db/src/rename.rs +++ b/crates/ide-db/src/rename.rs @@ -459,7 +459,7 @@ fn rename_field_constructors( }; expr.record_expr_field_list()?.fields().find_map(|record_field| { if record_field.name_ref().is_none() - && Name::new_root(&record_field.field_name()?.text()) == old_name + && Name::new_root(record_field.field_name()?.text()) == old_name && let ast::Expr::PathExpr(field_name) = record_field.expr()? { field_name.path() @@ -734,7 +734,7 @@ fn source_edit_from_def<'db>( // special cases required for renaming fields/locals in Record patterns if let Some(pat_field) = pat.syntax().parent().and_then(ast::RecordPatField::cast) { if let Some(name_ref) = pat_field.name_ref() { - if new_name.as_str() == name_ref.text().as_str().trim_start_matches("r#") + if new_name.as_str() == name_ref.text().trim_start_matches("r#") && pat.at_token().is_none() { // Foo { field: ref mut local } -> Foo { ref mut field } @@ -747,7 +747,7 @@ fn source_edit_from_def<'db>( .text_range() .cover_offset(pat.syntax().text_range().start()), ); - edit.replace(name_range, name_ref.text().to_string()); + edit.replace(name_range, name_ref.text().to_owned()); } else { // Foo { field: ref mut local @ local 2} -> Foo { field: ref mut new_name @ local2 } // Foo { field: ref mut local } -> Foo { field: ref mut new_name } diff --git a/crates/ide-db/src/search.rs b/crates/ide-db/src/search.rs index b688cb188d..6a492a5479 100644 --- a/crates/ide-db/src/search.rs +++ b/crates/ide-db/src/search.rs @@ -119,13 +119,13 @@ impl FileReferenceNode { _ => None, } } - pub fn text(&self) -> syntax::TokenText<'_> { + pub fn text(&self) -> &str { match self { FileReferenceNode::NameRef(name_ref) => name_ref.text(), FileReferenceNode::Name(name) => name.text(), FileReferenceNode::Lifetime(lifetime) => lifetime.text(), FileReferenceNode::FormatStringEntry(it, range) => { - syntax::TokenText::borrowed(&it.text()[*range - it.syntax().text_range().start()]) + &it.text()[*range - it.syntax().text_range().start()] } } } @@ -751,7 +751,7 @@ impl<'a, 'db> FindUsages<'a, 'db> { insert_type_alias( sema.db, &mut to_process, - name.text().as_str(), + name.text(), def.into(), ); } else { @@ -814,7 +814,7 @@ impl<'a, 'db> FindUsages<'a, 'db> { insert_type_alias( sema.db, &mut to_process, - name.text().as_str(), + name.text(), def.into(), ); } else { diff --git a/crates/ide-ssr/src/resolving.rs b/crates/ide-ssr/src/resolving.rs index 3dbba0ff2d..9d6079202a 100644 --- a/crates/ide-ssr/src/resolving.rs +++ b/crates/ide-ssr/src/resolving.rs @@ -155,7 +155,7 @@ impl<'db> Resolver<'_, 'db> { fn path_contains_placeholder(&self, path: &ast::Path) -> bool { if let Some(segment) = path.segment() && let Some(name_ref) = segment.name_ref() - && self.placeholders_by_stand_in.contains_key(name_ref.text().as_str()) + && self.placeholders_by_stand_in.contains_key(name_ref.text()) { return true; } diff --git a/crates/ide/src/doc_links.rs b/crates/ide/src/doc_links.rs index 70d05cd3b5..de8cf971da 100644 --- a/crates/ide/src/doc_links.rs +++ b/crates/ide/src/doc_links.rs @@ -282,7 +282,7 @@ pub(crate) fn token_as_doc_comment(doc_token: &SyntaxToken) -> Option<DocComment ast::Comment(comment) => TextSize::try_from(comment.prefix().len()).ok(), ast::String(string) => { doc_token.parent_ancestors().find_map(ast::Attr::cast).filter(|attr| attr.simple_name().as_deref() == Some("doc"))?; - if doc_token.parent_ancestors().find_map(ast::MacroCall::cast).filter(|mac| mac.path().and_then(|p| p.segment()?.name_ref()).as_ref().map(|n| n.text()).as_deref() == Some("include_str")).is_some() { + if doc_token.parent_ancestors().find_map(ast::MacroCall::cast).filter(|mac| mac.path().and_then(|p| p.segment()?.name_ref()).as_ref().map(|n| n.text()) == Some("include_str")).is_some() { return None; } string.open_quote_text_range().map(|it| it.len()) diff --git a/crates/ide/src/file_structure.rs b/crates/ide/src/file_structure.rs index 21254fc4d6..1a85342dc9 100644 --- a/crates/ide/src/file_structure.rs +++ b/crates/ide/src/file_structure.rs @@ -106,7 +106,7 @@ fn structure_node(node: &SyntaxNode, config: &FileStructureConfig) -> Option<Str Some(StructureNode { parent: None, - label: name.text().to_string(), + label: name.text().to_owned(), navigation_range: name.syntax().text_range(), node_range: node.syntax().text_range(), kind, diff --git a/crates/ide/src/inlay_hints/lifetime.rs b/crates/ide/src/inlay_hints/lifetime.rs index 7a8a6eb84a..89a2d9fa97 100644 --- a/crates/ide/src/inlay_hints/lifetime.rs +++ b/crates/ide/src/inlay_hints/lifetime.rs @@ -204,7 +204,7 @@ fn hints_( mut is_trivial: bool, ) -> Option<()> { let is_elided = |lt: &Option<ast::Lifetime>| match lt { - Some(lt) => matches!(lt.text().as_str(), "'_"), + Some(lt) => matches!(lt.text(), "'_"), None => true, }; let self_param = self_param.and_then(|it| { @@ -298,12 +298,12 @@ fn hints_( potential_lt_refs.for_each(|(name, ..)| { let name = match name { Some(it) if config.param_names_for_lifetime_elision_hints => { - if let Some(c) = used_names.get_mut(it.text().as_str()) { + if let Some(c) = used_names.get_mut(it.text()) { *c += 1; - format_smolstr!("'{}{c}", it.text().as_str()) + format_smolstr!("'{}{c}", it.text()) } else { - used_names.insert(it.text().as_str().into(), 0); - format_smolstr!("'{}", it.text().as_str()) + used_names.insert(it.text().into(), 0); + format_smolstr!("'{}", it.text()) } } _ => gen_idx_name(), @@ -316,7 +316,7 @@ fn hints_( let output = match potential_lt_refs.as_slice() { [(_, _, lifetime, _), ..] if self_param.is_some() || potential_lt_refs.len() == 1 => { match lifetime { - Some(lt) => match lt.text().as_str() { + Some(lt) => match lt.text() { "'_" => allocated_lifetimes.first().cloned(), "'static" => None, name => Some(name.into()), diff --git a/crates/ide/src/inlay_hints/param_name.rs b/crates/ide/src/inlay_hints/param_name.rs index 5da8f2e162..fcf1304d4b 100644 --- a/crates/ide/src/inlay_hints/param_name.rs +++ b/crates/ide/src/inlay_hints/param_name.rs @@ -294,7 +294,7 @@ pub(super) fn is_argument_similar_to_param_name( debug_assert!(!argument.is_empty()); debug_assert!(!param_name.is_empty()); let param_name = param_name.split('_'); - let argument = argument.iter().flat_map(|it| it.text_non_mutable().split('_')); + let argument = argument.iter().flat_map(|it| it.text().split('_')); let argument = argument.map(|it| it.strip_prefix("r#").unwrap_or(it)); let prefix_match = zip(argument.clone(), param_name.clone()) @@ -313,7 +313,7 @@ pub(super) fn get_segment_representation( let receiver = method_call_expr.receiver().and_then(|expr| get_segment_representation(&expr)); let name_ref = method_call_expr.name_ref()?; - if INSIGNIFICANT_METHOD_NAMES.contains(&name_ref.text().as_str()) { + if INSIGNIFICANT_METHOD_NAMES.contains(&name_ref.text()) { return receiver; } Some(Either::Left(match receiver { @@ -375,16 +375,16 @@ fn is_adt_constructor_similar_to_param_name( ) -> bool { (|| match sema.resolve_path(path)? { hir::PathResolution::Def(hir::ModuleDef::Adt(_)) => { - Some(to_lower_snake_case(&path.segment()?.name_ref()?.text()) == param_name) + Some(to_lower_snake_case(path.segment()?.name_ref()?.text()) == param_name) } hir::PathResolution::Def(hir::ModuleDef::Function(_) | hir::ModuleDef::EnumVariant(_)) => { - if to_lower_snake_case(&path.segment()?.name_ref()?.text()) == param_name { + if to_lower_snake_case(path.segment()?.name_ref()?.text()) == param_name { return Some(true); } let qual = path.qualifier()?; match sema.resolve_path(&qual)? { hir::PathResolution::Def(hir::ModuleDef::Adt(_)) => { - Some(to_lower_snake_case(&qual.segment()?.name_ref()?.text()) == param_name) + Some(to_lower_snake_case(qual.segment()?.name_ref()?.text()) == param_name) } _ => None, } diff --git a/crates/ide/src/navigation_target.rs b/crates/ide/src/navigation_target.rs index 125b2f495a..c3d620a357 100644 --- a/crates/ide/src/navigation_target.rs +++ b/crates/ide/src/navigation_target.rs @@ -190,7 +190,7 @@ impl NavigationTarget { kind: SymbolKind, ) -> UpmappingResult<NavigationTarget> { let name = - value.name().map(|it| Symbol::intern(&it.text())).unwrap_or_else(|| sym::underscore); + value.name().map(|it| Symbol::intern(it.text())).unwrap_or_else(|| sym::underscore); orig_range_with_focus(db, file_id, value.syntax(), value.name()).map( |(FileRange { file_id, range: full_range }, focus_range)| { diff --git a/crates/span/src/ast_id.rs b/crates/span/src/ast_id.rs index 83a6748c01..369f383dbb 100644 --- a/crates/span/src/ast_id.rs +++ b/crates/span/src/ast_id.rs @@ -381,8 +381,8 @@ fn impl_ast_id( let self_ty_name = type_as_name(node.self_ty()); let trait_name = type_as_name(node.trait_()); let data = ImplFileAstId { - self_ty_name: self_ty_name.as_ref().map(|it| it.text_non_mutable()), - trait_name: trait_name.as_ref().map(|it| it.text_non_mutable()), + self_ty_name: self_ty_name.as_ref().map(|it| it.text()), + trait_name: trait_name.as_ref().map(|it| it.text()), }; Some(index_map.new_id(ErasedFileAstIdKind::Impl, data)) } else { @@ -473,7 +473,7 @@ macro_rules! register_has_name_ast_id { $( ast::$ident(node) => { let name = node.$name_method(); - let name = name.as_ref().map_or("", |it| it.text_non_mutable()); + let name = name.as_ref().map_or("", |it| it.text()); let result = ErasedHasNameFileAstId { name, }; @@ -519,7 +519,7 @@ macro_rules! register_assoc_item_ast_id { $( ast::$ident(node) => { let name = $name_callback(node); - let name = name.as_ref().map_or("", |it| it.text_non_mutable()); + let name = name.as_ref().map_or("", |it| it.text()); let properties = ErasedHasNameFileAstId { name, }; diff --git a/crates/syntax/src/ast/edit.rs b/crates/syntax/src/ast/edit.rs index 080f9a7c6b..852b13fc7a 100644 --- a/crates/syntax/src/ast/edit.rs +++ b/crates/syntax/src/ast/edit.rs @@ -360,7 +360,7 @@ impl ast::RecordExprField { // shorthand `{ x }` → expand to `{ x: expr }` let new_field = editor .make() - .record_expr_field(editor.make().name_ref(&name_ref.text()), Some(expr)); + .record_expr_field(editor.make().name_ref(name_ref.text()), Some(expr)); editor.replace(self.syntax(), new_field.syntax()); } } diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index 1eb658f4b8..43bca6ed9e 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs @@ -3,7 +3,7 @@ //! //! These methods should only do simple, shallow tasks related to the syntax of the node itself. -use std::{borrow::Cow, fmt, iter::successors}; +use std::{fmt, iter::successors}; use itertools::Itertools; use parser::SyntaxKind; @@ -11,7 +11,7 @@ use rowan::{GreenNodeData, GreenTokenData}; use smallvec::{SmallVec, smallvec}; use crate::{ - NodeOrToken, SmolStr, SyntaxElement, SyntaxElementChildren, SyntaxToken, T, TokenText, + NodeOrToken, SmolStr, SyntaxElement, SyntaxElementChildren, SyntaxToken, T, ast::{ self, AstNode, AstToken, HasAttrs, HasGenericArgs, HasGenericParams, HasName, HasTypeBounds, SyntaxNode, support, @@ -22,41 +22,21 @@ use crate::{ use super::{GenericParam, RangeItem, RangeOp}; impl ast::Lifetime { - pub fn text(&self) -> TokenText<'_> { + pub fn text(&self) -> &str { text_of_first_token(self.syntax()) } } impl ast::Name { - pub fn text(&self) -> TokenText<'_> { + pub fn text(&self) -> &str { text_of_first_token(self.syntax()) } - pub fn text_non_mutable(&self) -> &str { - fn first_token(green_ref: &GreenNodeData) -> &GreenTokenData { - green_ref.children().next().and_then(NodeOrToken::into_token).unwrap() - } - - match self.syntax().green() { - Cow::Borrowed(green_ref) => first_token(green_ref).text(), - Cow::Owned(_) => unreachable!(), - } - } } impl ast::NameRef { - pub fn text(&self) -> TokenText<'_> { + pub fn text(&self) -> &str { text_of_first_token(self.syntax()) } - pub fn text_non_mutable(&self) -> &str { - fn first_token(green_ref: &GreenNodeData) -> &GreenTokenData { - green_ref.children().next().and_then(NodeOrToken::into_token).unwrap() - } - - match self.syntax().green() { - Cow::Borrowed(green_ref) => first_token(green_ref).text(), - Cow::Owned(_) => unreachable!(), - } - } pub fn as_tuple_field(&self) -> Option<usize> { self.text().parse().ok() @@ -67,15 +47,12 @@ impl ast::NameRef { } } -fn text_of_first_token(node: &SyntaxNode) -> TokenText<'_> { +fn text_of_first_token(node: &SyntaxNode) -> &str { fn first_token(green_ref: &GreenNodeData) -> &GreenTokenData { green_ref.children().next().and_then(NodeOrToken::into_token).unwrap() } - match node.green() { - Cow::Borrowed(green_ref) => TokenText::borrowed(first_token(green_ref).text()), - Cow::Owned(green) => TokenText::owned(first_token(&green).to_owned()), - } + first_token(node.green()).text() } fn into_comma(it: NodeOrToken<SyntaxNode, SyntaxToken>) -> Option<SyntaxToken> { @@ -619,7 +596,7 @@ impl NameLike { _ => None, } } - pub fn text(&self) -> TokenText<'_> { + pub fn text(&self) -> &str { match self { NameLike::NameRef(name_ref) => name_ref.text(), NameLike::Name(name) => name.text(), @@ -691,7 +668,7 @@ impl ast::AstNode for NameOrNameRef { } impl NameOrNameRef { - pub fn text(&self) -> TokenText<'_> { + pub fn text(&self) -> &str { match self { NameOrNameRef::Name(name) => name.text(), NameOrNameRef::NameRef(name_ref) => name_ref.text(), diff --git a/crates/syntax/src/lib.rs b/crates/syntax/src/lib.rs index 614678536a..204ebbd263 100644 --- a/crates/syntax/src/lib.rs +++ b/crates/syntax/src/lib.rs @@ -30,7 +30,6 @@ mod syntax_error; mod syntax_node; #[cfg(test)] mod tests; -mod token_text; mod validation; pub mod algo; @@ -54,7 +53,6 @@ pub use crate::{ PreorderWithTokens, RustLanguage, SyntaxElement, SyntaxElementChildren, SyntaxNode, SyntaxNodeChildren, SyntaxToken, SyntaxTreeBuilder, }, - token_text::TokenText, }; pub use parser::{Edition, SyntaxKind, T}; pub use rowan::{ diff --git a/crates/syntax/src/syntax_editor/edit_algo.rs b/crates/syntax/src/syntax_editor/edit_algo.rs index d24d9b1334..24e7016f5b 100644 --- a/crates/syntax/src/syntax_editor/edit_algo.rs +++ b/crates/syntax/src/syntax_editor/edit_algo.rs @@ -449,7 +449,7 @@ impl TreeState { let parent = parent_path.resolve(&self.root).and_then(SyntaxElement::into_node).unwrap(); let green = rowan::GreenNodeData::splice_children( - parent.green().as_ref(), + parent.green(), deleted.clone(), inserted.into_iter().map(PreparedElement::into_green), ); @@ -466,7 +466,7 @@ impl TreeState { let NodeOrToken::Node(node) = replacement.syntax else { panic!("root node replacement should be a node") }; - self.root = SyntaxNode::new_root(node.green().into_owned()); + self.root = SyntaxNode::new_root(node.green().to_owned()); self.changed.clear(); if track_as_changed { self.changed.push(SyntaxPath { child_indices: Vec::new() }); @@ -543,7 +543,7 @@ struct PreparedElement { impl PreparedElement { fn into_green(self) -> rowan::NodeOrToken<rowan::GreenNode, rowan::GreenToken> { match self.syntax { - SyntaxElement::Node(node) => NodeOrToken::Node(node.green().into_owned()), + SyntaxElement::Node(node) => NodeOrToken::Node(node.green().to_owned()), SyntaxElement::Token(token) => NodeOrToken::Token(token.green().to_owned()), } } diff --git a/crates/syntax/src/token_text.rs b/crates/syntax/src/token_text.rs deleted file mode 100644 index e69deb49ce..0000000000 --- a/crates/syntax/src/token_text.rs +++ /dev/null @@ -1,102 +0,0 @@ -//! Yet another version of owned string, backed by a syntax tree token. - -use std::{cmp::Ordering, fmt, ops}; - -use rowan::GreenToken; -use smol_str::SmolStr; - -pub struct TokenText<'a>(pub(crate) Repr<'a>); - -pub(crate) enum Repr<'a> { - Borrowed(&'a str), - Owned(GreenToken), -} - -impl<'a> TokenText<'a> { - pub fn borrowed(text: &'a str) -> Self { - TokenText(Repr::Borrowed(text)) - } - - pub(crate) fn owned(green: GreenToken) -> Self { - TokenText(Repr::Owned(green)) - } - - pub fn as_str(&self) -> &str { - match &self.0 { - &Repr::Borrowed(it) => it, - Repr::Owned(green) => green.text(), - } - } -} - -impl ops::Deref for TokenText<'_> { - type Target = str; - - fn deref(&self) -> &str { - self.as_str() - } -} -impl AsRef<str> for TokenText<'_> { - fn as_ref(&self) -> &str { - self.as_str() - } -} - -impl From<TokenText<'_>> for String { - fn from(token_text: TokenText<'_>) -> Self { - token_text.as_str().into() - } -} - -impl From<TokenText<'_>> for SmolStr { - fn from(token_text: TokenText<'_>) -> Self { - SmolStr::new(token_text.as_str()) - } -} - -impl PartialEq<&'_ str> for TokenText<'_> { - fn eq(&self, other: &&str) -> bool { - self.as_str() == *other - } -} -impl PartialEq<TokenText<'_>> for &'_ str { - fn eq(&self, other: &TokenText<'_>) -> bool { - other == self - } -} -impl PartialEq<String> for TokenText<'_> { - fn eq(&self, other: &String) -> bool { - self.as_str() == other.as_str() - } -} -impl PartialEq<TokenText<'_>> for String { - fn eq(&self, other: &TokenText<'_>) -> bool { - other == self - } -} -impl PartialEq for TokenText<'_> { - fn eq(&self, other: &TokenText<'_>) -> bool { - self.as_str() == other.as_str() - } -} -impl Eq for TokenText<'_> {} -impl Ord for TokenText<'_> { - fn cmp(&self, other: &Self) -> Ordering { - self.as_str().cmp(other.as_str()) - } -} -impl PartialOrd for TokenText<'_> { - fn partial_cmp(&self, other: &Self) -> Option<Ordering> { - Some(self.cmp(other)) - } -} -impl fmt::Display for TokenText<'_> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Display::fmt(self.as_str(), f) - } -} -impl fmt::Debug for TokenText<'_> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Debug::fmt(self.as_str(), f) - } -} |