Skip to content

Commit 77a447d

Browse files
bors[bot]cynecx
andauthored
Merge #8191
8191: syntax: return owned string instead of leaking string r=cynecx a=cynecx Quick hack? to alleviate #8181 (comment). I haven't run any tests but this should affect performance since we are deallocating more. r? @matklad Co-authored-by: cynecx <[email protected]>
2 parents 4ecaad9 + 5ff3299 commit 77a447d

File tree

16 files changed

+27
-27
lines changed

16 files changed

+27
-27
lines changed

crates/hir/src/semantics.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ impl<'db> SemanticsImpl<'db> {
445445
}
446446
};
447447
gpl.lifetime_params()
448-
.find(|tp| tp.lifetime().as_ref().map(|lt| lt.text()) == Some(text))
448+
.find(|tp| tp.lifetime().as_ref().map(|lt| lt.text()).as_ref() == Some(&text))
449449
})?;
450450
let src = self.find_file(lifetime_param.syntax().clone()).with_value(lifetime_param);
451451
ToDef::to_def(self, src)

crates/hir_expand/src/name.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ impl AsName for ast::NameRef {
7575
fn as_name(&self) -> Name {
7676
match self.as_tuple_field() {
7777
Some(idx) => Name::new_tuple_field(idx),
78-
None => Name::resolve(self.text()),
78+
None => Name::resolve(&self.text()),
7979
}
8080
}
8181
}
8282

8383
impl AsName for ast::Name {
8484
fn as_name(&self) -> Name {
85-
Name::resolve(self.text())
85+
Name::resolve(&self.text())
8686
}
8787
}
8888

crates/ide/src/diagnostics/fixes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ fn missing_record_expr_field_fix(
210210
}
211211
let new_field = make::record_field(
212212
None,
213-
make::name(record_expr_field.field_name()?.text()),
213+
make::name(&record_expr_field.field_name()?.text()),
214214
make::ty(&new_field_type.display_source_code(sema.db, module.into()).ok()?),
215215
);
216216

