From 5215985b0b34fd19879820063786200fe431e7f1 Mon Sep 17 00:00:00 2001 From: Lionel Henry Date: Tue, 8 Jul 2025 14:29:43 +0200 Subject: [PATCH 01/14] Draft data structures --- crates/ark/src/lsp/inputs/mod.rs | 9 ++++++++ crates/ark/src/lsp/inputs/package.rs | 26 ++++++++++++++++++++++++ crates/ark/src/lsp/inputs/source_root.rs | 16 +++++++++++++++ crates/ark/src/lsp/mod.rs | 1 + crates/ark/src/lsp/state.rs | 12 +++++++++++ 5 files changed, 64 insertions(+) create mode 100644 crates/ark/src/lsp/inputs/mod.rs create mode 100644 crates/ark/src/lsp/inputs/package.rs create mode 100644 crates/ark/src/lsp/inputs/source_root.rs diff --git a/crates/ark/src/lsp/inputs/mod.rs b/crates/ark/src/lsp/inputs/mod.rs new file mode 100644 index 000000000..689fd1068 --- /dev/null +++ b/crates/ark/src/lsp/inputs/mod.rs @@ -0,0 +1,9 @@ +// +// mod.rs +// +// Copyright (C) 2025 by Posit Software, PBC +// +// + +pub mod package; +pub mod source_root; diff --git a/crates/ark/src/lsp/inputs/package.rs b/crates/ark/src/lsp/inputs/package.rs new file mode 100644 index 000000000..5d7b25c03 --- /dev/null +++ b/crates/ark/src/lsp/inputs/package.rs @@ -0,0 +1,26 @@ +// +// package.rs +// +// Copyright (C) 2025 by Posit Software, PBC +// +// + +use std::path::PathBuf; + +/// Represents an R package and its metadata relevant for static analysis. +#[derive(Clone, Debug)] +pub struct Package { + pub name: String, + pub version: String, + + /// Path to the directory that contains `DESCRIPTION`. Could be an installed + /// package, or a package source. + pub path: PathBuf, + + /// Imports and exports in `NAMESPACE` + pub imports: Vec, + pub exports: Vec, + + /// `Depends` field in `DESCRIPTION` + pub depends: Vec, +} diff --git a/crates/ark/src/lsp/inputs/source_root.rs b/crates/ark/src/lsp/inputs/source_root.rs new file mode 100644 index 000000000..f3805c9db --- /dev/null +++ b/crates/ark/src/lsp/inputs/source_root.rs @@ -0,0 +1,16 @@ +// +// source_root.rs +// +// Copyright (C) 2025 by Posit Software, PBC +// +// + +use super::package::Package; + +/// The root of a source tree. +/// Currently only supports packages, but can be extended to scripts. +#[derive(Clone, Debug)] +pub enum SourceRoot { + Package(Package), + // Scripts(Vec