Changelog
All notable changes to Harp are documented here. The format follows Keep a Changelog, and the project adheres to Semantic Versioning.
[0.4.3] - 2026-06-05
Fixed
- README images now render in the Extensions ▸ Details view fully offline:
the packaged README inlines every preview as a data URI
(
npm run build-readme, wired intobuild:vsixvia--readme-path). Needed because the repository is private, so the URLs vsce rewrites relative paths to would never resolve. The repoREADME.mdkeeps relative paths for GitHub rendering;docs/is excluded from the package.
[0.4.2] - 2026-06-05
Added
- A proper README: feature overview, install, formatter before/after and parity notes, a 12-theme visual gallery, the file-icons preview, the four style-switching looks, settings/commands tables and development docs.
npm run build-previews/task build-previews— generates the README preview images (mini editor mocks per theme, icons mock, style 4-up) straight frompalettes.ts, so galleries regenerate when themes change.repositorymetadata inpackage.json.
[0.4.1] - 2026-06-05
Changed
- «harp — minimal icons» now hides the Explorer twistie arrows
(
hidesExplorerArrows: true), matching the design reference — folder rows show only the outlined square chip. Folders still expand/collapse on click.
[0.4.0] - 2026-06-05
Added
- «harp — minimal icons» file-icon theme (from the same design):
outlined-square folders and quiet files, language-colored filled squares for
code files; ~150 mappings covering Go, TS/JS, Rust, C/C++, Python, Ruby and
the IaC/devops family (
.tf/.tfvars/.hcl/Packer/Nomad, Dockerfile & compose, Helm, GitLab CI/Jenkins/Skaffold, Ansible/Vagrant, manifests). Contributed via the same manifest + codegen pattern; integrity guarded by a unit test (definitions ↔ references ↔ shipped SVGs).
[0.3.2] - 2026-06-05
Fixed
- Bracket-pair colorization now matches the design: all 12 themes define
editorBracketHighlight.foreground1–6in the palette’s muted operator color (no more default gold/pink/blue rainbow brackets) and a soft red for unexpected brackets.
[0.3.1] - 2026-06-05
Changed
- The theme-style overlay now writes a
workbench.colorCustomizationsblock only for the active harp theme (instead of all twelve), following theme switches automatically — keepingsettings.jsonminimal. Blocks are still removed entirely on the default style or when a non-harp theme is active.
[0.3.0] - 2026-06-05
Added
- 12 dark minimal color themes (Graphite Mono, Cold Slate, Carbon Warm, Midnight Lavender, Ink Contrast, Dusk Duotone, Moss Sage, Ember Amber, Rose Ash, Steel Blue, Pine Teal, Sand Mono), registered through the same manifest + codegen pattern as languages — adding a theme is data-only.
- Theme style switching across all harp themes at once: settings
harp.themes.statusBar(neutral/accent) andharp.themes.surfaces(unified/separated) plus the Harp: Select Theme Style command (QuickPick of the four combinations). Implemented as theme-scopedworkbench.colorCustomizationsblocks owned by the extension and removed when the settings return to defaults. - Extension icon — generated lavender harp glyph (
npm run build-icon, zero-dependency PNG writer).
[0.2.0] - 2026-06-05
Changed
- The formatter core is now a faithful port of hclwrite’s
format.go(the engine behindterraform fmt): hclsyntax-style template tokenization (strings and heredocs are token sequences whose${…}/%{…}parts are real tokens), the exact indent-stack algorithm (template delimiters count as brackets; lead counting stops at heredoc openers), the fullspaceAfterTokenspacing table, and independent alignment runs for=and trailing comments. - Expressions inside interpolations are now formatted (
"${f( 1,2 )}"→"${f(1, 2)}"), including inside heredoc bodies’ interpolations, while literal template text stays byte-for-byte verbatim.
Added
- terraform’s pure-interpolation unwrapping: a whole attribute value that is
exactly one interpolation becomes the bare expression (
x = "${var.y}"→x = var.y), only in block bodies — pairs inside object constructors and list elements are preserved, matchingterraform fmtexactly.
Fixed
- CRLF line endings and trailing blank lines at end of file are preserved (terraform does not rewrite them).
- Keywords before
(are tight (in(…),if(…)) whilein [keeps its space; comment alignment now spans non-attribute lines (e.g. closing braces) and breaks on lines without a trailing comment. - Parity verified by differential sweep against
terraform fmtover 2100+ real-world files (terraform-aws-modules vpc/iam/eks/rds-aurora, cloudposse components) with zero differences.
[0.1.2] - 2026-06-05
Fixed
- Comments are emitted verbatim, matching
terraform fmt: trailing whitespace is preserved inside comments while still being stripped from code lines.
Added
- Greatly expanded the golden-file parity corpus (for-expressions, conditionals,
functions, operators, attribute/index/splat access, heredocs, type
constraints, dynamic blocks, multi-block files, collections, comments,
literals) plus the project’s real Terragrunt files — verified byte-identical
to
terraform fmt. scripts/sweep.sh(npm run sweep -- DIR): a differential parity check that diffs every HCL file under a directory against a liveterraform fmt.
[0.1.1] - 2026-06-05
Fixed
- Spacing parity with
terraform fmt: the spread/expand operator is now tight against its operand (xs..., notxs ...), and a trailing comma in a single-line collection keeps a space before the closer ([1, 2, ]).
[0.1.0] - 2026-06-04
Added
- HCL syntax highlighting via a self-contained TextMate grammar
(
source.hcl): comments, blocks, attributes, strings +${…}interpolation, heredocs, numbers, booleans/null, keywords, functions and operators. - HCL formatter with
terraform fmtparity: 2-space indentation (±1 level per line),=and trailing-comment alignment within attribute runs, canonical spacing for operators / calls / collections / unary, and verbatim preservation of blank lines and heredoc bodies. Validated against realterraform fmtoutput via a golden-file corpus and a differential dev tool. harp.hcl.enablesetting to toggle the HCL formatter (language-overridable).- Tooling: native Node
node:testunit tests (lexer round-trip + format parity),vscode-tmgrammar-testgrammar scope tests, and a go-taskTaskfile.yml.
Known limitations
- String bodies are treated verbatim, so the
terraform fmtinterpolation rewrites ("${ expr }"→expr, and trimming inside${ … }) are not applied. - Whole-document formatting only (no range or on-type formatting).
[0.0.1] - 2026-06-04
Added
- Project scaffold: TypeScript (strict, bundler module resolution) + esbuild
bundling, ESLint flat config, packaging via
@vscode/vsce. - HCL language registration (
.hcl) with a language configuration: comments (#,/* */), brackets, auto-closing / surrounding pairs, indentation and folding rules. - Core engine seams:
LanguageModule/Formattercontracts, a language registry, and the formatting-provider wiring.