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 into build:vsix via --readme-path). Needed because the repository is private, so the URLs vsce rewrites relative paths to would never resolve. The repo README.md keeps 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 from palettes.ts, so galleries regenerate when themes change.
  • repository metadata in package.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–6 in 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.colorCustomizations block only for the active harp theme (instead of all twelve), following theme switches automatically — keeping settings.json minimal. 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) and harp.themes.surfaces (unified/separated) plus the Harp: Select Theme Style command (QuickPick of the four combinations). Implemented as theme-scoped workbench.colorCustomizations blocks 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 behind terraform 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 full spaceAfterToken spacing 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, matching terraform fmt exactly.

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(…)) while in [ 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 fmt over 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 live terraform fmt.

[0.1.1] - 2026-06-05

Fixed

  • Spacing parity with terraform fmt: the spread/expand operator is now tight against its operand (xs..., not xs ...), 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 fmt parity: 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 real terraform fmt output via a golden-file corpus and a differential dev tool.
  • harp.hcl.enable setting to toggle the HCL formatter (language-overridable).
  • Tooling: native Node node:test unit tests (lexer round-trip + format parity), vscode-tmgrammar-test grammar scope tests, and a go-task Taskfile.yml.

Known limitations

  • String bodies are treated verbatim, so the terraform fmt interpolation 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 / Formatter contracts, a language registry, and the formatting-provider wiring.