Syntax highlighting and editor configuration for the Overt programming
language. Activates on any
file with the .ov extension.
Overt is an agent-first language designed to be written, read, and maintained primarily by LLM agents. The extension makes Overt source readable in the editor for the human-in-the-loop review and audit roles that the language explicitly accommodates.
Features
Syntax highlighting via a TextMate grammar. The grammar is updated alongside the language; if a recent language addition isn't colored, the extension is behind and a refresh is in order.
- Comments:
//line comments and/* ... */block comments. - String literals with escape sequences and string interpolation:
"hello, ${name}"and the bare$nameform both highlight inside the string body. - Numeric literals: decimal, hexadecimal (
0x...), binary (0b...), and floating-point with optional exponent. - Keywords: control flow (
if,else,match,for,in,while,loop,break,continue,return,parallel,race,trace,with), declarations (fn,let,mut,record,enum,type,module,use,as,pub,extern,unsafe,where,await), and constants (true,false,Ok,Err,Some,None). - Effect rows:
!{io},!{io, async},!{E}. Concrete effect names (io,async,inference,fails) and effect-row variables (uppercase identifiers) get distinct scopes. - Annotations:
@doc("..."),@csharp("..."),@derive(...), and any other@name-prefixed marker. - Postfix
.await: highlighted as a single syntactic unit, the way Rust and JavaScript editors color it. - Operators: pipe (
|>), pipe-propagate (|>?), propagate (?), arrows (->,=>), comparison, logical, arithmetic. - Discard target: bare
_inlet _ = exprand pattern positions. - Built-in types:
Int,Int64,Float,Bool,String,Unit,Option,Result,List,Map,Set,Task,IoError, and the standard error and FFI-boundary types. - Built-in functions: prelude calls (
println,eprintln,map,filter,fold,all,any,try_map,par_map,size,length,len,args). - Module-qualified stdlib calls:
String.chars(...),Int.range(...),List.at(...), and similar shapes get a function-call scope distinct from plain field access.
Editor configuration via language-configuration.json:
- Auto-closing pairs for
{},[],(), and"...". - Surrounding pairs for the same set, so selecting text and typing
(wraps the selection. - Comment toggling for
//and/* */via the standard VS Code shortcut. - Indent / outdent rules tied to
{and}. - A
wordPatternso double-click selects identifiers cleanly without breaking on dots or operators.
Installation
From the Marketplace: search for "Overt" under publisher
paulmooreparks, or use the command palette: Extensions: Install Extensions then search.
From a local .vsix:
bash scripts/build-vsix.sh # wraps `vsce package`
code --install-extension vscode-extension/overt-language-<version>.vsix
The repository's vscode-extension/ directory contains the source
for the extension. The scripts/build-vsix.sh wrapper (with a
PowerShell twin) installs vsce on demand and produces the .vsix at
the version listed in package.json.
Every push to main that touches vscode-extension/ rebuilds the
.vsix in CI and uploads it as a workflow artifact under
Actions → vscode-extension,
so a fresh build is always one click away even without local
Node.js.
Releasing a new version
The Marketplace rejects duplicate versions, so before each publish
the patch in vscode-extension/package.json must be bumped (e.g.
0.1.1 → 0.1.2). Add a corresponding entry to CHANGELOG.md,
push, then either drag the artifact onto
Marketplace → manage
or run vsce publish with a logged-in publisher.
Status
The extension is intentionally minimal. A full language server
(diagnostics, hover, go-to-definition, rename) is scoped in
docs/tooling/lsp.md
and will land as a separate Overt.LanguageServer companion when the
language stabilizes enough to justify the investment.
Links
- Overt repository
- Design document (the source of truth for language semantics)
- Agent-authoring reference (the operational guide for writing
.ov) - Examples (living test cases that exercise every feature)
License
Apache 2.0. See LICENSE.