diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
commit | 698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch) | |
tree | 173a775858bd501c378080a10dca74132f05bc50 /vendor/rls-data | |
parent | Initial commit. (diff) | |
download | rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip |
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/rls-data')
-rw-r--r-- | vendor/rls-data/.cargo-checksum.json | 1 | ||||
-rw-r--r-- | vendor/rls-data/Cargo.toml | 30 | ||||
-rw-r--r-- | vendor/rls-data/README.md | 11 | ||||
-rw-r--r-- | vendor/rls-data/src/config.rs | 24 | ||||
-rw-r--r-- | vendor/rls-data/src/lib.rs | 272 |
5 files changed, 338 insertions, 0 deletions
diff --git a/vendor/rls-data/.cargo-checksum.json b/vendor/rls-data/.cargo-checksum.json new file mode 100644 index 000000000..523d566f5 --- /dev/null +++ b/vendor/rls-data/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"74218651d16ab1b9a87db98ae2e88999a41df06e0e6e06fff7626a37dda4ad27","README.md":"7bbd124ce5419c1a600dc4d10091f3c822a1b9a7ab51713c53f900e34126ecdf","src/config.rs":"89199590ca29eefae416f815dbd320ea85944f41fdc10df76cf6f966006593a5","src/lib.rs":"740b35604810e91a3a76363e878ef819a629abc27ce76a330daffb345ee461b8"},"package":"a58135eb039f3a3279a33779192f0ee78b56f57ae636e25cec83530e41debb99"}
\ No newline at end of file diff --git a/vendor/rls-data/Cargo.toml b/vendor/rls-data/Cargo.toml new file mode 100644 index 000000000..54d416498 --- /dev/null +++ b/vendor/rls-data/Cargo.toml @@ -0,0 +1,30 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g., crates.io) dependencies +# +# If you believe there's an error in this file please file an +# issue against the rust-lang/cargo repository. If you're +# editing this file be aware that the upstream Cargo.toml +# will likely look very different (and much more reasonable) + +[package] +edition = "2018" +name = "rls-data" +version = "0.19.1" +authors = ["Nick Cameron <ncameron@mozilla.com>"] +description = "Data structures used by the RLS and Rust compiler" +categories = ["development-tools"] +license = "Apache-2.0/MIT" +repository = "https://github.com/rust-lang/rls" +[dependencies.rls-span] +version = "0.5.0" + +[dependencies.serde] +version = "1.0" + +[features] +default = ["derive"] +derive = ["serde/derive", "rls-span/derive"] diff --git a/vendor/rls-data/README.md b/vendor/rls-data/README.md new file mode 100644 index 000000000..c9c2638dc --- /dev/null +++ b/vendor/rls-data/README.md @@ -0,0 +1,11 @@ +# RLS-data + +Data structures used by the RLS and the Rust compiler. + +These are used by the save-analysis functionality in the compiler +(`rustc -Zsave-analysis`). In that use, the compiler translates info in its +internal data structures to these data structures then serialises them as JSON. +Clients (such as the RLS) can use this crate when deserialising. + +The data can also be passed directly from compiler to client if the compiler is +used as a library. diff --git a/vendor/rls-data/src/config.rs b/vendor/rls-data/src/config.rs new file mode 100644 index 000000000..0b0f8ebb8 --- /dev/null +++ b/vendor/rls-data/src/config.rs @@ -0,0 +1,24 @@ +#[cfg(feature = "derive")] +use serde::{Deserialize, Serialize}; + +/// Used to configure save-analysis. +#[derive(Debug, Clone, Default)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Config { + /// File to output save-analysis data to. + pub output_file: Option<String>, + /// Include all documentation for items. (If `false`, only includes the + /// summary (first paragraph) for each item). + pub full_docs: bool, + /// If true only includes data for public items in a crate (useful for + /// library crates). + pub pub_only: bool, + /// If true only includes data for items reachable from the crate root. + pub reachable_only: bool, + /// True if and only if the analysed crate is part of the standard Rust distro. + pub distro_crate: bool, + /// Include signature information. + pub signatures: bool, + /// Include experimental borrow data. + pub borrow_data: bool, +} diff --git a/vendor/rls-data/src/lib.rs b/vendor/rls-data/src/lib.rs new file mode 100644 index 000000000..8352a5bbc --- /dev/null +++ b/vendor/rls-data/src/lib.rs @@ -0,0 +1,272 @@ +use rls_span as span; + +use std::path::PathBuf; + +#[cfg(feature = "derive")] +use serde::{Deserialize, Serialize}; + +pub mod config; +pub use config::Config; + +#[derive(Debug, Clone, Default)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +#[repr(C)] +pub struct Analysis { + /// The Config used to generate this analysis data. + pub config: Config, + pub version: Option<String>, + pub compilation: Option<CompilationOptions>, + pub prelude: Option<CratePreludeData>, + pub imports: Vec<Import>, + pub defs: Vec<Def>, + pub impls: Vec<Impl>, + pub refs: Vec<Ref>, + pub macro_refs: Vec<MacroRef>, + pub relations: Vec<Relation>, +} + +impl Analysis { + /// Returns an initialized `Analysis` struct with `config` and also + /// `version` field to Cargo package version. + pub fn new(config: Config) -> Analysis { + Analysis { + config, + version: option_env!("CARGO_PKG_VERSION").map(ToString::to_string), + ..Analysis::default() + } + } +} + +// DefId::index is a newtype and so the JSON serialisation is ugly. Therefore +// we use our own Id which is the same, but without the newtype. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Id { + pub krate: u32, + pub index: u32, +} + +/// Crate name, along with its disambiguator (128-bit hash) 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, PartialEq, Eq, Hash)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct GlobalCrateId { + pub name: String, + pub disambiguator: (u64, u64), +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct SpanData { + pub file_name: PathBuf, + pub byte_start: u32, + pub byte_end: u32, + pub line_start: span::Row<span::OneIndexed>, + pub line_end: span::Row<span::OneIndexed>, + // Character offset. + pub column_start: span::Column<span::OneIndexed>, + pub column_end: span::Column<span::OneIndexed>, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct CompilationOptions { + pub directory: PathBuf, + pub program: String, + pub arguments: Vec<String>, + pub output: PathBuf, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct CratePreludeData { + pub crate_id: GlobalCrateId, + pub crate_root: String, + pub external_crates: Vec<ExternalCrateData>, + pub span: SpanData, +} + +/// Data for external crates in the prelude of a crate. +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct ExternalCrateData { + /// 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)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Import { + pub kind: ImportKind, + pub ref_id: Option<Id>, + pub span: SpanData, + pub alias_span: Option<SpanData>, + pub name: String, + pub value: String, + pub parent: Option<Id>, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub enum ImportKind { + ExternCrate, + Use, + GlobUse, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Def { + pub kind: DefKind, + pub id: Id, + pub span: SpanData, + pub name: String, + pub qualname: String, + pub value: String, + pub parent: Option<Id>, + pub children: Vec<Id>, + pub decl_id: Option<Id>, + pub docs: String, + pub sig: Option<Signature>, + pub attributes: Vec<Attribute>, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub enum DefKind { + // value = variant names + Enum, + // value = enum name + variant name + types + TupleVariant, + // value = enum name + name + fields + StructVariant, + // value = variant name + types + Tuple, + // value = name + fields + Struct, + Union, + // value = signature + Trait, + // value = type + generics + Function, + ForeignFunction, + // value = type + generics + Method, + // No id, no value. + Macro, + // value = file_name + Mod, + // value = aliased type + Type, + // value = type and init expression (for all variable kinds). + Local, + Static, + ForeignStatic, + Const, + Field, + // no value + ExternType, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Impl { + pub id: u32, + pub kind: ImplKind, + pub span: SpanData, + pub value: String, + pub parent: Option<Id>, + pub children: Vec<Id>, + pub docs: String, + pub sig: Option<Signature>, + pub attributes: Vec<Attribute>, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub enum ImplKind { + // impl Foo { ... } + Inherent, + // impl Bar for Foo { ... } + Direct, + // impl Bar for &Foo { ... } + Indirect, + // impl<T: Baz> Bar for T { ... } + // where Foo: Baz + Blanket, + // impl Bar for Baz { ... } or impl Baz { ... }, etc. + // where Foo: Deref<Target = Baz> + // Args are name and id of Baz + Deref(String, Id), +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Attribute { + pub value: String, + pub span: SpanData, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Ref { + pub kind: RefKind, + pub span: SpanData, + pub ref_id: Id, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub enum RefKind { + Function, + Mod, + Type, + Variable, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct MacroRef { + pub span: SpanData, + pub qualname: String, + pub callee_span: SpanData, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Relation { + pub span: SpanData, + pub kind: RelationKind, + pub from: Id, + pub to: Id, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub enum RelationKind { + Impl { id: u32 }, + SuperTrait, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct Signature { + pub text: String, + pub defs: Vec<SigElement>, + pub refs: Vec<SigElement>, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct SigElement { + pub id: Id, + pub start: usize, + pub end: usize, +} |