avoid some Symbol to String conversions

This commit is contained in:
Takayuki Maeda 2022-07-17 04:09:20 +09:00
parent 95e77648e4
commit c54d4ada26
18 changed files with 50 additions and 59 deletions

View file

@ -23,7 +23,7 @@
use rustc_mir_dataflow::move_paths::{InitKind, MoveOutIndex, MovePathIndex};
use rustc_span::hygiene::DesugaringKind;
use rustc_span::symbol::sym;
use rustc_span::{BytePos, Span};
use rustc_span::{BytePos, Span, Symbol};
use rustc_trait_selection::infer::InferCtxtExt;
use rustc_trait_selection::traits::TraitEngineExt as _;
@ -1227,8 +1227,7 @@ pub(crate) fn report_borrowed_value_does_not_live_long_enough(
from_closure: false,
region_name:
RegionName {
source:
RegionNameSource::AnonRegionFromUpvar(upvar_span, ref upvar_name),
source: RegionNameSource::AnonRegionFromUpvar(upvar_span, upvar_name),
..
},
span,
@ -1702,7 +1701,7 @@ fn report_escaping_data(
borrow_span: Span,
name: &Option<String>,
upvar_span: Span,
upvar_name: &str,
upvar_name: Symbol,
escape_span: Span,
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
let tcx = self.infcx.tcx;

View file

@ -12,7 +12,7 @@
};
use rustc_middle::ty::adjustment::PointerCast;
use rustc_middle::ty::{self, RegionVid, TyCtxt};
use rustc_span::symbol::Symbol;
use rustc_span::symbol::{kw, Symbol};
use rustc_span::{sym, DesugaringKind, Span};
use crate::region_infer::BlameConstraint;
@ -282,7 +282,7 @@ pub(crate) fn add_lifetime_bound_suggestion_to_diagnostic(
) {
if let ConstraintCategory::OpaqueType = category {
let suggestable_name =
if region_name.was_named() { region_name.to_string() } else { "'_".to_string() };
if region_name.was_named() { region_name.name } else { kw::UnderscoreLifetime };
let msg = format!(
"you can add a bound to the {}to make it last less than `'static` and match `{}`",

View file

@ -19,8 +19,7 @@
use rustc_middle::ty::Region;
use rustc_middle::ty::TypeVisitor;
use rustc_middle::ty::{self, RegionVid, Ty};
use rustc_span::symbol::sym;
use rustc_span::symbol::Ident;
use rustc_span::symbol::{kw, sym, Ident};
use rustc_span::Span;
use crate::borrowck_errors;
@ -758,7 +757,7 @@ fn add_static_impl_trait_suggestion(
return;
};
let lifetime = if f.has_name() { fr_name.to_string() } else { "'_".to_string() };
let lifetime = if f.has_name() { fr_name.name } else { kw::UnderscoreLifetime };
let arg = match param.param.pat.simple_ident() {
Some(simple_ident) => format!("argument `{}`", simple_ident),
@ -770,7 +769,7 @@ fn add_static_impl_trait_suggestion(
self.infcx.tcx,
diag,
fn_returns,
lifetime,
lifetime.to_string(),
Some(arg),
captures,
Some((param.param_ty_span, param.param_ty.to_string())),

View file

@ -34,13 +34,13 @@ pub(crate) enum RegionNameSource {
/// The `'static` region.
Static,
/// The free region corresponding to the environment of a closure.
SynthesizedFreeEnvRegion(Span, String),
SynthesizedFreeEnvRegion(Span, &'static str),
/// The region corresponding to an argument.
AnonRegionFromArgument(RegionNameHighlight),
/// The region corresponding to a closure upvar.
AnonRegionFromUpvar(Span, String),
AnonRegionFromUpvar(Span, Symbol),
/// The region corresponding to the return type of a closure.
AnonRegionFromOutput(RegionNameHighlight, String),
AnonRegionFromOutput(RegionNameHighlight, &'static str),
/// The region from a type yielded by a generator.
AnonRegionFromYieldTy(Span, String),
/// An anonymous region from an async fn.
@ -110,7 +110,7 @@ pub(crate) fn highlight_region_name(&self, diag: &mut Diagnostic) {
}
RegionNameSource::SynthesizedFreeEnvRegion(span, note) => {
diag.span_label(*span, format!("lifetime `{self}` represents this closure's body"));
diag.note(note);
diag.note(*note);
}
RegionNameSource::AnonRegionFromArgument(RegionNameHighlight::CannotMatchHirTy(
span,
@ -350,10 +350,7 @@ fn give_name_from_error_region(&self, fr: RegionVid) -> Option<RegionName> {
Some(RegionName {
name: region_name,
source: RegionNameSource::SynthesizedFreeEnvRegion(
fn_decl_span,
note.to_string(),
),
source: RegionNameSource::SynthesizedFreeEnvRegion(fn_decl_span, note),
})
}
@ -678,7 +675,7 @@ fn give_name_if_anonymous_region_appears_in_upvars(&self, fr: RegionVid) -> Opti
Some(RegionName {
name: region_name,
source: RegionNameSource::AnonRegionFromUpvar(upvar_span, upvar_name.to_string()),
source: RegionNameSource::AnonRegionFromUpvar(upvar_span, upvar_name),
})
}
@ -756,7 +753,7 @@ fn give_name_if_anonymous_region_appears_in_output(&self, fr: RegionVid) -> Opti
Some(RegionName {
name: self.synthesize_region_name(),
source: RegionNameSource::AnonRegionFromOutput(highlight, mir_description.to_string()),
source: RegionNameSource::AnonRegionFromOutput(highlight, mir_description),
})
}

View file

@ -496,7 +496,7 @@ pub fn note_expected_found_extra(
self
}
pub fn note_trait_signature(&mut self, name: String, signature: String) -> &mut Self {
pub fn note_trait_signature(&mut self, name: Symbol, signature: String) -> &mut Self {
self.highlighted_note(vec![
(format!("`{}` from trait: `", name), Style::NoStyle),
(signature, Style::Highlight),

View file

@ -218,10 +218,9 @@ pub fn default_submod_path<'a>(
""
};
let mod_name = ident.name.to_string();
let default_path_str = format!("{}{}.rs", relative_prefix, mod_name);
let default_path_str = format!("{}{}.rs", relative_prefix, ident.name);
let secondary_path_str =
format!("{}{}{}mod.rs", relative_prefix, mod_name, path::MAIN_SEPARATOR);
format!("{}{}{}mod.rs", relative_prefix, ident.name, path::MAIN_SEPARATOR);
let default_path = dir_path.join(&default_path_str);
let secondary_path = dir_path.join(&secondary_path_str);
let default_exists = sess.source_map().file_exists(&default_path);

View file

@ -138,7 +138,7 @@ fn fmt_printer<'a, 'tcx>(infcx: &'a InferCtxt<'_, 'tcx>, ns: Namespace) -> FmtPr
if let TypeVariableOriginKind::TypeParameterDefinition(name, _) =
infcx.inner.borrow_mut().type_variables().var_origin(ty_vid).kind
{
Some(name.to_string())
Some(name)
} else {
None
}
@ -151,7 +151,7 @@ fn fmt_printer<'a, 'tcx>(infcx: &'a InferCtxt<'_, 'tcx>, ns: Namespace) -> FmtPr
if let ConstVariableOriginKind::ConstParameterDefinition(name, _) =
infcx.inner.borrow_mut().const_unification_table().probe_value(ct_vid).origin.kind
{
return Some(name.to_string());
return Some(name);
} else {
None
}

View file

@ -1958,7 +1958,7 @@ fn record_layout_for_printing_outlined(&self, layout: TyAndLayout<'tcx>) {
min_size = field_end;
}
FieldInfo {
name: name.to_string(),
name,
offset: offset.bytes(),
size: field_layout.size.bytes(),
align: field_layout.align.abi.bytes(),
@ -1967,7 +1967,7 @@ fn record_layout_for_printing_outlined(&self, layout: TyAndLayout<'tcx>) {
.collect();
VariantInfo {
name: n.map(|n| n.to_string()),
name: n,
kind: if layout.is_unsized() { SizeKind::Min } else { SizeKind::Exact },
align: layout.align.abi.bytes(),
size: if min_size.bytes() == 0 { layout.size.bytes() } else { min_size.bytes() },

View file

@ -1030,11 +1030,11 @@ fn pretty_print_bound_var(
}
}
fn ty_infer_name(&self, _: ty::TyVid) -> Option<String> {
fn ty_infer_name(&self, _: ty::TyVid) -> Option<Symbol> {
None
}
fn const_infer_name(&self, _: ty::ConstVid<'tcx>) -> Option<String> {
fn const_infer_name(&self, _: ty::ConstVid<'tcx>) -> Option<Symbol> {
None
}
@ -1550,8 +1550,8 @@ pub struct FmtPrinterData<'a, 'tcx> {
pub region_highlight_mode: RegionHighlightMode<'tcx>,
pub ty_infer_name_resolver: Option<Box<dyn Fn(ty::TyVid) -> Option<String> + 'a>>,
pub const_infer_name_resolver: Option<Box<dyn Fn(ty::ConstVid<'tcx>) -> Option<String> + 'a>>,
pub ty_infer_name_resolver: Option<Box<dyn Fn(ty::TyVid) -> Option<Symbol> + 'a>>,
pub const_infer_name_resolver: Option<Box<dyn Fn(ty::ConstVid<'tcx>) -> Option<Symbol> + 'a>>,
}
impl<'a, 'tcx> Deref for FmtPrinter<'a, 'tcx> {
@ -1841,11 +1841,11 @@ fn path_generic_args(
}
impl<'tcx> PrettyPrinter<'tcx> for FmtPrinter<'_, 'tcx> {
fn ty_infer_name(&self, id: ty::TyVid) -> Option<String> {
fn ty_infer_name(&self, id: ty::TyVid) -> Option<Symbol> {
self.0.ty_infer_name_resolver.as_ref().and_then(|func| func(id))
}
fn const_infer_name(&self, id: ty::ConstVid<'tcx>) -> Option<String> {
fn const_infer_name(&self, id: ty::ConstVid<'tcx>) -> Option<Symbol> {
self.0.const_infer_name_resolver.as_ref().and_then(|func| func(id))
}

View file

@ -1,11 +1,12 @@
use rustc_data_structures::fx::FxHashSet;
use rustc_data_structures::sync::Lock;
use rustc_span::Symbol;
use rustc_target::abi::{Align, Size};
use std::cmp::{self, Ordering};
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
pub struct VariantInfo {
pub name: Option<String>,
pub name: Option<Symbol>,
pub kind: SizeKind,
pub size: u64,
pub align: u64,
@ -20,7 +21,7 @@ pub enum SizeKind {
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
pub struct FieldInfo {
pub name: String,
pub name: Symbol,
pub offset: u64,
pub size: u64,
pub align: u64,
@ -119,7 +120,7 @@ pub fn print_type_sizes(&self) {
let VariantInfo { ref name, kind: _, align: _, size, ref fields } = *variant_info;
let indent = if !struct_like {
let name = match name.as_ref() {
Some(name) => name.to_owned(),
Some(name) => name.to_string(),
None => i.to_string(),
};
println!(

View file

@ -2489,7 +2489,7 @@ pub fn res_to_ty(
concrete type's name `{type_name}` instead if you want to \
specify its type parameters"
),
type_name.to_string(),
type_name,
Applicability::MaybeIncorrect,
);
}

View file

@ -546,7 +546,7 @@ fn compare_self_type<'tcx>(
if let Some(span) = tcx.hir().span_if_local(trait_m.def_id) {
err.span_label(span, format!("trait method declared without `{self_descr}`"));
} else {
err.note_trait_signature(trait_m.name.to_string(), trait_m.signature(tcx));
err.note_trait_signature(trait_m.name, trait_m.signature(tcx));
}
let reported = err.emit();
return Err(reported);
@ -566,7 +566,7 @@ fn compare_self_type<'tcx>(
if let Some(span) = tcx.hir().span_if_local(trait_m.def_id) {
err.span_label(span, format!("`{self_descr}` used in trait"));
} else {
err.note_trait_signature(trait_m.name.to_string(), trait_m.signature(tcx));
err.note_trait_signature(trait_m.name, trait_m.signature(tcx));
}
let reported = err.emit();
return Err(reported);
@ -805,7 +805,7 @@ fn compare_number_of_method_arguments<'tcx>(
),
);
} else {
err.note_trait_signature(trait_m.name.to_string(), trait_m.signature(tcx));
err.note_trait_signature(trait_m.name, trait_m.signature(tcx));
}
err.span_label(
impl_span,

View file

@ -1873,7 +1873,7 @@ fn report_private_fields(
let remaining_private_fields_len = remaining_private_fields.len();
let names = match &remaining_private_fields
.iter()
.map(|(name, _, _)| name.to_string())
.map(|(name, _, _)| name)
.collect::<Vec<_>>()[..]
{
_ if remaining_private_fields_len > 6 => String::new(),

View file

@ -19,6 +19,7 @@
use rustc_middle::ty::ToPolyTraitRef;
use rustc_middle::ty::{self, DefIdTree, ToPredicate, Ty, TyCtxt, TypeVisitable};
use rustc_span::symbol::{kw, sym, Ident};
use rustc_span::Symbol;
use rustc_span::{lev_distance, source_map, ExpnKind, FileName, MacroKind, Span};
use rustc_trait_selection::traits::error_reporting::on_unimplemented::InferCtxtExt as _;
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
@ -1548,7 +1549,7 @@ fn suggest_derive(
Option<ObligationCause<'tcx>>,
)],
) {
let mut derives = Vec::<(String, Span, String)>::new();
let mut derives = Vec::<(String, Span, Symbol)>::new();
let mut traits = Vec::<Span>::new();
for (pred, _, _) in unsatisfied_predicates {
let ty::PredicateKind::Trait(trait_pred) = pred.kind().skip_binder() else { continue };
@ -1581,12 +1582,12 @@ fn suggest_derive(
derives.push((
self_name.clone(),
self_span,
parent_diagnostic_name.to_string(),
parent_diagnostic_name,
));
}
}
}
derives.push((self_name, self_span, diagnostic_name.to_string()));
derives.push((self_name, self_span, diagnostic_name));
} else {
traits.push(self.tcx.def_span(trait_pred.def_id()));
}
@ -1609,7 +1610,7 @@ fn suggest_derive(
continue;
}
}
derives_grouped.push((self_name, self_span, trait_name));
derives_grouped.push((self_name, self_span, trait_name.to_string()));
}
let len = traits.len();

View file

@ -17,7 +17,7 @@
use rustc_hir::def_id::LocalDefId;
use rustc_middle::ty::query::Providers;
use rustc_middle::ty::{self, TyCtxt, TypeVisitable};
use rustc_span::Span;
use rustc_span::{Span, Symbol};
use std::collections::hash_map::Entry::{Occupied, Vacant};
@ -123,12 +123,7 @@ fn enforce_impl_params_are_constrained(tcx: TyCtxt<'_>, impl_def_id: LocalDefId)
ty::GenericParamDefKind::Type { .. } => {
let param_ty = ty::ParamTy::for_def(param);
if !input_parameters.contains(&cgp::Parameter::from(param_ty)) {
report_unused_parameter(
tcx,
tcx.def_span(param.def_id),
"type",
&param_ty.to_string(),
);
report_unused_parameter(tcx, tcx.def_span(param.def_id), "type", param_ty.name);
}
}
ty::GenericParamDefKind::Lifetime => {
@ -140,7 +135,7 @@ fn enforce_impl_params_are_constrained(tcx: TyCtxt<'_>, impl_def_id: LocalDefId)
tcx,
tcx.def_span(param.def_id),
"lifetime",
&param.name.to_string(),
param.name,
);
}
}
@ -151,7 +146,7 @@ fn enforce_impl_params_are_constrained(tcx: TyCtxt<'_>, impl_def_id: LocalDefId)
tcx,
tcx.def_span(param.def_id),
"const",
&param_ct.to_string(),
param_ct.name,
);
}
}
@ -178,7 +173,7 @@ fn enforce_impl_params_are_constrained(tcx: TyCtxt<'_>, impl_def_id: LocalDefId)
// used elsewhere are not projected back out.
}
fn report_unused_parameter(tcx: TyCtxt<'_>, span: Span, kind: &str, name: &str) {
fn report_unused_parameter(tcx: TyCtxt<'_>, span: Span, kind: &str, name: Symbol) {
let mut err = struct_span_err!(
tcx.sess,
span,

View file

@ -82,7 +82,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
then {
let is_new_string = match value.kind {
ExprKind::Binary(..) => true,
ExprKind::MethodCall(path, ..) => path.ident.name.as_str() == "to_string",
ExprKind::MethodCall(path, ..) => path.ident.name == sym::to_string,
_ => false,
};
let sugg = if format_args.format_string_span.contains(value.span) {

View file

@ -98,7 +98,7 @@ fn check_impl_item(&mut self, cx: &LateContext<'tcx>, impl_item: &'tcx ImplItem<
if_chain! {
// Check if item is a method, called to_string and has a parameter 'self'
if let ImplItemKind::Fn(ref signature, _) = impl_item.kind;
if impl_item.ident.name.as_str() == "to_string";
if impl_item.ident.name == sym::to_string;
let decl = &signature.decl;
if decl.implicit_self.has_implicit_self();
if decl.inputs.len() == 1;

View file

@ -427,5 +427,5 @@ fn is_cow_into_owned(cx: &LateContext<'_>, method_name: Symbol, method_def_id: D
/// Returns true if the named method is `ToString::to_string`.
fn is_to_string(cx: &LateContext<'_>, method_name: Symbol, method_def_id: DefId) -> bool {
method_name.as_str() == "to_string" && is_diag_trait_item(cx, method_def_id, sym::ToString)
method_name == sym::to_string && is_diag_trait_item(cx, method_def_id, sym::ToString)
}