Skip to content
This repository was archived by the owner on Mar 1, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rls-data"
version = "0.11.0"
version = "0.12.0"
authors = ["Nick Cameron <[email protected]>"]
description = "Data structures used by the RLS and Rust compiler"
license = "Apache-2.0/MIT"
Expand Down
19 changes: 16 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,15 @@ pub struct Id {
pub index: u32,
}

/// This represents a globally unique crate identifier, which should allow
/// for differentiation between different crate targets or versions and should
/// point to the same crate when pulled by different other, dependent crates.
#[derive(Debug, Clone, RustcDecodable, RustcEncodable, PartialEq, Eq, Hash)]
pub struct GlobalCrateId {
pub name: String,
pub disambiguator: String,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you document what the disambiguator looks like please? What are the valid values?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nrc so the disambiguator was changed internally from a hex-string to a 128 bit number (Fingerprint(u64, u64), here), as it was effectively a hex-formatted 128 bit value in a string.
Should I change it to use a u128 or (u64, u64) here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I couldn't see where Fingerprint was defined. Ideally, you would use FingerPrint here, but that would probably mean pulling it into rls-data which might not be practical. If FingerPrint is defined as (u64, u64) then I'd use that, otherwise u128.

}

#[derive(Debug, Clone, RustcDecodable, RustcEncodable)]
pub struct SpanData {
pub file_name: PathBuf,
Expand All @@ -95,7 +104,7 @@ pub struct SpanData {

#[derive(Debug, Clone, RustcDecodable, RustcEncodable)]
pub struct CratePreludeData {
pub crate_name: String,
pub crate_id: GlobalCrateId,
pub crate_root: String,
pub external_crates: Vec<ExternalCrateData>,
pub span: SpanData,
Expand All @@ -104,9 +113,13 @@ pub struct CratePreludeData {
/// Data for external crates in the prelude of a crate.
#[derive(Debug, Clone, RustcDecodable, RustcEncodable)]
pub struct ExternalCrateData {
pub name: String,
pub num: u32,
/// Source file where the external crate is declared.
pub file_name: String,
/// A crate-local crate index of an external crate. Local crate index is
/// always 0, so these should start from 1 and range should be contiguous,
/// e.g. from 1 to n for n external crates.
pub num: u32,
pub id: GlobalCrateId,
}

#[derive(Debug, Clone, RustcDecodable, RustcEncodable)]
Expand Down