summaryrefslogtreecommitdiffstats
path: root/vendor/rls-data/src/lib.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/rls-data/src/lib.rs
parentInitial commit. (diff)
downloadrustc-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/src/lib.rs')
-rw-r--r--vendor/rls-data/src/lib.rs272
1 files changed, 272 insertions, 0 deletions
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,
+}