Ashes for Visual Studio Code
Full language support for the Ashes
pure functional programming language.
Features
- Syntax highlighting — TextMate grammar for
.ash files
- Diagnostics — real-time error and warning squiggles from the Ashes language server
- Formatting — auto-format on save using the canonical Ashes formatter
- Hover — type information and documentation on hover
- Go to Definition — jump to function and binding definitions
- Completions — context-aware IntelliSense suggestions
- Semantic tokens — rich token-level highlighting
- Debugging — integrated DAP support with breakpoints, stepping, and variable inspection (GDB / LLDB backends)
- Compile / Run / Test — run Ashes programs directly from the editor
Quick Start
- Install the extension from the VS Code Marketplace (or build locally).
- Open a folder containing
.ash files.
- The language server starts automatically when you open an Ashes file.
- Use Ctrl+F5 to run or Shift+F5 to compile the active file.
Run Ashes: Install Toolchain from the Command Palette (Ctrl+Shift+P) to
pre-download the compiler, language server, and debug adapter in one step.
Commands
| Command |
Default Key |
Description |
| Ashes: Compile |
Shift+F5 |
Compile the active .ash file or project |
| Ashes: Run |
Ctrl+F5 |
Compile and run the active file/project |
| Ashes: Run Tests |
— |
Run tests in the workspace or active file |
| Ashes: Install Toolchain |
— |
Download compiler, LSP, and DAP binaries |
Settings
| Setting |
Default |
Description |
ashes.autoStartLanguageServer |
true |
Automatically start the language server when an .ash file is opened. Set to false to disable automatic startup. |
ashes.debugger |
"gdb" |
Native debugger backend (gdb or lldb) |
ashes.lspServerPath |
"" |
Override the language server binary path |
ashes.dapServerPath |
"" |
Override the DAP server binary path |
ashes.compilerPath |
"" |
Override the compiler binary path |
Debugging
- Compile your program with
--debug:
ashes compile --debug myprogram.ash -o myprogram
- Add a launch configuration (or let the extension generate one):
{
"name": "Ashes: Launch",
"type": "ashes",
"request": "launch",
"program": "${workspaceFolder}/out/${workspaceFolderBasename}",
"cwd": "${workspaceFolder}",
"stopOnEntry": false,
}
Optional pre-launch task:
{
"label": "ashes: compile (debug)",
"type": "shell",
"command": "${command:ashes.getCompilerPath}",
"args": [
"compile",
"--debug",
"${file}",
"-o",
"${workspaceFolder}/out/${workspaceFolderBasename}",
],
"group": {
"kind": "build",
"isDefault": true,
},
"problemMatcher": [],
}
The ${command:ashes.getCompilerPath} variable lets the extension provide
the configured, bundled, or downloaded compiler path without requiring
ashes to be installed on your shell PATH.
- Press F5 to start debugging.
A Taste of Ashes
import Ashes.IO as io
import Ashes.List as list
type Shape =
| Circle(Float)
| Rect(Float, Float)
let area = fun (s) ->
match s with
| Circle(r) -> 3.14159 * r * r
| Rect(w, h) -> w * h
in
[Circle(5.0), Rect(3.0)(4.0), Circle(1.0)]
|> list.map(area)
|> list.map(io.print)
Workspace Trust
This extension requires a trusted workspace because it downloads and
executes external toolchain binaries. In an untrusted workspace, all
download-related features are disabled and an informational message is shown.
Requirements
- VS Code 1.110+
- Node 20.19+ (extension host)
- Linux x64, Linux arm64, or Windows x64
Links
License
MIT — see LICENSE.
| |