- For background/context review
.github/copilot-instructions.md; no Cursor rules exist. - Restore tools before anything:
dotnet tool restore. - Build everything:
dotnet build. - Run whole test suite:
dotnet test. - Run LSP tests:
dotnet test -f net8.0 ./test/FsAutoComplete.Tests.Lsp/FsAutoComplete.Tests.Lsp.fsproj. - Run single test:
dotnet test -f net8.0 ./test/FsAutoComplete.Tests.Lsp/FsAutoComplete.Tests.Lsp.fsproj --filter "FullyQualifiedName~Name". - Format code before commits:
dotnet fantomas src/ test/. - Use Paket for deps; edit
paket.dependenciesplus per-projectpaket.references. - Prefer
dotnet fsi build.fsx -- -p ScaffoldCodeFix Namefor new code fixes. - Code style follows F# community conventions and repository
.editorconfig. - Keep modules focused; pair public APIs with
.fsifiles. - Order
openstatements deterministically, group by namespace depth, no unused imports. - Favor immutable values, descriptive identifiers (PascalCase types/modules, camelCase values/functions).
- Add explicit types when readability benefits or API surface is exposed.
- Handle errors with
Result/Async<Result<_,_>>, railway helpers, and specific error DU cases over exceptions. - Async work should honor cancellation tokens provided by LSP context.
- Keep LSP handlers non-blocking; push IO or long CPU work onto async workflows.
- Logging uses Serilog via FsAutoComplete.Logging; include actionable context, respect levels.
- Tests live beside feature directories; keep cases focused and realistic, no deleting existing coverage.