Skip to content

feat(fsharp): Ionide-parity code intelligence — code fixes, workspace symbols, interface stubs#124

Merged
MelbourneDeveloper merged 1 commit into
mainfrom
fsharp-ionide-parity
Jun 24, 2026
Merged

feat(fsharp): Ionide-parity code intelligence — code fixes, workspace symbols, interface stubs#124
MelbourneDeveloper merged 1 commit into
mainfrom
fsharp-ionide-parity

Conversation

@MelbourneDeveloper

Copy link
Copy Markdown
Collaborator

F# Ionide-parity code intelligence

Treats F# as a first-class citizen by closing four FsAutoComplete/Ionide parity gaps, each proven at the sidecar IPC, Rust full-stack, and VSIX user-interaction layers. Zero C# feature changes — all F#.

Feature Spec ID What it does
Remove unused open [FS-CODEFIX-UNUSEDOPEN] Quick fix that deletes an unused open line (the SLSPF0102 hint previously had no fix)
Simplify name [FS-CODEFIX-SIMPLIFYNAME] Quick fix that strips a redundant qualifier (System.DateTime.MinValueDateTime.MinValue)
workspace/symbol for F# [FS-WORKSPACE-SYMBOL] Editor "Go to Symbol in Workspace" (Ctrl-T) now finds F# symbols via the FCS sidecar — the host has no F# tree-sitter grammar
Implement interface [FS-CODEFIX-INTERFACESTUB] Generates member stubs via FCS InterfaceStubGenerator, completing the union / record / interface stub trio

DRY

Shared FCS findings (unused opens, simplifiable names) extracted to FSharpLocalAnalysis.fs so the always-on analyzer hints and the code fixes are computed once and can never diverge.

Docs

Tests (F#-weighted, many interactions + assertions each)

  • +2 F# sidecar IPC e2e (SidecarEndToEndTests.fs)
  • +1 Rust full-stack e2e (tests/e2e_modules/fsharp.rstest_full_stack_fsharp_workspace_symbol)
  • +4 VSIX interaction tests (fsharp-lsp-codefixes.test.ts, fsharp-lsp-workspace-symbol.test.ts)

CI prep — full local run, clean first pass (nothing fixed during the pass)

  • Lint: rust (fmt + clippy -D warnings), zed, csharpier, dotnet, pack-smoke, prettier, vsix (eslint + tsc) — all green
  • .NET 783 tests · Rust 644/644 · VSIX 1319 tests
  • Coverage ratcheted up (vscode-extension 84.86% → 85.06%)

References #122 (auto-open follow-up) and #123 (NuGet remainder) — both kept open as tracking issues.

… symbols, interface stubs

Treat F# as a first-class citizen by closing four FsAutoComplete/Ionide parity
gaps, each proven at the sidecar IPC, Rust full-stack, and VSIX interaction layers:

- Remove unused `open` quick fix (SLSPF0102 → deletes the open line)
  [FS-CODEFIX-UNUSEDOPEN]
- Simplify name quick fix (SLSPF0103 → strips the redundant qualifier prefix)
  [FS-CODEFIX-SIMPLIFYNAME]
- workspace/symbol for F# — editor "Go to Symbol in Workspace" (Ctrl-T) now finds
  F# symbols via the FCS sidecar, since the host has no F# tree-sitter grammar
  [FS-WORKSPACE-SYMBOL]
- "Implement interface" code action via FCS InterfaceStubGenerator, completing the
  union / record / interface stub trio [FS-CODEFIX-INTERFACESTUB]

The shared FCS findings (unused opens, simplifiable names) are extracted to
FSharpLocalAnalysis.fs so the always-on analyzer hints and the code fixes are
computed once and can never diverge.

Docs reconciled: FSAC parity matrix + analyzers spec updated; the shipped
NuGet-browser implementation plan removed (remaining items tracked in #123);
completion auto-open deferred with its blocker documented (#122).

Tests: +2 F# sidecar IPC e2e, +1 Rust full-stack e2e, +4 VSIX interaction tests
(many interactions and assertions each). Full local suite green: .NET 783,
Rust 644, VSIX 1319; coverage ratcheted up across Rust and the VS Code extension.
@MelbourneDeveloper MelbourneDeveloper merged commit a22dd4e into main Jun 24, 2026
12 checks passed
@MelbourneDeveloper MelbourneDeveloper deleted the fsharp-ionide-parity branch June 24, 2026 22:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant