Skip to content

Commit 90bd18b

Browse files
authored
feat: basic local file resolution (#34)
* Capture names * Update logger * v0: call resolution * v0 symbol resolution * Fix bugs * Add context trait * Print ref counts * Redo scoping * fix test * Improve DB structure
1 parent bb23b1e commit 90bd18b

File tree

24 files changed

+2488
-106
lines changed

24 files changed

+2488
-106
lines changed

Cargo.lock

Lines changed: 157 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ salsa = { workspace = true}
1515
codegen-sdk-typescript = { workspace = true}
1616
env_logger = { workspace = true }
1717
log = { workspace = true }
18+
codegen-sdk-resolution = { workspace = true}
1819
sysinfo = "0.33.1"
1920
rkyv.workspace = true
2021
[features]
@@ -57,7 +58,7 @@ members = [
5758
"languages/codegen-sdk-yaml",
5859
"languages/codegen-sdk-toml",
5960
"languages/codegen-sdk-ts_query",
60-
"languages/codegen-sdk-typescript",
61+
"languages/codegen-sdk-typescript", "codegen-sdk-resolution",
6162
]
6263
resolver = "2"
6364
[workspace.dependencies]
@@ -88,6 +89,7 @@ mockall = "0.13.1"
8889
codegen-sdk-common = { path = "codegen-sdk-common" }
8990
codegen-sdk-cst = { path = "codegen-sdk-cst"}
9091
codegen-sdk-ast = { path = "codegen-sdk-ast" }
92+
codegen-sdk-resolution = { path = "codegen-sdk-resolution" }
9193
codegen-sdk-cst-generator = { path = "codegen-sdk-cst-generator" }
9294
codegen-sdk-ast-generator = { path = "codegen-sdk-ast-generator" }
9395
codegen-sdk-ts_query = { path = "languages/codegen-sdk-ts_query" }
@@ -117,6 +119,7 @@ subenum = {git = "https://github.com/mrenow/subenum", branch = "main"}
117119
indicatif-log-bridge = "0.2.3"
118120
indicatif = { version = "0.17.11", features = ["rayon"] }
119121
crossbeam-channel = "0.5.11"
122+
rstest = "0.25.0"
120123
[profile.dev]
121124
# codegen-backend = "cranelift"
122125
split-debuginfo = "unpacked"

codegen-sdk-analyzer/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ salsa = { workspace = true }
88
codegen-sdk-common = { workspace = true }
99
codegen-sdk-ast = { workspace = true }
1010
codegen-sdk-cst = { workspace = true }
11+
codegen-sdk-resolution = { workspace = true }
1112
codegen-sdk-python = { workspace = true, optional = true}
1213
codegen-sdk-typescript = { workspace = true, optional = true}
1314
codegen-sdk-tsx = { workspace = true, optional = true}

codegen-sdk-analyzer/src/codebase.rs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use anyhow::Context;
44
use codegen_sdk_ast::Input;
55
#[cfg(feature = "serialization")]
66
use codegen_sdk_common::serialization::Cache;
7+
use codegen_sdk_resolution::CodebaseContext;
78
use discovery::FilesToParse;
89
use notify_debouncer_mini::DebounceEventResult;
910
use salsa::Setter;
@@ -60,25 +61,11 @@ impl Codebase {
6061
}
6162
Ok(())
6263
}
63-
pub fn get_file(&self, path: PathBuf) -> Option<&ParsedFile<'_>> {
64-
let file = self.db.files.get(&path);
65-
if let Some(file) = file {
66-
return parse_file(&self.db, file.clone()).file(&self.db).as_ref();
67-
}
68-
None
69-
}
64+
7065
fn discover(&self) -> FilesToParse {
7166
discovery::collect_files(&self.db, &self.root)
7267
}
73-
pub fn files(&self) -> Vec<&ParsedFile<'_>> {
74-
let mut files = Vec::new();
75-
for file in self.discover().files(&self.db) {
76-
if let Some(file) = self.get_file(file.path(&self.db)) {
77-
files.push(file);
78-
}
79-
}
80-
files
81-
}
68+
8269
pub fn errors(&self) -> Vec<()> {
8370
let mut errors = Vec::new();
8471
for file in self.discover().files(&self.db) {
@@ -97,7 +84,26 @@ impl Codebase {
9784
files,
9885
)
9986
}
100-
pub fn db(&self) -> &CodegenDatabase {
87+
}
88+
impl CodebaseContext for Codebase {
89+
type File<'a> = ParsedFile<'a>;
90+
fn files<'a>(&'a self) -> Vec<&'a Self::File<'a>> {
91+
let mut files = Vec::new();
92+
for file in self.discover().files(&self.db) {
93+
if let Some(file) = self.get_file(file.path(&self.db)) {
94+
files.push(file);
95+
}
96+
}
97+
files
98+
}
99+
fn db(&self) -> &dyn salsa::Database {
101100
&self.db
102101
}
102+
fn get_file<'a>(&'a self, path: PathBuf) -> Option<&'a Self::File<'a>> {
103+
let file = self.db.files.get(&path);
104+
if let Some(file) = file {
105+
return parse_file(&self.db, file.clone()).file(&self.db).as_ref();
106+
}
107+
None
108+
}
103109
}

0 commit comments

Comments
 (0)