diff --git a/Cargo.lock b/Cargo.lock
index f9b9009fa5..d797a98ff0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2583,15 +2583,9 @@ version = "0.1.0"
dependencies = [
"air_r_parser",
"air_r_syntax",
- "assert_matches",
"biome_rowan",
- "log",
"oak_core",
- "oak_db",
- "oak_package_metadata",
"oak_semantic",
- "oak_sources",
- "stdext",
"url",
]
@@ -2633,7 +2627,6 @@ dependencies = [
"air_r_parser",
"air_r_syntax",
"anyhow",
- "assert_matches",
"biome_rowan",
"biome_text_size",
"itertools 0.14.0",
@@ -2642,7 +2635,6 @@ dependencies = [
"oak_index_vec",
"oak_package_metadata",
"oak_semantic",
- "oak_sources",
"rustc-hash",
"salsa",
"smallvec",
diff --git a/crates/ark/src/lsp.rs b/crates/ark/src/lsp.rs
index 0e63279696..76a6dd8555 100644
--- a/crates/ark/src/lsp.rs
+++ b/crates/ark/src/lsp.rs
@@ -19,7 +19,6 @@ pub mod document_context;
pub mod events;
pub mod folding_range;
pub mod goto_definition;
-pub mod goto_definition_legacy;
pub mod handler;
pub mod handlers;
pub mod help;
@@ -42,6 +41,9 @@ pub mod symbols;
pub mod traits;
pub mod util;
+#[cfg(test)]
+mod tests;
+
// These send LSP messages in a non-async and non-blocking way.
// The LOG level is not timestamped so we're not using it.
macro_rules! log_info {
diff --git a/crates/ark/src/lsp/diagnostics.rs b/crates/ark/src/lsp/diagnostics.rs
index a62c452d37..483ca87d5b 100644
--- a/crates/ark/src/lsp/diagnostics.rs
+++ b/crates/ark/src/lsp/diagnostics.rs
@@ -1654,7 +1654,7 @@ foo
let package = Package::from_parts(PathBuf::from("/mock/path"), description, namespace);
// Create a library with `mockpkg` installed
- let library = Library::new(vec![], None).insert("mockpkg", package);
+ let library = Library::new(vec![]).insert("mockpkg", package);
// Simulate a search path with `library` in scope
let console_scopes = vec![vec!["library".to_string()]];
@@ -1769,7 +1769,7 @@ foo
let package2 =
Package::from_parts(PathBuf::from("/mock/path2"), description2, namespace2);
- let library = Library::new(vec![], None)
+ let library = Library::new(vec![])
.insert("pkg1", package1)
.insert("pkg2", package2);
@@ -1827,7 +1827,7 @@ foo
};
let package = Package::from_parts(PathBuf::from("/mock/path"), description, namespace);
- let library = Library::new(vec![], None).insert("pkg", package);
+ let library = Library::new(vec![]).insert("pkg", package);
let console_scopes = vec![vec!["require".to_string()]];
let state = WorldState {
@@ -1858,7 +1858,7 @@ foo
let palmerpenguins_pkg = Package::load_from_folder(palmerpenguins_dir.path())
.unwrap()
.unwrap();
- let library = Library::new(vec![], None).insert("penguins", palmerpenguins_pkg);
+ let library = Library::new(vec![]).insert("penguins", palmerpenguins_pkg);
// Simulate a world state with the penguins package installed and attached
let mut state = DEFAULT_STATE.clone();
diff --git a/crates/ark/src/lsp/goto_definition.rs b/crates/ark/src/lsp/goto_definition.rs
index ff65cc14ba..e1700985e6 100644
--- a/crates/ark/src/lsp/goto_definition.rs
+++ b/crates/ark/src/lsp/goto_definition.rs
@@ -1,19 +1,21 @@
use aether_lsp_utils::proto::from_proto;
use aether_lsp_utils::proto::to_proto;
-use anyhow::anyhow;
use oak_ide::NavigationTarget;
use stdext::result::ResultExt;
use tower_lsp::lsp_types::GotoDefinitionParams;
use tower_lsp::lsp_types::GotoDefinitionResponse;
use tower_lsp::lsp_types::LocationLink;
+use tower_lsp::lsp_types::Position;
+use url::Url;
use crate::lsp::document::Document;
-use crate::lsp::state::WorldState;
+use crate::lsp::indexer;
+use crate::lsp::traits::node::NodeExt;
+use crate::treesitter::NodeTypeExt;
pub(crate) fn goto_definition(
document: &Document,
params: GotoDefinitionParams,
- state: &WorldState,
) -> anyhow::Result