Repository navigation
Test Explorer Debug builds, diagnostic accuracy and refresh; consolidate all branches - #494
Merged
Merged
Conversation
Bumps the rust-host group with 3 updates: [tree-sitter](https://github.com/tree-sitter/tree-sitter), [serde_json](https://github.com/serde-rs/json) and [toml](https://github.com/toml-rs/toml). Updates `tree-sitter` from 0.27.0 to 0.27.1 - [Release notes](https://github.com/tree-sitter/tree-sitter/releases) - [Commits](tree-sitter/tree-sitter@v0.27.0...v0.27.1) Updates `serde_json` from 1.0.151 to 1.0.154 - [Release notes](https://github.com/serde-rs/json/releases) - [Commits](serde-rs/json@v1.0.151...v1.0.154) Updates `toml` from 1.1.6+spec-1.1.0 to 1.1.8+spec-1.1.0 - [Commits](toml-rs/toml@toml-v1.1.6...toml-v1.1.8) --- updated-dependencies: - dependency-name: tree-sitter dependency-version: 0.27.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-host - dependency-name: serde_json dependency-version: 1.0.154 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-host - dependency-name: toml dependency-version: 1.1.8+spec-1.1.0 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-host ... Signed-off-by: dependabot[bot] <[email protected]>
Bumps the rust-zed group in /src/editors/zed with 1 update: [toml](https://github.com/toml-rs/toml). Updates `toml` from 1.1.6+spec-1.1.0 to 1.1.8+spec-1.1.0 - [Commits](toml-rs/toml@toml-v1.1.6...toml-v1.1.8) --- updated-dependencies: - dependency-name: toml dependency-version: 1.1.8+spec-1.1.0 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-zed ... Signed-off-by: dependabot[bot] <[email protected]>
…t-upgrades/rust-zed-1725422218 into dependabot-upgrades
Bumps the github-actions group with 6 updates: | Package | From | To | | --- | --- | --- | | [taiki-e/install-action](https://github.com/taiki-e/install-action) | `2.87.23` | `2.87.27` | | [actions/setup-node](https://github.com/actions/setup-node) | `7.0.0` | `7.1.0` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `8.0.1` | `8.0.2` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `7.0.1` | `7.0.2` | | [github/codeql-action/init](https://github.com/github/codeql-action) | `4.38.2` | `4.38.3` | | [github/codeql-action/analyze](https://github.com/github/codeql-action) | `4.38.2` | `4.38.3` | Updates `taiki-e/install-action` from 2.87.23 to 2.87.27 - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](taiki-e/install-action@861a07c...ab68953) Updates `actions/setup-node` from 7.0.0 to 7.1.0 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](actions/setup-node@8207627...949feb2) Updates `actions/download-artifact` from 8.0.1 to 8.0.2 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@3e5f45b...9000827) Updates `actions/upload-artifact` from 7.0.1 to 7.0.2 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@043fb46...cf430e0) Updates `github/codeql-action/init` from 4.38.2 to 4.38.3 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@2892aa5...24c5418) Updates `github/codeql-action/analyze` from 4.38.2 to 4.38.3 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@2892aa5...24c5418) --- updated-dependencies: - dependency-name: taiki-e/install-action dependency-version: 2.87.27 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/setup-node dependency-version: 7.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: actions/download-artifact dependency-version: 8.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/upload-artifact dependency-version: 7.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: github/codeql-action/init dependency-version: 4.38.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: github/codeql-action/analyze dependency-version: 4.38.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] <[email protected]>
Bumps the website group in /src/website with 1 update: [@playwright/test](https://github.com/microsoft/playwright). Updates `@playwright/test` from 1.63.0 to 1.64.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.63.0...v1.64.0) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-version: 1.64.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: website ... Signed-off-by: dependabot[bot] <[email protected]>
…des/github-actions-c88aa5ffdc into dependabot-upgrades
…abot-upgrades/website-3c101cf53b into dependabot-upgrades
Bumps the vscode-extension group in /src/editors/vscode with 7 updates: | Package | From | To | | --- | --- | --- | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.6.4` | `26.6.5` | | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.71.0` | `8.71.1` | | [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.71.0` | `8.71.1` | | [playwright](https://github.com/microsoft/playwright) | `1.63.0` | `1.64.0` | | [prettier](https://github.com/prettier/prettier) | `3.9.9` | `3.9.10` | | [typescript](https://github.com/microsoft/TypeScript) | `6.0.3` | `7.0.2` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.71.0` | `8.71.1` | Updates `@types/node` from 26.6.4 to 26.6.5 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@typescript-eslint/eslint-plugin` from 8.71.0 to 8.71.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.1/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 8.71.0 to 8.71.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.1/packages/parser) Updates `playwright` from 1.63.0 to 1.64.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.63.0...v1.64.0) Updates `prettier` from 3.9.9 to 3.9.10 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](prettier/prettier@3.9.9...3.9.10) Updates `typescript` from 6.0.3 to 7.0.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Commits](microsoft/TypeScript@v6.0.3...v7.0.2) Updates `typescript-eslint` from 8.71.0 to 8.71.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.1/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 26.6.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.71.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension - dependency-name: "@typescript-eslint/parser" dependency-version: 8.71.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension - dependency-name: playwright dependency-version: 1.64.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: vscode-extension - dependency-name: prettier dependency-version: 3.9.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension - dependency-name: typescript dependency-version: 7.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: vscode-extension - dependency-name: typescript-eslint dependency-version: 8.71.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension ... Signed-off-by: dependabot[bot] <[email protected]>
…/dependabot-upgrades/vscode-extension-9912a3cfe6 into dependabot-upgrades
Bumps Fantomas.Core from 8.0.7 to 8.0.8 Bumps FSharp.Compiler.Service from 43.12.401 to 43.12.402 Bumps FSharp.Core from 10.1.401 to 10.1.402 Bumps MessagePack from 3.1.11 to 3.1.12 Bumps Microsoft.CodeAnalysis.NetAnalyzers from 10.0.401 to 10.0.402 Bumps Microsoft.NET.Test.Sdk from 18.10.1 to 18.11.0 Bumps System.Security.Cryptography.Xml from 10.0.12 to 10.0.13 Bumps xunit.runner.visualstudio from 4.0.0 to 4.0.1 --- updated-dependencies: - dependency-name: Fantomas.Core dependency-version: 8.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: FSharp.Compiler.Service dependency-version: 43.12.402 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: FSharp.Core dependency-version: 10.1.402 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: FSharp.Core dependency-version: 10.1.402 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: MessagePack dependency-version: 3.1.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: MessagePack dependency-version: 3.1.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: Microsoft.CodeAnalysis.NetAnalyzers dependency-version: 10.0.402 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dotnet-sidecars - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dotnet-sidecars - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars ... Signed-off-by: dependabot[bot] <[email protected]>
…bot-upgrades/dotnet-sidecars-61cedddb46 into dependabot-upgrades
…e completion Legacy tag helper elements and attributes become markup facts, with names read where the compiler gives no span; @addTagHelper, @removeTagHelper and @tagHelperPrefix scope MVC attribute completion. Builds; tests not yet run.
Bumps the rust-host group with 1 update: [tokio](https://github.com/tokio-rs/tokio). Updates `tokio` from 1.53.2 to 1.53.3 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](tokio-rs/tokio@tokio-1.53.2...tokio-1.53.3) --- updated-dependencies: - dependency-name: tokio dependency-version: 1.53.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-host ... Signed-off-by: dependabot[bot] <[email protected]>
Bumps the website group in /src/website with 3 updates: [@11ty/eleventy](https://github.com/11ty/buildawesome), [@playwright/test](https://github.com/microsoft/playwright) and [markdown-it](https://github.com/markdown-it/markdown-it). Updates `@11ty/eleventy` from 3.1.6 to 3.1.7 - [Release notes](https://github.com/11ty/buildawesome/releases) - [Changelog](https://github.com/11ty/buildawesome/blob/main/docs/release-instructions.md) - [Commits](11ty/buildawesome@v3.1.6...v3.1.7) Updates `@playwright/test` from 1.64.0 to 1.64.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.64.0...v1.64.1) Updates `markdown-it` from 15.0.2 to 15.0.3 - [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md) - [Commits](markdown-it/markdown-it@15.0.2...15.0.3) --- updated-dependencies: - dependency-name: "@11ty/eleventy" dependency-version: 3.1.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: website - dependency-name: "@playwright/test" dependency-version: 1.64.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: website - dependency-name: markdown-it dependency-version: 15.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: website ... Signed-off-by: dependabot[bot] <[email protected]>
…abot-upgrades/website-46eb8014e6 into dependabot-upgrades
Bumps the vscode-extension group in /src/editors/vscode with 5 updates: | Package | From | To | | --- | --- | --- | | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.71.1` | `8.71.2` | | [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.71.1` | `8.71.2` | | [eslint](https://github.com/eslint/eslint) | `10.12.0` | `10.13.0` | | [playwright](https://github.com/microsoft/playwright) | `1.64.0` | `1.64.1` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.71.1` | `8.71.2` | Updates `@typescript-eslint/eslint-plugin` from 8.71.1 to 8.71.2 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.2/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 8.71.1 to 8.71.2 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.2/packages/parser) Updates `eslint` from 10.12.0 to 10.13.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v10.12.0...v10.13.0) Updates `playwright` from 1.64.0 to 1.64.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.64.0...v1.64.1) Updates `typescript-eslint` from 8.71.1 to 8.71.2 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.2/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.71.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension - dependency-name: "@typescript-eslint/parser" dependency-version: 8.71.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension - dependency-name: eslint dependency-version: 10.13.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: vscode-extension - dependency-name: playwright dependency-version: 1.64.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension - dependency-name: typescript-eslint dependency-version: 8.71.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vscode-extension ... Signed-off-by: dependabot[bot] <[email protected]>
Bumps Fantomas.Core from 8.0.8 to 8.0.10 --- updated-dependencies: - dependency-name: Fantomas.Core dependency-version: 8.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet-sidecars ... Signed-off-by: dependabot[bot] <[email protected]>
…/dependabot-upgrades/vscode-extension-90a4738cce into dependabot-upgrades
…ecar.FSharp/dependabot-upgrades/dotnet-sidecars-58fe4f58b6 into dependabot-upgrades
Bumps the github-actions group with 4 updates: [taiki-e/install-action](https://github.com/taiki-e/install-action), [actions/setup-java](https://github.com/actions/setup-java), [github/codeql-action/init](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action). Updates `taiki-e/install-action` from 2.87.27 to 2.87.29 - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](taiki-e/install-action@ab68953...8cca091) Updates `actions/setup-java` from 6.0.1 to 6.1.0 - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](actions/setup-java@de7274f...b843ebf) Updates `github/codeql-action/init` from 4.38.3 to 4.39.0 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@24c5418...6f2ac81) Updates `github/codeql-action/analyze` from 4.38.3 to 4.39.0 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@24c5418...6f2ac81) --- updated-dependencies: - dependency-name: taiki-e/install-action dependency-version: 2.87.29 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/setup-java dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: github/codeql-action/init dependency-version: 4.39.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: github/codeql-action/analyze dependency-version: 4.39.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] <[email protected]>
…des/github-actions-6a4e98548a into dependabot-upgrades
…, WebAssembly debugging and Hot Reload Completes the Razor plan: - Razor Pages and MVC views: tag helper hover, definition, completion and scope; @model, @Inject and @functions through the projection. - F# in Razor solutions: hover with F# docs, definition into the F# source, and references and rename across F#, C# and Razor, found by assembly and XML doc identity. - Editing features from Razor positions: selection ranges, code actions (add @using, generate a handler, extract to code-behind or a component), inlay hints, code lens, and call and type hierarchy. C# hierarchy kinds are PascalCase, as the host maps them. - Collocated files: .razor.css classes complete as LSP values and define to their selectors, an "import" call defines to its .razor.js, and VS Code nests the files. The attribute at a caret is read by the HTML tokenizer. - Blazor WebAssembly launches through the sharplsp-blazorwasm debugger and js-debug. - Razor Hot Reload: a Razor save swaps the additional document in every framework copy. A re-save of committed text answers applied with nothing to apply, for .cs saves too. - Review fixes: the host maps the Value completion kind, the F# Razor e2e builds its F# library, and fixture copies and hierarchy runners are shared.
…t new advisories RUSTSEC-2026-0382 (rustls-webpki 0.103.15 -> 0.103.16), RUSTSEC-2026-0381 (webpki-roots 1.0.9 -> 1.0.10), and GHSA-vfgh-jcmw-g37q / GHSA-gfr2-rv44-r23c (markdown-it 14.3.2 -> 14.3.3 under Eleventy) failed the dependency audit.
On Windows the rename's edit for Scores.fs and the document the test opened spell the drive letter differently, so a lookup by Uri.path found no edits. Key the edits by comparablePath(fsPath), merging spellings of one file, and assert exactly two files are edited.
…e code the pty reported VS Code's terminal process fires exitCode || 0, and on Windows node-pty can close conout before ConPTY hands over the exit code, so a run that returned 50 was reported as 0. Each fixture program now writes its code beside its binary; the test asserts that code exactly, and that the one task exit is that code or the pty's lost 0, which these programs never return.
…e code the pty reported VS Code's terminal process fires exitCode || 0, and on Windows node-pty can close conout before ConPTY hands over the exit code, so a run that returned 50 was reported as 0. Each fixture program now writes its code beside its binary; the test asserts that code exactly, and that the one task exit is that code or the pty's lost 0, which these programs never return.
Observe extension task completions and native build outputs through shared signals. Enumerate completed VSTest and MTP outputs without rebuilding, and keep build observations separate from user engagement. Cover F# and C# across all runner modes with real builds and exact MSBuild counters. Fixes #428
…erseded solution The background reload read the selected solution once, then waited behind a slow initial load. A solution switch landing in that gap opened the new solution first, and the reload's stale open then put the old one back: the F# sidecar lost the selected project and sharplsp/targetFramework answered null until a later reload. Every workspace open of a sidecar now holds one async lock, and the reload re-reads the selection under it, so the last selection always wins. The new watched_reload_selection e2e reproduces the interleaving with a slow 16-project solution. [DIAG-LSP-REFRESH]
… a load finishes lspkit#30 gives PullStore an engine generation that refreshes without superseding. A sidecar's diagnostics/refresh (a WorkspaceChanged) now uses it, so a pull racing a project reload completes against its snapshot instead of being cancelled for as long as the compiler keeps reporting changes. A compiler finishing the load of the selected workspace is different: pulls enumerated its inputs while it loaded, so workspace/initializationComplete and a completed loadSolution still supersede them, and the first successful pull after a selection carries every loaded compiler's reports. lspkit moves to main (53fd4c6), which also brings the .NET engine's endpoint check: a live non-.NET process is refused as UNSUPPORTED_RUNTIME before connecting, not after Windows' 30-second pipe timeout. [DIAG-ANALYSIS-CANCELLATION] [DIAG-IPC-INITIALIZED]
…s MSBuild policy The fixtures' .editorconfig root cut them off from the repository's rule suppressions, while the repository-wide Directory.Build.props still applied AnalysisMode=All and warnings-as-errors, so the Linux build failed on ProfileTarget's CA1031/CA1303. An empty Directory.Build.props now shadows the repository's, as the Razor, Blazor and F# profiling fixtures already do, and ProfileTarget declares the implicit usings and nullability it was written against. [DIAG-CATEGORIES-ANALYZER]
Owner adoption for a file outside the solution runs in the background, beside the sidecar's request queue. A workspace/open that replaced the graph meanwhile was undone when the stale adoption finished last: it inserted the old owner into the new selection and, for an empty one, marked it loaded with the old project's options. Every replacement now advances a workspace epoch before it awaits anything; an adoption commits only under the epoch it started in, checked and applied under one lock, and in-flight adoptions are keyed by epoch so a new selection never waits on a stale load. [SHARPLSP-ARCHITECTURE-PROJECTS-FSHARP-OWNING]
…witch's diagnostics despite competing pushes Every watched batch reopened the workspace with the stale-input restore enabled, and that restore rewrote obj/project.assets.json, which arrived as the next batch: one Razor run traced 102 asset events, every pull answering -32802 for a minute and hover starving. Batches made only of SDK restore outputs now reload the compiler without restoring; any other input keeps the configured restore gate. [DIAG-RESTORE] [DIAG-LSP-REFRESH] A framework switch's synchronous push treated a publication the generation gate rejected as done, so the switch could be announced before its diagnostics. The first push now retries under the newest generation until it publishes. [NETFX-CONTEXT] [DIAG-PUSH-GATE]
The restore gate proved assets current against the inherited inputs that exist now, so deleting a Directory.Build.props, Directory.Packages.props or NuGet configuration that took part in the last restore left nothing to compare and stale assets passed. Each sidecar now remembers the inherited inputs a project's assets were last proven against, when the gate passes or a restore succeeds, and a remembered input that has vanished sends the project back to the SDK. A failed restore keeps the old proof so the next open retries. [DIAG-RESTORE]
A build completion or a debounced discovery-input change started a sweep with nothing to catch it, and the per-operation sharplsp/configuration request could reject inside it while the server stopped: an unhandled rejection in the extension host, the stale tree left standing and nothing logged. A target that cannot be listed now becomes the failed listing the sweep already renders, logged as a warning, and both reactive launches catch and log what still escapes. [TEST-REACTIVITY] [TEST-BUILD-CONFIGURATION]
NuGet configuration is a restore input, but neither the reload predicate nor the shallow ancestor scope recognised nuget.config, so repairing a package source in an ancestor nuget.config never reached the compiler and closed-file diagnostics stayed stale. Both now accept it, case-folded. The diagnostic-input predicates move to paths/inputs.rs so paths.rs keeps its documentation and stays below the file-size ceiling. [DIAG-RESTORE]
… restore outputs, and retire racing identities A pull could reach the compiler between a watched edit and the background worker's closed-file synchronization, memoize the old text, and be answered unchanged forever, because the completed mutation only scheduled a refresh. A reload or disk sync now advances the pull revision when it completes. [DIAG-LSP-REFRESH] The reload reopened the global selection in both compilers, which a settings-driven switch never updated and which named the C# solution even for the F# compiler that opened the root. Each compiler now records the workspace it last opened under its open lock and a reload reopens exactly that; a settings switch records the selection for watchers and filters too. The reload's second replay sent every open buffer, so documents an explicit selection excluded re-adopted their old owners; it now replays only the buffers the compiler's previous graph owned, which keeps owners adopted for open files. [DIAG-TRUTH-RECOVERY] Restore outputs a compiler's own open wrote were reported after the load and reloaded it again: FsToolkit's 18 s F# reopen starved hover on CI. Outputs written before the latest completed open are now skipped; later ones, or their removal, reload without restoring again. [DIAG-RESTORE]
config.rs had grown past the 500-line ceiling with its inline test module; the tests now live in config_tests.rs, wired as the other host modules wire theirs. No test or behaviour changed. [CONFIG-EDITOR-BRIDGE]
A Linux debug-tests run lost ten minutes to an F# workspace/open that never answered, and the shard's artifact held only the extension host's logs, so the compiler's side was invisible. The shard now copies the host's and both sidecars' logs from the system temp folder into the uploaded logs. [DIST-CI-VSIX-SHARDS]
The Windows run found 4 diagnostics where the C# policy contract expects 3, and the bare count left no way to tell which document or rule produced the extra one. The workspace assertion now reports each document's codes, severities and lines. The assertion itself is unchanged. [DIAG-CONFIG]
Moving config.rs's tests into their own file exposed duplicates the duplication gate does not count inside an inline test module, and the new reload and discovery tests repeated their neighbours' setup and leaf assertions, so the gate failed at 5.952% against 5.95% and every test job was skipped. The configuration tests are inline again, their near-identical cases are table-driven (every case keeps its assertion) and config.rs stays below 500 lines; the reload tests share one select-and-open helper; the discovery test asserts its leaves with the kit's assertLeavesAre. The score is now 5.918%, below the last passing commit. [DIST-CI-DESLOP]
No behaviour changes; code moves with its documentation and spec IDs. - main.rs gives back this branch's growth: build watching joins build_monitor.rs, the inbound queue and shutdown fast path move to inbound.rs, and push republication moves to diagnostic_publish.rs (1889 -> 1688 lines, below main's 1706). - sidecar/manager.rs keeps its code and moves its inline tests to manager_tests.rs (1193 -> 821). - FSharpWorkspace.fs keeps the workspace state; owner-adoption epochs move to FSharpOwningEpoch.fs and workspace loading to FSharpWorkspaceLoading.fs (642 -> 482). [SHARPLSP-ARCHITECTURE-TIERS]
…Roslyn matches The four real-Roslyn cancellation tests failed only on Linux CI with "real analyzer did not signal entered". The fixture compiles its cooperative analyzer in a temp folder outside the repository, so dotnet chose the newest installed SDK: the Ubuntu runner ships 10.0.401, whose Roslyn is 5.9.0, while the C# sidecar hosts the Roslyn 5.6.0 that the repository's pinned SDK ships. Roslyn silently loads no analyzers from an assembly built against a newer compiler, so the analyzer never ran. The fixture now writes the repository's own global.json, as the VS Code suite's pinned fixtures already do. Reproduced red and green in the Linux devcontainer with the runner's SDK set. [DIST-RUNTIME-ACQUIRE] [DIAG-ANALYSIS-CANCELLATION]
The legacy push test pulls workspace/diagnostic only to pump the server's pushes, but it failed on the standard retriggerable -32802 that a completed watched-file mutation now correctly answers. The pump retries supersession through completed_pull_before like every other pull in the suite; any other error still fails the test. [DIAG-LSP-REFRESH]
Every watched batch reopened both compilers, whatever it touched. The VS Code debug suites create, build and delete scratch projects beside the selected solution, so CI reopened the C# workspace 37 times and the F# workspace 35 times in one Windows run: every reopen design-time built the fixture graph, perturbing the outputs the suites assert unchanged, and on Linux one F# reopen sat ten minutes in a restore of a scratch project. A batch now reloads a compiler only when it touches that compiler's loaded graph: a project or solution file of its language that it loaded or that its folder workspace discovers, configuration above one of its projects, a source added or removed inside one of its projects or edited there while unknown to it, or a restore output of one of its projects written after its own latest open. A project no compiler loaded reloads none. [DIAG-LSP-REFRESH] [DIAG-ARCHITECTURE-SCOPE] [DIAG-RESTORE]
…tage The C# sidecar registers its pinned SDK for in-process MSBuild through MSBUILD_EXE_PATH, MSBuildExtensionsPath and MSBuildSDKsPath, and every dotnet child inherited them. In a workspace without a global.json the CLI picks the newest installed SDK, which then loaded the pinned SDK's tasks and failed with MSB4018: the restore gate failed, workspace/open failed and the C# workspace never loaded. That is every machine whose newest SDK is not the pinned one, and the Linux CI runner's Razor tests. dotnet children now start without those variables, from one shared helper the restore gate and the F# design-time builds use. A restore of a scratch project also sat ten minutes with no bound, blocking every F# request behind it. Each restore stage is now bounded at two minutes, its whole process tree killed on overrun and reported as a failed restore naming the stage; stdin is closed, the evaluate stage runs without node reuse, and a failed restore logs what dotnet printed instead of dropping it. [DIAG-RESTORE]
netcoredbg on Windows exits by itself once its debuggee has ended, so the disconnect VS Code sends in reply to terminated can reach a process that never answers it. VS Code then held the dead session until its own disconnect timeout: the next launch found that session still active and a breakpoint edit reached an adapter that refused it. The router now answers every stop request still owed when the adapter dies, since a gone adapter is the stopped state. [DEBUG-ARCHITECTURE-ROUTER]
One project has several spellings: a link, or a Windows drive letter that VS Code lowercases while the file system and builds say D:. The C# sidecar adopted an owner under whichever spelling the opened file arrived with, and its design-time build rewrote obj inputs that spell the path, such as build_property.ProjectDir in the generated .editorconfig, a CoreCompile input. The user's next build then recompiled the project, which is why Debug rebuilt the referenced library on Windows. The owner now loads under project.restore.projectPath from its obj/project.assets.json when that names the same file. [SHARPLSP-ARCHITECTURE-PROJECTS-CSHARP-OWNING] [DEBUG-FEATURES-LAUNCH-BUILD]
MSBuild can wait forever in BuildSubmission.Execute on a project removed under it. On Linux CI the F# sidecar reloaded while a debug suite deleted its fixture, and the design-time build of that fixture's C# reference held workspace/open, and with it every F# request, for the full three-minute bound; the next F# test timed out. The F# design-time runner now watches the project file while MSBuild runs and, once it is gone, stops the process tree and reports the removal. The three-minute bound is unchanged. [SHARPLSP-ARCHITECTURE-PROJECTS-FSHARP-CSHARP-REFERENCES] [DIAG-LSP-REFRESH]
A respawned compiler replays the selected workspace before it answers, and a failed replay discards the connection so the next request retries. A scratch solution that a scaffolding test selected and then deleted stayed the remembered F# workspace; once the F# sidecar crashed, every respawn replayed the deleted solution, failed, and was discarded again, so the compiler respawned 99 times in two minutes and answered nothing. A remembered workspace that no longer exists is now skipped while it is missing and replayed again once it is back. The fake compiler the reload tests use moves to a shared test module so the recovery test reuses it. [DIAG-TRUTH-RECOVERY]
This was referenced Oct 27, 2026
MelbourneDeveloper
added a commit
that referenced
this pull request
Oct 27, 2026
Two changes, each behind tests. - **F# scripts outside any project (#497):** a script is never project-owned (`[SCRIPT-DETECT]`), but semantic queries only checked files against a loaded workspace. - In a folder with no F# project, the F# sidecar refused the workspace ("No .fsproj found"), and every query on a script answered nothing. - Beside a project that does not list it, a script was checked under that project's options, and answered nothing either. - Now a directory or selection with no F# project opens as an empty workspace (`[SCRIPT-DEGRADE]`). A script that no loaded project or script compiles is checked under the options its own directives resolve (`[SCRIPT-FSX-OPTIONS]`), with or without a workspace. - Three tests asserted the old refusal. They now assert the empty workspace the spec requires. - **Coverage floors:** Rust 95.8 → 96.25 and VS Code 96.96 → 97.4: what CI measured on #494, less the gate's one-point tolerance. The full local ci-prep passed before this was pushed: every lint gate, the .NET suites (158, 488 and 839 tests), both Rust shards with 97.24% coverage, and all 16 VS Code chunks that run on macOS. Refs #497. The issue closes once a released build is verified.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Consolidates every open SharpLsp branch into one, per the one-feature-branch rule.
What's in it
codeDescription), in C# and in F# (FSharpLint).global.json, including a remembered input that has since been deleted.dotnetchildren resolve the SDK their workspace selects instead of inheriting the C# sidecar's MSBuild registration, and every restore stage is bounded at two minutes.<Compile>items come from MSBuild evaluation ([Bug]: F# Bad wildcard support #455).objinputs, so the user's next build recompiled it.disconnectthe adapter exits before answering is answered by the router. On Windows netcoredbg exits as its debuggee ends, and VS Code held the dead session until its own timeout.main.chore/netfx-run-exit-flake: the .NET Framework run proof, already on this branch.feature/397-razor-phase4: squash-merged into main as Razor: Pages and MVC, F# in Razor, editing features, collocated files, WebAssembly debugging and Hot Reload #422, then recorded with-s oursbecause its remaining diff was superseded here.dependabot-upgrades: all grouped bumps.main(53fd4c6, Let engine changes refresh pulls without superseding them; refuse non-.NET targets before connecting lspkit#30). Pull revisions separate supersession from engine generations, and the .NET profiler refuses non-.NET targets before connecting.An adversarial review of this branch found eight defects (one critical, five high, one medium, one low). Each is fixed here behind a test that failed first.
Test plan