VS Code FScript Extension
Requires VS Code 1.91 or later. Extension development and packaging require Node.js 22 or later.
This extension provides:
.fss language registration
- TextMate syntax highlighting, including
numeric type annotations
- LSP client wiring to
FScript.LanguageServer
- Configurable inlay hints and server settings
Numeric Types
Hover and inlay hints display unresolved arithmetic types as numeric:
let add x y = x + y
// add: (x: numeric) -> (y: numeric) -> numeric
let addInt x (y: int) = x + y
// addInt: (x: int) -> (y: int) -> int
Each add call accepts either two integers or two floats. Mixed numeric types and nonnumeric operands produce diagnostics; no implicit conversion is performed. numeric is also supported in explicit annotations and syntax highlighting. Remainder (%) accepts integers only.
See the type-system guide for the type hierarchy.
Development
From vscode-fscript/:
npm install
Then run the extension in VS Code (F5) from this repository.
Run npm test to check extension activation, logging-channel compatibility, startup failures, and shutdown. These JavaScript regression tests live in tests/FScript.LanguageServer.Tests/ and run alongside the .NET language-server tests in CI.
The extension depends on a .NET runtime for FScript.LanguageServer. It requests runtime acquisition through the VS Code .NET Install Tool integration (ms-dotnettools.vscode-dotnet-runtime) and falls back to dotnet from PATH when needed.
Release
The extension is published on tag pushes only, to both:
- VS Code Marketplace
- Open VSX
Release checklist:
- Update
vscode-fscript/package.json version.
- Update root
CHANGELOG.md (the extension changelog points to this file).
- Commit and push.
- Push tag
vX.Y.Z matching package.json version.
The CI workflow validates that tag version and extension version are identical before publishing.
Settings
fscript.lsp.enabled: enable/disable LSP features.
fscript.inlayHints.enabled: toggle inlay hints from the language server.
fscript.server.path: optional custom path to FScript.LanguageServer.dll.
fscript.server.logLevel: requested server log level (error, warn, info, debug).
fscript.repl.command: shell command used to start REPL in the extension terminal. Default is auto (prefer local workspace CLI via dotnet run, then fallback to fscript).
Commands
FScript: Open REPL: opens (or reuses) an FScript REPL terminal and starts REPL.
FScript: Send Selection to REPL: sends current selection to the REPL terminal, preserving single top-level let bindings for later REPL use.
FScript: Execute Current Script in REPL: sends full active .fss document to the REPL terminal as one atomic block.
FScript: Show Language Server Output: opens language server logs.
FScript: View AST: renders AST JSON from the active file.
FScript: View Inferred AST: renders inferred AST JSON from the active file.
Logs and Status
- Run command:
FScript: Show Language Server Output to open server logs.
- A status-bar item shows server lifecycle:
starting... spinner during initialization
FScript with check mark when ready
- error indicator when startup fails
The extension starts the language server with one of these strategies:
- Custom path from
fscript.server.path (if configured)
- Packaged server:
server/FScript.LanguageServer.dll
- Local development fallback: builds
../src/FScript.LanguageServer/FScript.LanguageServer.csproj and runs bin/Debug/net10.0/FScript.LanguageServer.dll
Map annotations use postfix forms such as string map[int] and string map[Priority]. String-keyed maps appear as string map, including when annotated with map[string]. Hover and inlay hints preserve inferred key types.