A VS Code Extension for Tiltfiles
Improve Tiltfile authoring when working in VS Code
If you use Visual Studio Code, are new to Tilt and have been spending a lot of time switching between writing your Tiltfile
and reading our Tiltfile
API Reference, stop! Go install our new Tiltfile
extension and let us help you write Tiltfile
s more easily! And if you’re not a fan of VS Code, stay to learn about the components we used to build the extension. (You might be able to re-use what we built into Tilt to drive a Tiltfile
extension in your own editor!)
Our Tiltfile
extension is available in the Visual Studio marketplace, and can also be found in the Extensions sidebar inside VS Code. The extension requires you to have Tilt installed already; make sure you’re using the latest release to ensure you have all the features available.
Syntax Highlighting
Tiltfile
s are based on Starlark, a dialect of Python. The extension automatically highlights Starlark thanks to a TextMate bundle derived from Bazel’s VS Code Extension and Magic Python.
You can also use our TextMate bundle for syntax highlighting with other IDEs that support it.
Completion and Signature Help
A major reason for using an IDE like VS Code is to help you write code faster and more correctly with context-aware hints. The Tiltfile
extension adds symbol completion for Starlark builtin functions and methods, Tilt builtins, and any variables or functions you define in your Tiltfile
s. The documentation shown in pop-ups is sourced from the same code that generates our API docs.
When you type the opening parenthesis ((
) of a function or method, the extension gives help on the parameters to that function:
The extension has some basic type inference that will show only methods for Starlark strings, lists, or dictionaries when available, otherwise methods on all types will be presented.
Hover and Go to Definition
When you hover your cursor over a variable, function or method, the extension displays a documentation pop-up:
You can also type F12 (“Go to Definition”) with the cursor on (almost) any symbol and jump to the definition of it. (Symbols for which you can’t jump are Starlark/Tilt builtins and Tilt extensions. The latter can be fixed and has an issue open that you can follow.)
Load Statements
The extension is aware of Starlark load statements in your Tiltfile
s and makes the symbols you declare available for completion, signature help, and hover. It also can warn you about errors in your
load statements:
Live Errors
The extension detects when you have Tilt running, checks for any runtime errors in your Tiltfile, and underlines them. Since Tilt automatically re-runs your Tiltfile on change, this means you can edit your Tiltfile, hit save, and see errors right away, without leaving VS Code:
Finally, you may have noticed the “🌐 Tilt” bit in the status bar in the bottom right of VS Code. Click on it to open the Tilt UI in your browser.
A Language Server
Underneath the hood of the Tiltfile
extension is a Language Server Protocol (LSP) implementation built into Tilt. While the extension code itself is fairly thin, the bulk of the functionality is provided by the language server, most of which is provided by the starlark-lsp package. Milas investigated different ways of building a language extension and analyzing Starlark code, and we settled on building a language server in Go using the go.lsp.dev and Tree sitter libraries. Writing the LSP in Go allows us to embed starlark-lsp directly into Tilt, which makes for easy distribution. We ended up using Tree Sitter’s Python grammar to parse Starlark, which allows us to define builtins and their documentation in Python stub files that are parsed by starlark-lsp when the language server initializes.
Having a Tiltfile
language server means that implementing a Tilt extension in your editor of choice should not be difficult. Editors like Sublime Text, Vim and Emacs already have LSP client packages available, so it’s a matter of configuring a new language with a language server that runs the command tilt lsp start
.
We also wrote starlark-lsp to be Tilt-agnostic, so if you have some other Starlark-based application and want to build a language server extension for it, feel free to use or extend it for that purpose!
Let’s Hear It
If you have ideas for the Tiltfile
VS Code extension or the Starlark LSP server, let us know by filing an issue or contributing some code! Enjoy!