From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- vendor/rls-data/src/lib.rs | 272 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 vendor/rls-data/src/lib.rs (limited to 'vendor/rls-data/src/lib.rs') 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, + pub compilation: Option, + pub prelude: Option, + pub imports: Vec, + pub defs: Vec, + pub impls: Vec, + pub refs: Vec, + pub macro_refs: Vec, + pub relations: Vec, +} + +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, + pub line_end: span::Row, + // Character offset. + pub column_start: span::Column, + pub column_end: span::Column, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct CompilationOptions { + pub directory: PathBuf, + pub program: String, + pub arguments: Vec, + 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, + 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, + pub span: SpanData, + pub alias_span: Option, + pub name: String, + pub value: String, + pub parent: Option, +} + +#[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, + pub children: Vec, + pub decl_id: Option, + pub docs: String, + pub sig: Option, + pub attributes: Vec, +} + +#[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, + pub children: Vec, + pub docs: String, + pub sig: Option, + pub attributes: Vec, +} + +#[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 Bar for T { ... } + // where Foo: Baz + Blanket, + // impl Bar for Baz { ... } or impl Baz { ... }, etc. + // where Foo: Deref + // 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, + pub refs: Vec, +} + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "derive", derive(Serialize, Deserialize))] +pub struct SigElement { + pub id: Id, + pub start: usize, + pub end: usize, +} -- cgit v1.2.3