mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-14 10:19:02 +00:00
Scala: give Metals the build roots rather than the repository root (#1767)
Metals serves one build per workspace folder, and Serena sends only the repository root. Where the builds live below the root, Metals falls back to its own search (BuildTools.searchForBuildTool), which looks one level down and takes the *first* match — so in a monorepo every build but that one is served with no build target, and cross-file references silently come back empty. Detect the build roots instead and send them all, one Metals service each. `ls_specific_settings.scala.project_roots` names them explicitly where the detection guesses wrong, `project_root_scan_depth` bounds the search. The configured `ls_workspace_folders` are not usable for this: they are about what SolidLSP indexes and are shared by every language server of a project, so in a polyglot monorepo no single value suits both Metals and, say, tsserver. Where the repository root is itself a build root, nothing changes.
This commit is contained in:
1 parent
88d71530ab
commit
8c1f3bcc98
4 files changed
+412
-4
No files matched your search
@@ -72,6 +72,21 @@ These instructions cover the setup for projects that use sbt as the build tool,
|
||||
Notes:
|
||||
- Ensure you completed the manual or auto‑import steps so that the build is compiled and indexed; otherwise, code navigation and references may be incomplete until the first successful compile.
|
||||
|
||||
---
|
||||
## Monorepos: builds below the repository root
|
||||
|
||||
Metals serves one build per workspace folder, so what it needs is the build roots, not the repository root. Serena detects them: if the repository root is not itself a build root (no `build.sbt`, `build.mill`, `pom.xml`, `.bsp/`, …), it searches up to three levels below for directories that are, and passes those to Metals — one Metals service per build.
|
||||
|
||||
Override the detection where it guesses wrong:
|
||||
|
||||
```yaml
|
||||
# ~/.serena/serena_config.yml or .serena/project.yml
|
||||
ls_specific_settings:
|
||||
scala:
|
||||
project_roots: ["backend", "tooling/plugin"] # relative to the repository root
|
||||
project_root_scan_depth: 3 # only applies when project_roots is unset
|
||||
```
|
||||
|
||||
---
|
||||
## Running Multiple Metals Instances
|
||||
|
||||
|
||||
Reference in new issue
Block a user