mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 20:43:21 +00:00
Use CrateName for semantic names
This commit is contained in:
parent
e336a96998
commit
307c6fec61
5 changed files with 30 additions and 14 deletions
|
@ -94,6 +94,13 @@ impl fmt::Display for CrateName {
|
|||
}
|
||||
}
|
||||
|
||||
impl ops::Deref for CrateName {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&*self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||
pub struct ProcMacroId(pub u32);
|
||||
|
||||
|
@ -138,7 +145,7 @@ pub struct Env {
|
|||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct Dependency {
|
||||
pub crate_id: CrateId,
|
||||
pub name: SmolStr,
|
||||
pub name: CrateName,
|
||||
}
|
||||
|
||||
impl CrateGraph {
|
||||
|
@ -178,7 +185,7 @@ impl CrateGraph {
|
|||
if self.dfs_find(from, to, &mut FxHashSet::default()) {
|
||||
return Err(CyclicDependenciesError);
|
||||
}
|
||||
self.arena.get_mut(&from).unwrap().add_dep(name.0, to);
|
||||
self.arena.get_mut(&from).unwrap().add_dep(name, to);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -247,7 +254,7 @@ impl CrateId {
|
|||
}
|
||||
|
||||
impl CrateData {
|
||||
fn add_dep(&mut self, name: SmolStr, crate_id: CrateId) {
|
||||
fn add_dep(&mut self, name: CrateName, crate_id: CrateId) {
|
||||
self.dependencies.push(Dependency { name, crate_id })
|
||||
}
|
||||
}
|
||||
|
@ -429,7 +436,10 @@ mod tests {
|
|||
.is_ok());
|
||||
assert_eq!(
|
||||
graph[crate1].dependencies,
|
||||
vec![Dependency { crate_id: crate2, name: "crate_name_with_dashes".into() }]
|
||||
vec![Dependency {
|
||||
crate_id: crate2,
|
||||
name: CrateName::new("crate_name_with_dashes").unwrap()
|
||||
}]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -161,7 +161,7 @@ fn find_builtin_crate(db: &dyn AstDatabase, id: LazyMacroId) -> tt::TokenTree {
|
|||
// XXX
|
||||
// All crates except core itself should have a dependency on core,
|
||||
// We detect `core` by seeing whether it doesn't have such a dependency.
|
||||
let tt = if cg[krate].dependencies.iter().any(|dep| dep.name == "core") {
|
||||
let tt = if cg[krate].dependencies.iter().any(|dep| &*dep.name == "core") {
|
||||
quote! { core }
|
||||
} else {
|
||||
quote! { crate }
|
||||
|
|
|
@ -117,7 +117,7 @@ impl AsName for ast::FieldKind {
|
|||
|
||||
impl AsName for ra_db::Dependency {
|
||||
fn as_name(&self) -> Name {
|
||||
Name::new_text(self.name.clone())
|
||||
Name::new_text(SmolStr::new(&*self.name))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -288,10 +288,7 @@ impl ProjectWorkspace {
|
|||
if let (Some(&from), Some(&to)) =
|
||||
(crates.get(&from_crate_id), crates.get(&to_crate_id))
|
||||
{
|
||||
if crate_graph
|
||||
.add_dep(from, CrateName::new(&dep.name).unwrap(), to)
|
||||
.is_err()
|
||||
{
|
||||
if crate_graph.add_dep(from, dep.name.clone(), to).is_err() {
|
||||
log::error!(
|
||||
"cyclic dependency {:?} -> {:?}",
|
||||
from_crate_id,
|
||||
|
|
|
@ -4,9 +4,9 @@ use std::path::PathBuf;
|
|||
|
||||
use paths::{AbsPath, AbsPathBuf};
|
||||
use ra_cfg::CfgOptions;
|
||||
use ra_db::{CrateId, Dependency, Edition};
|
||||
use ra_db::{CrateId, CrateName, Dependency, Edition};
|
||||
use rustc_hash::FxHashSet;
|
||||
use serde::Deserialize;
|
||||
use serde::{de, Deserialize};
|
||||
use stdx::split_delim;
|
||||
|
||||
/// Roots and crates that compose this Rust project.
|
||||
|
@ -50,7 +50,7 @@ impl ProjectJson {
|
|||
.into_iter()
|
||||
.map(|dep_data| Dependency {
|
||||
crate_id: CrateId(dep_data.krate as u32),
|
||||
name: dep_data.name.into(),
|
||||
name: dep_data.name,
|
||||
})
|
||||
.collect::<Vec<_>>(),
|
||||
cfg: {
|
||||
|
@ -113,5 +113,14 @@ struct DepData {
|
|||
/// Identifies a crate by position in the crates array.
|
||||
#[serde(rename = "crate")]
|
||||
krate: usize,
|
||||
name: String,
|
||||
#[serde(deserialize_with = "deserialize_crate_name")]
|
||||
name: CrateName,
|
||||
}
|
||||
|
||||
fn deserialize_crate_name<'de, D>(de: D) -> Result<CrateName, D::Error>
|
||||
where
|
||||
D: de::Deserializer<'de>,
|
||||
{
|
||||
let name = String::deserialize(de)?;
|
||||
CrateName::new(&name).map_err(|err| de::Error::custom(format!("invalid crate name: {:?}", err)))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue