Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,19 @@ jobs:

- name: Check formatting
if: matrix.rust == 'stable'
run: cargo fmt --check
run: make check-format

- name: Check generated command reference
if: matrix.rust == 'stable'
run: python3 scripts/update_readme_commands.py --check
run: make check-readme

- name: Run tests
run: cargo test --locked
run: make check-tests

- name: Run real-server E2E smoke tests
if: matrix.rust == 'stable'
run: make test-real-server-e2e

- name: Run clippy
if: matrix.rust == 'stable'
run: cargo clippy --all-targets --all-features -- -D warnings
run: make check-clippy
6 changes: 6 additions & 0 deletions .memory/unprocessed/ci-reuses-make-targets.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# CI reuses Makefile verification targets

The initial E2E implementation duplicated formatting, Clippy, and live-server commands between
`Makefile` and `.github/workflows/ci.yml`. The user explicitly rejected that structure. Keep the
commands centralized as granular Make targets; CI should only choose which Make target runs for a
toolchain or lane.
6 changes: 6 additions & 0 deletions .memory/unprocessed/e2e-cases-are-split-by-language.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# E2E case manifests are split by language

The E2E manifest is a directory rather than one `cases.yaml` file. Global command coverage lives
in `cases/suite.yaml`; each `cases/<language>.yaml` owns exactly one project and all server pairs
for that language. The `gowork` case intentionally contains only an isolated `go.work` file so its
detection does not overlap `gomod` or `go`.
5 changes: 5 additions & 0 deletions .memory/unprocessed/e2e-fake-lsp-is-a-rust-helper.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# The deterministic E2E LSP fixture is a Rust helper

When offered Python, real rust-analyzer, or a Rust helper for deterministic command-path tests,
the user selected the Rust helper. Keep the helper as an isolated, locked fixture package that
reuses serde_json; do not replace it with a Python script merely to reduce fixture build code.
5 changes: 5 additions & 0 deletions .memory/unprocessed/e2e-fixture-dedup-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# E2E fixture deduplication applies to the Rust harness

The project-phase deduplication item applies to repeated E2E harness setup, including validated
manifest loading, isolated context construction, and command-strategy selection. It does not mean
removing the intentionally equivalent domain concepts from the per-language playground sources.
9 changes: 9 additions & 0 deletions .memory/unprocessed/e2e-servers-use-mason-latest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Real-server E2E provisioning uses Mason latest

The user corrected the preferred-server E2E design: do not install LSP servers separately and do
not pin a Mason registry release or package versions. Each real-server test must use `--download`
against Mason latest. The preferred smoke pair must be derived from the first production preference
in `data/lsp-cli.yaml`; do not duplicate that selection in the E2E case YAML.

This deliberately trades reproducibility for immediate upstream compatibility coverage. Preserve
the resolved Mason source ID in diagnostics so failures can still identify the installed version.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Manual E2E verification follows server provisioning

The project plan originally required running every relevant LSP command against new playgrounds
before selecting or provisioning their servers. Most new languages had no runnable compatible
server, so the manual verification item was moved immediately after preferred-server provisioning
and remains unchecked until those prerequisites exist.
6 changes: 6 additions & 0 deletions .memory/unprocessed/new-playground-build-metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# New playgrounds use dependency-free and relocatable metadata

The Kotlin playground uses compiler-valid sources plus `settings.gradle.kts`, without adding a
Gradle or Maven Kotlin plugin dependency. CUDA, Objective-C, and Objective-C++ use relative
`compile_commands.json` working directories so their compilation metadata remains valid after the
E2E harness copies a project into a randomized sandbox.
10 changes: 10 additions & 0 deletions .memory/unprocessed/official-first-e2e-server-pins.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Official-first E2E server pins expose launcher mismatches

The user selected an official-first preferred E2E server matrix and explicitly accepted bespoke
provisioning and current command/config gaps. In particular, use `kotlin_lsp` rather than the
community `kotlin_language_server`, and `roslyn_ls` rather than OmniSharp.

The pinned Mason registry exposes Kotlin LSP as `intellij-server`, although the data config starts
`kotlin-lsp`. It exposes Roslyn as `roslyn-language-server`, although the data config starts `dotnet`
with a literal `<my_folder>` DLL path. The preferred-server selection can be committed independently,
but provisioning must resolve these mismatches before claiming either smoke case is runnable.
10 changes: 10 additions & 0 deletions .memory/unprocessed/playground-validity-audit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Existing playgrounds are not all valid standalone projects

`E2E_TESTS.md` requires every source-language playground to be valid, but the existing C++ fixture
does not link because `main.cpp` calls undefined `f()` and `g()`. The Rust fixture also cannot be
checked through its own manifest because Cargo treats the nested package as an undeclared member
of the repository's root package workspace.

The project audit must distinguish source presence from validated buildability. Repair these
fixtures in the dedicated cleanup step rather than silently treating their files as a valid E2E
baseline.
61 changes: 61 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ thiserror = "2.0.17"
url = "2.5.7"
zip = { version = "8.6.0", default-features = false, features = ["deflate"] }

[dev-dependencies]
command-group = "5.0.1"
fs_extra = "1.3.0"
wait-timeout = "0.2.1"

[lints]
workspace = true

Expand Down
Loading