crates/ide/src/inlay_hints.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ fn get_string_representation(expr: &ast::Expr) -> Option<String> {
416416
match expr {
417417
ast::Expr::MethodCallExpr(method_call_expr) => {
418418
let name_ref = method_call_expr.name_ref()?;
419-
match name_ref.text() {
419+
match name_ref.text().as_str() {
420420
"clone" => method_call_expr.receiver().map(|rec| rec.to_string()),
421421
name_ref => Some(name_ref.to_owned()),
422422
}

crates/ide/src/syntax_highlighting/format.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ fn is_format_string(string: &ast::String) -> Option<()> {
3131
let parent = string.syntax().parent()?;
3232

3333
let name = parent.parent().and_then(ast::MacroCall::cast)?.path()?.segment()?.name_ref()?;
34-
if !matches!(name.text(), "format_args" | "format_args_nl") {
34+
if !matches!(name.text().as_str(), "format_args" | "format_args_nl") {
3535
return None;
3636
}
3737

crates/ide_assists/src/handlers/extract_struct_from_enum_variant.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ fn extract_struct_def(
195195

196196
fn update_variant(rewriter: &mut SyntaxRewriter, variant: &ast::Variant) -> Option<()> {
197197
let name = variant.name()?;
198-
let tuple_field = make::tuple_field(None, make::ty(name.text()));
198+
let tuple_field = make::tuple_field(None, make::ty(&name.text()));
199199
let replacement = make::variant(
200200
name,
201201
Some(ast::FieldList::TupleFieldList(make::tuple_field_list(iter::once(tuple_field)))),

crates/ide_assists/src/handlers/generate_enum_is_method.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub(crate) fn generate_enum_is_method(acc: &mut Assists, ctx: &AssistContext) ->
4444
};
4545

4646
let enum_lowercase_name = to_lower_snake_case(&parent_enum.name()?.to_string());
47-
let fn_name = format!("is_{}", &to_lower_snake_case(variant_name.text()));
47+
let fn_name = format!("is_{}", &to_lower_snake_case(&variant_name.text()));
4848

4949
// Return early if we've found an existing new fn
5050
let impl_def = find_struct_impl(&ctx, &parent_enum, &fn_name)?;

crates/ide_assists/src/handlers/generate_enum_projection_method.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ fn generate_enum_projection_method(
132132
ast::StructKind::Unit => return None,
133133
};
134134

135-
let fn_name = format!("{}_{}", props.fn_name_prefix, &to_lower_snake_case(variant_name.text()));
135+
let fn_name =
136+
format!("{}_{}", props.fn_name_prefix, &to_lower_snake_case(&variant_name.text()));
136137

137138
// Return early if we've found an existing new fn
138139
let impl_def = find_struct_impl(&ctx, &parent_enum, &fn_name)?;

crates/ide_assists/src/handlers/replace_derive_with_manual_impl.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ fn impl_def_from_trait(
165165
}
166166
let impl_def = make::impl_trait(
167167
trait_path.clone(),
168-
make::path_unqualified(make::path_segment(make::name_ref(annotated_name.text()))),
168+
make::path_unqualified(make::path_segment(make::name_ref(&annotated_name.text()))),
169169
);
170170
let (impl_def, first_assoc_item) =
171171
add_trait_assoc_items_to_impl(sema, trait_items, trait_, impl_def, target_scope);
@@ -178,12 +178,13 @@ fn update_attribute(
178178
trait_name: &ast::NameRef,
179179
attr: &ast::Attr,
180180
) {
181+
let trait_name = trait_name.text();
181182
let new_attr_input = input
182183
.syntax()
183184
.descendants_with_tokens()
184185
.filter(|t| t.kind() == IDENT)
185186
.filter_map(|t| t.into_token().map(|t| t.text().to_string()))
186-
.filter(|t| t != trait_name.text())
187+
.filter(|t| t != &trait_name)
187188
.collect::<Vec<_>>();
188189
let has_more_derives = !new_attr_input.is_empty();
189190

crates/ide_assists/src/utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ fn invert_special_case(sema: &Semantics<RootDatabase>, expr: &ast::Expr) -> Opti
246246
let method = mce.name_ref()?;
247247
let arg_list = mce.arg_list()?;
248248

249-
let method = match method.text() {
249+
let method = match method.text().as_str() {
250250
"is_some" => "is_none",
251251
"is_none" => "is_some",
252252
"is_ok" => "is_err",
@@ -442,7 +442,7 @@ fn generate_impl_text_inner(adt: &ast::Adt, trait_text: Option<&str>, code: &str
442442
buf.push_str(trait_text);
443443
buf.push_str(" for ");
444444
}
445-
buf.push_str(adt.name().unwrap().text());
445+
buf.push_str(&adt.name().unwrap().text());
446446
if let Some(generic_params) = generic_params {
447447
let lifetime_params = generic_params
448448
.lifetime_params()

crates/ide_db/src/defs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ impl NameRefClass {
343343
hir::AssocItem::TypeAlias(it) => Some(*it),
344344
_ => None,
345345
})
346-
.find(|alias| &alias.name(sema.db).to_string() == name_ref.text())
346+
.find(|alias| &alias.name(sema.db).to_string() == &name_ref.text())
347347
{
348348
return Some(NameRefClass::Definition(Definition::ModuleDef(
349349
ModuleDef::TypeAlias(ty),

crates/ide_db/src/helpers/import_assets.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ fn path_applicable_imports(
288288
import_for_item(
289289
sema.db,
290290
mod_path,
291-
unresolved_first_segment,
291+
&unresolved_first_segment,
292292
&unresolved_qualifier,
293293
item,
294294
)

crates/ide_db/src/helpers/insert_use.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ impl ImportGroup {
509509
PathSegmentKind::SelfKw => ImportGroup::ThisModule,
510510
PathSegmentKind::SuperKw => ImportGroup::SuperModule,
511511
PathSegmentKind::CrateKw => ImportGroup::ThisCrate,
512-
PathSegmentKind::Name(name) => match name.text() {
512+
PathSegmentKind::Name(name) => match name.text().as_str() {
513513
"std" => ImportGroup::Std,
514514
"core" => ImportGroup::Std,
515515
_ => ImportGroup::ExternCrate,

crates/ide_ssr/src/resolving.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ impl Resolver<'_, '_> {
150150
fn path_contains_placeholder(&self, path: &ast::Path) -> bool {
151151
if let Some(segment) = path.segment() {
152152
if let Some(name_ref) = segment.name_ref() {
153-
if self.placeholders_by_stand_in.contains_key(name_ref.text()) {
153+
if self.placeholders_by_stand_in.contains_key(name_ref.text().as_str()) {
154154
return true;
155155
}
156156
}

crates/syntax/src/ast/make.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,14 +268,14 @@ pub fn arg_list(args: impl IntoIterator<Item = ast::Expr>) -> ast::ArgList {
268268
}
269269

270270
pub fn ident_pat(name: ast::Name) -> ast::IdentPat {
271-
return from_text(name.text());
271+
return from_text(&name.text());
272272

273273
fn from_text(text: &str) -> ast::IdentPat {
274274
ast_from_text(&format!("fn f({}: ())", text))
275275
}
276276
}
277277
pub fn ident_mut_pat(name: ast::Name) -> ast::IdentPat {
278-
return from_text(name.text());
278+
return from_text(&name.text());
279279

280280
fn from_text(text: &str) -> ast::IdentPat {
281281
ast_from_text(&format!("fn f(mut {}: ())", text))

crates/syntax/src/ast/node_ext.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ use crate::{
1212
};
1313

1414
impl ast::Lifetime {
15-
pub fn text(&self) -> &str {
15+
pub fn text(&self) -> SmolStr {
1616
text_of_first_token(self.syntax())
1717
}
1818
}
1919

2020
impl ast::Name {
21-
pub fn text(&self) -> &str {
21+
pub fn text(&self) -> SmolStr {
2222
text_of_first_token(self.syntax())
2323
}
2424
}
2525

2626
impl ast::NameRef {
27-
pub fn text(&self) -> &str {
27+
pub fn text(&self) -> SmolStr {
2828
text_of_first_token(self.syntax())
2929
}
3030

@@ -33,10 +33,8 @@ impl ast::NameRef {
3333
}
3434
}
3535

36-
fn text_of_first_token(node: &SyntaxNode) -> &str {
37-
let t =
38-
node.green().children().next().and_then(|it| it.into_token()).unwrap().text().to_string();
39-
Box::leak(Box::new(t))
36+
fn text_of_first_token(node: &SyntaxNode) -> SmolStr {
37+
node.green().children().next().and_then(|it| it.into_token()).unwrap().text().into()
4038
}
4139

4240
pub enum Macro {
@@ -378,7 +376,7 @@ impl fmt::Display for NameOrNameRef {
378376
}
379377

380378
impl NameOrNameRef {
381-
pub fn text(&self) -> &str {
379+
pub fn text(&self) -> SmolStr {
382380
match self {
383381
NameOrNameRef::Name(name) => name.text(),
384382
NameOrNameRef::NameRef(name_ref) => name_ref.text(),

0 commit comments

Comments
 (0)