The LPC (FluffOS) VS Code extension: syntax highlighting, structural
diagnostics as you type, Format Document / format-on-save, and optional
real compiler errors via the FluffOS lpcc front-end.
The extension source lives here (extension/). Its language engine is
an output of the fluffos driver
repository, pinned via the fluffos/ git submodule: the grammar-driven
tokenizer/formatter/linter and grammar contract
(fluffos/tools/lpc-syntax/) are synced into extension/lib/ and
extension/syntaxes/ at build time. The engine is generated from the
compiler's own grammar, so the extension can never drift from what the
driver actually accepts — and every release is traceable to an exact
driver commit.
The extension also ships a Compiler Explorer (LPC: Open Compiler Explorer, or the circuit-board icon on any LPC editor): per-file Source /
Tokens / AST / Bytecode / Preprocessed views of the real compile pipeline,
with breadcrumbs, an AST graph, and click-through links back to the source.
Source and Tokens work out of the box (bundled grammar tokenizer); the
compiler stages need the lpc.lpcc.path + lpc.lpcc.configFile settings.
With an lpcc that supports --json (fluffos ≥ 2026-07), tokens carry
grammar names and every AST node is click-to-source; older lpcc falls back
to parsing the human-readable dumps.
Planned next: build lpcc to WebAssembly upstream (it is native-only in
the fluffos CMake today) and ship it as a consumed artifact here, so the
Explorer's compiler stages and save-time diagnostics work with zero native
setup — and keep the extension web-compatible.
-
Download the
.vsixfrom the latest release and run:code --install-extension fluffos-lpc-<version>.vsix
-
Or, once published, install LPC (FluffOS) from the VS Code Marketplace / Open VSX.
Features and settings are documented in
extension/README.md (the packaged extension
README).
| Path | What |
|---|---|
extension/ |
The extension source: extension.js, manifest, language configuration, packaged README. |
extension/lib/, extension/syntaxes/ |
Generated, gitignored — synced from the submodule by the build; never edit, never commit. |
fluffos/ |
Git submodule — the pinned fluffos commit the language engine is taken from. |
scripts/build.mjs |
Syncs the engine from the pin, stages extension/ into out/extension/, patches version + fluffos.commit metadata, packages the .vsix with @vscode/vsce. |
scripts/test.mjs |
Extension-local checks (manifest, extension.js wiring, synced-engine smoke test). |
.github/workflows/ci.yml |
Push/PR: upstream tooling tests + extension tests + packaging dry run; uploads the .vsix artifact. |
.github/workflows/release.yml |
Tag vX.Y.Z or manual dispatch: GitHub Release with the .vsix; optional Marketplace / Open VSX publish. |
.github/workflows/bump-fluffos.yml |
Weekly + manual: bumps the submodule to latest fluffos master, tests, opens a PR. |
Requires Node ≥ 18 and git; no npm install (@vscode/vsce is fetched by
npx at package time).
git clone --recurse-submodules https://github.com/fluffos/fluffos-vscode
cd fluffos-vscode
node scripts/test.mjs # sync + all local checks (offline-friendly)
node scripts/build.mjs # out/fluffos-lpc-<version>.vsixFor extension development: run node scripts/build.mjs --no-package once
(populates extension/lib/ and extension/syntaxes/), then open
extension/ in VS Code and press F5 (Run Extension).
-
Make sure
mainis green and the submodule points where you want it (merge the latest "Bump fluffos pin" PR if one is open). -
Either push a tag:
git tag v0.1.0 && git push origin v0.1.0or run the Release workflow from the Actions tab with the version as input (it creates the tag for you).
The workflow re-runs the tests, packages fluffos-lpc-<version>.vsix, and
creates a GitHub Release with the pinned fluffos commit noted. If the
VSCE_PAT (VS Code Marketplace) and/or OVSX_PAT (Open VSX) repository
secrets are configured, it also publishes there; otherwise those steps are
skipped.
The Bump fluffos pin workflow does this weekly (and on demand from the Actions tab). By hand:
git -C fluffos fetch origin master
git -C fluffos checkout origin/master
node scripts/test.mjs && node scripts/build.mjs
git add fluffos && git commit -m "Bump fluffos submodule to $(git -C fluffos rev-parse --short HEAD)"- Extension behavior (activation, diagnostics plumbing, settings,
manifest, lpcc integration): here, under
extension/. - The language engine (tokenizer, formatter, linter, grammar contract,
TextMate grammar): upstream in fluffos
tools/lpc-syntax/— it is generated from the compiler's grammar and tested there. Change it there, then bump the pin here. Never editextension/lib/orextension/syntaxes/; the build overwrites them.
This repository is licensed under GPL-3.0. The extension
package declares MIT (extension/package.json), and the packaged .vsix
ships the MIT license text accordingly.