let crate_id = crate_graph.add_crate_root(
file_id,
meta.edition,
- Some(crate_name.clone()),
+ Some(crate_name.clone().into()),
meta.cfg,
meta.env,
Default::default(),
crate_graph.add_crate_root(
crate_root,
Edition::Edition2018,
- Some(CrateName::new("test").unwrap()),
+ Some(CrateName::new("test").unwrap().into()),
default_cfg,
Env::default(),
Default::default(),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct CrateDisplayName(CrateName);
+pub struct CrateDisplayName {
+ // The name we use to display various paths (with `_`).
+ crate_name: CrateName,
+ // The name as specified in Cargo.toml (with `-`).
+ canonical_name: String,
+}
impl From<CrateName> for CrateDisplayName {
- fn from(inner: CrateName) -> CrateDisplayName {
- CrateDisplayName(inner)
+ fn from(crate_name: CrateName) -> CrateDisplayName {
+ let canonical_name = crate_name.to_string();
+ CrateDisplayName { crate_name, canonical_name }
}
}
impl fmt::Display for CrateDisplayName {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "{}", self.0)
+ write!(f, "{}", self.crate_name)
}
}
impl ops::Deref for CrateDisplayName {
type Target = str;
fn deref(&self) -> &str {
- &*self.0
+ &*self.crate_name
+ }
+}
+
+impl CrateDisplayName {
+ pub fn from_canonical_name(canonical_name: String) -> CrateDisplayName {
+ let crate_name = CrateName::normalize_dashes(&canonical_name);
+ CrateDisplayName { crate_name, canonical_name }
}
}
///
/// For purposes of analysis, crates are anonymous (only names in
/// `Dependency` matters), this name should only be used for UI.
- pub display_name: Option<CrateName>,
+ pub display_name: Option<CrateDisplayName>,
pub cfg_options: CfgOptions,
pub env: Env,
pub dependencies: Vec<Dependency>,
&mut self,
file_id: FileId,
edition: Edition,
- display_name: Option<CrateName>,
+ display_name: Option<CrateDisplayName>,
cfg_options: CfgOptions,
env: Env,
proc_macro: Vec<(SmolStr, Arc<dyn tt::TokenExpander>)>,
cancellation::Canceled,
change::Change,
input::{
- CrateData, CrateGraph, CrateId, CrateName, Dependency, Edition, Env, FileId, ProcMacroId,
- SourceRoot, SourceRootId,
+ CrateData, CrateDisplayName, CrateGraph, CrateId, CrateName, Dependency, Edition, Env,
+ FileId, ProcMacroId, SourceRoot, SourceRootId,
},
};
pub use salsa;
use std::{iter, sync::Arc};
use arrayvec::ArrayVec;
-use base_db::{CrateId, CrateName, Edition, FileId};
+use base_db::{CrateDisplayName, CrateId, Edition, FileId};
use either::Either;
use hir_def::find_path::PrefixKind;
use hir_def::{
db.crate_graph()[self.id].edition
}
- pub fn display_name(self, db: &dyn HirDatabase) -> Option<CrateName> {
+ pub fn display_name(self, db: &dyn HirDatabase) -> Option<CrateDisplayName> {
db.crate_graph()[self.id].display_name.clone()
}
use assists::utils::FamousDefs;
+use either::Either;
use hir::{known, HirDisplay, Semantics};
use ide_db::RootDatabase;
use stdx::to_lower_snake_case;
use syntax::{
- ast::{self, ArgListOwner, AstNode},
+ ast::{self, ArgListOwner, AstNode, NameOwner},
match_ast, Direction, NodeOrToken, SmolStr, SyntaxKind, TextRange, T,
};
use crate::FileId;
-use ast::NameOwner;
-use either::Either;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct InlayHintsConfig {
};
use anyhow::{bail, Context, Result};
-use base_db::{CrateGraph, CrateId, CrateName, Edition, Env, FileId};
+use base_db::{CrateDisplayName, CrateGraph, CrateId, CrateName, Edition, Env, FileId};
use cfg::CfgOptions;
use paths::{AbsPath, AbsPathBuf};
use rustc_hash::{FxHashMap, FxHashSet};
.map(|it| proc_macro_client.by_dylib_path(&it))
.unwrap_or_default();
+ let display_name =
+ CrateDisplayName::from_canonical_name(cargo[pkg].name.clone());
let crate_id = crate_graph.add_crate_root(
file_id,
edition,
- Some(CrateName::normalize_dashes(&cargo[pkg].name)),
+ Some(display_name),
cfg_options,
env,
proc_macro.clone(),
let crate_id = crate_graph.add_crate_root(
file_id,
Edition::Edition2018,
- Some(name),
+ Some(name.into()),
cfg_options.clone(),
env,
proc_macro,