The Nextflow language server schedules a debounced (1s) AST update on every
didOpen/didChange, and LanguageService.references is the only request that does
not await it -- documentSymbol, codeLens, documentLink and semanticTokensFull
all do. A references request issued inside that window races the recompile of
the file it asks about and can return an empty list, which is what the macOS CI
runner hit. Send a documentSymbol request for the same file first, which blocks
server-side until the pending update has been applied.
Also compare reference paths using the platform separator in the tests, since
relativePath is OS-native and the hardcoded forward slashes failed on Windows.
Add a Deno language server backed by the Deno CLI's built-in `deno lsp`,
serving TypeScript/JavaScript in Deno projects. Unlike the plain
typescript-language-server it understands Deno module resolution
(npm:/jsr:/https: imports) and the `Deno.*` global namespace.
It is experimental and must be selected explicitly via
`language_servers: [deno]`; it overlaps the TypeScript server on file
extensions, so it is not auto-detected. Requires the `deno` CLI on PATH.
Tests run in CI: the `deno` marker joins the other-langs batch, which now
installs Deno via denoland/setup-deno. Off-CI and wherever the CLI is
absent they skip through the central conftest guard, following the existing
pattern for toolchain-gated language servers. Hover is covered explicitly,
including hover on a `Deno.*` global, which is the capability this server
adds over the TypeScript one.
The test suite runs on a single interpreter, so nothing covered the rest of the range declared by
`requires-python` (>=3.11, <3.15). The new workflow installs the locked dependency set on each of 3.11-3.14
and then runs `project health-check` against the Python test repo, which catches both a dependency without a
wheel for a given version and any import or startup breakage. It is deliberately Linux-only, to stay within
the cap of 20 concurrent jobs, and deliberately does not cache the venv, since a restored venv would make the
`uv sync` under test a no-op.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The cpu matrix job had no timeout-minutes, so a hung job runs until
GitHub's default 6-hour limit. This is not hypothetical: on run
29064865197 (2026-07-10), the native (ubuntu-latest) job hung and ran
from 02:36:34 to 08:36:50 before GitHub cancelled it at exactly the
6-hour cap, blocking the PR's status the whole time and burning a
runner for 6 hours.
Healthy runs are far below the new limit: across the 8 most recent
successful runs of this workflow, the slowest job was 16 minutes
(niche on ubuntu-latest), with catch-all on windows-latest typically
11-14 minutes. 60 minutes leaves ~4x headroom for cache-cold runs
(language-server downloads, npm installs) while cutting the worst-case
hang from 6 hours to 1.
Part of the timeout-hardening discussed in #1695.
The `Install R language server` step started failing on the new
`ubuntu-24.04` runner image (`ubuntu-latest`) because the R `fs`
package falls back to a source build and its `configure` step calls
`pkg-config --exists libuv`, which fails with:
Package libuv was not found in the pkg-config search path.
fatal error: uv.h: No such file or directory
ERROR: configuration failed for package 'fs'
That cascades through `pkgload` -> `roxygen2` -> `languageserver`,
making `test/solidlsp/r/test_r_basic.py` error out at setup with
`RuntimeError: R languageserver package is not installed`.
Verified locally on a clean `ubuntu:24.04` container: `libuv1-dev`
is not preinstalled but is available in the `noble` apt repo
(version `1.48.0-1.1build1`). Installing it makes
`pkg-config --exists libuv` succeed (`pkg-config --modversion libuv`
returns `1.48.0`), which is exactly what the `fs` configure script
needs.
Linux-only via `if: runner.os == 'Linux'` so the step is a no-op
on macOS and Windows runners (libuv is bundled differently there
and `fs` is delivered as a binary).
Refs: #1419
Adds tests for name resolution for each language and fixes the name resolution where tests have failed.
Also:
Extends python tests to cover ty
Extends skipping conditions for several LS (but only when not in CI)
Better test output in CI
Removed a wrong python test (started failing for ty and should have failed for pyright too)
References and definition not working yet. Since ansible resolves same files as yaml LS, we will need to add disambiguation later.
Work in progress, improvements on the language server itself are being worked on, ansible support in Serena will be extended accordingly in the future.
* Add SystemVerilog language server support using slang-langserver
- Add Language.SYSTEMVERILOG enum with .sv, .svh, .v, .vh file support
- Create SystemVerilogLanguageServer class with auto-download for Linux, macOS, Windows
- Add pytest marker and basic test cases for symbol retrieval
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix ruff lint errors by updating configuration
- Add UP042, PLW0108, PLC0207 to ruff ignore list (style preferences)
- Update test repo pyproject.toml to use lint.select and lint.isort sections
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Replace slang-langserver with verible-verilog-ls for SystemVerilog
slang v7.0 release URLs return 404 as the project stopped providing
pre-built binaries after v3.0. Migrate to Verible (CHIPS Alliance)
which actively maintains binary releases for all major platforms.
Changes:
- Update RuntimeDependency URLs to Verible v0.0-4051-g9fdb4057
- Add Linux ARM64 platform support
- Update fallback and error messages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add SystemVerilog language server support using slang-langserver
- Add Language.SYSTEMVERILOG enum with .sv, .svh, .v, .vh file support
- Create SystemVerilogLanguageServer class with auto-download for Linux, macOS, Windows
- Add pytest marker and basic test cases for symbol retrieval
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Replace slang-langserver with verible-verilog-ls for SystemVerilog
slang v7.0 release URLs return 404 as the project stopped providing
pre-built binaries after v3.0. Migrate to Verible (CHIPS Alliance)
which actively maintains binary releases for all major platforms.
Changes:
- Update RuntimeDependency URLs to Verible v0.0-4051-g9fdb4057
- Add Linux ARM64 platform support
- Update fallback and error messages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix Verible binary paths for macOS and Windows
The archive directory names differ per platform:
- Linux: verible-v0.0-4051-g9fdb4057/bin/
- macOS: verible-v0.0-4051-g9fdb4057-macOS/bin/
- Windows: verible-v0.0-4051-g9fdb4057-win64/ (no bin/ subdirectory)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Update docs and comments: slang-langserver → verible-verilog-ls
- Update pyproject.toml marker description
- Update ls_config.py docstring
- Update test file docstrings
- Remove unused _slang_available() function
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add verible-verilog-ls to CI and improve SystemVerilog LS
- Add verible-verilog-ls installation step to pytest.yml for
Linux/macOS/Windows (GitHub Releases, follows ZLS pattern)
- Remove unused threading import and server_ready Event
- Add capability validation (assert textDocumentSync, warn on
missing documentSymbolProvider/definitionProvider)
- Add window/logMessage notification handler
- Add codeAction, formatting, documentHighlight capabilities
- Improve error message with conda/Homebrew/GitHub install methods
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add verible detection tests and remove redundant ALU tests
Add comprehensive unit tests for verible-verilog-ls binary detection
logic (PATH lookup, version logging, graceful degradation, download
fallback). Remove duplicate ALU symbol tests that tested the same
LSP operations already covered by counter tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix SystemVerilog LSP convention deviations from code review
- Add client/registerCapability handler (all other 31 LSPs have it)
- Add locale: en to initialize params (project convention)
- Change log.debug to log.info for window/logMessage handler
- Fix dead code in test_find_references_cross_file skip/assert logic
- Move repeated imports to module top level in detection tests
- Remove unused IS_WINDOWS/IS_UNIX variables and sys import
- Fix hardcoded line number comment to semantic description
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix Windows CI verible path: flat zip structure has no bin/ subdir
The Windows verible zip extracts to verible-VERSION-win64/ with
executables directly in the root (no bin/ subdirectory), unlike
Linux/macOS tar.gz which have bin/ subdirectory.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix macOS CI verible path: tar.gz extracts with -macOS suffix
Each platform has different directory naming in verible releases:
- Linux: verible-VERSION/bin/ (no suffix)
- macOS: verible-VERSION-macOS/bin/ (has -macOS suffix)
- Windows: verible-VERSION-win64/ (flat, no bin/ subdir)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Refactor: read Verible version from settings instead of hardcoding
Extract hardcoded version string into _custom_settings.get("verible_version")
with the current version as default. This allows version override via
project.yml without changing source code.
Also introduce DEFAULT_VERIBLE_VERSION constant in detection tests
for consistency.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add rename tests and strengthen existing SystemVerilog tests
- Add TestSystemVerilogRename: within-file, cross-file, module rename
- Strengthen all existing tests with exact position/value verification
- Remove all pytest.skip, replace with assert (review feedback)
- Remove isinstance check in _find_symbol_by_name (review feedback)
- Extract _extract_hover_text and _extract_changes helpers
- Remove test_diagnostics (requires shared ls.py fix, separate PR)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fixes longstanding clangd issues (wrong selectionRange, failure to take compile_commands.json into account) and enhances documentation about C/C++ support