Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>functyNew to Visual Studio Code? Get it now.
functy

functy

Tyler Sarna

|
4 installs
| (0) | Free
Syntax highlighting, snippets, commands, and test integration for functy (.cty) files
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

functy for VS Code

Language support for functy — a small imperative language whose statement layer is functy's own (func/var/if/for/return) and whose expressions are real HCL expressions. functy source files use the .cty extension.

Features

  • Syntax highlighting — statement keywords, function declarations, type annotations, and shared HCL-style expression syntax (strings with ${} / %{} interpolation, heredocs, numbers, operators, and function calls).
  • Editing — // and # line comments, /* */ block comments, bracket matching, auto-closing pairs, and indentation.
  • Outline — func, const, var, type, and test declarations appear in the Outline view, breadcrumbs, sticky scroll, and "Go to Symbol" (⇧⌘O). Namespace-local (_-prefixed) declarations are listed too, marked private.
  • Namespaces — a namespaced file's declarations nest under its namespace node, so breadcrumbs and sticky scroll keep telling you which namespace you are editing (math.cty > acme::math > double) — the fact that matters, since a namespace changes the registered name of every function in the file. The namespace declaration and qualified calls (acme::math::double(21)) are highlighted, and a qualified name selects as a single word (double-click, ⌘D, word motions).
  • Snippets — namespace, func, _func, funcret, if, ifelse, forin, forc, while, switch, trycatch, test, var, const, type.
  • Commands — functy: Run File (functy run) and functy: Check File (functy check), with output in the functy output channel. Errors (including runtime errors) land in the Problems panel at their source location.
  • Check on save — .cty files are type-checked on save by default (a side-effect-free functy check); toggle with functy.checkOnSave. For live checking as you type, enable functy.checkOnType (opt-in).
  • Workspace — functy: Check Workspace and functy: Format Workspace commands, plus a functy task provider (check / test / fmt) for tasks.json.
  • Get Started — a walkthrough (Help → Welcome) and functy: Open Sample File to try everything on a ready-made example.
  • REPL — functy: Start REPL opens functy repl with the active file loaded; functy: Send Selection to REPL (also on the editor context menu) sends the selection, or the current line, to the running REPL.
  • Evaluate Selection — functy: Evaluate Selection evaluates the selection (or current line) via functy eval and shows the result inline.
  • Run with Arguments — functy: Run with Arguments… prompts for an entry function and arguments, then runs.
  • Formatting — Format Document / format-on-save backed by functy fmt.
  • Testing — co-located test "…" { … } blocks appear in the native Test Explorer, run via functy test --json. println() output and per-test results show in the Test Results view; a running test can be cancelled. Continuous run re-runs the affected tests when their file is saved.

Requirements

The extension shells out to the functy binary, and requires functy 0.9.0 or newer (it relies on eval, symbols, check --json -, and the --json reports). It warns on startup if the binary is missing or too old.

The namespace features degrade cleanly rather than requiring a newer binary: the syntax highlighting and word selection are static, and the outline's namespace and private markers come from optional symbols --json fields that an older functy simply omits. They light up once the binary supports namespaces.

Install it on macOS with Homebrew:

brew install tsarna/tap/functy

…or on any platform with Go:

go install github.com/tsarna/functy/cmd/functy@latest

By default the extension runs functy from your PATH. Point it elsewhere with the functy.path setting.

Settings

Setting Default Description
functy.path functy Path to the functy binary (a single executable, not a command line).
functy.runFunc main Entry function invoked by Run File. May be qualified (acme::math::main); a bare name is resolved if it is unambiguous across namespaces.
functy.checkOnSave true Type-check .cty files on save (side-effect-free).
functy.checkOnType false Type-check the unsaved buffer live as you type (debounced). Supersedes check-on-save when enabled.
functy.maxSteps (unset) Steps one function invocation may take before a runaway loop is aborted, passed as --max-steps. Unset uses functy's own default; 0 disables the limit. Needs functy 0.11.0+ — the flag is only passed when you set this.

Format-on-save uses the standard editor.formatOnSave setting.

License

MIT © Tyler C. Sarna

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft