Tsgo
Extension for Zed to support TypeScript Native
#tsgo: Native TypeScript Compiler Integration for Zed
This extension integrates TypeScript v7's native Go-based compiler and language server into the Zed editor, delivering enhanced performance and efficiency for TypeScript development.
#🚀 Why the native compiler?
With TypeScript 7, Microsoft shipped the TypeScript compiler as a native version written in Go, with significant performance improvements:
- Faster Compilation: Achieves up to 10x speed improvements in large projects.
- Reduced Memory Usage: Optimized memory handling in native execution.
- Improved Editor Performance: Faster IntelliSense and language services.
- Scalability: Better handling of large codebases.
Example Benchmarks:
- VS Code: 77.8s → 7.5s (10.4x speedup)
- Playwright: 11.1s → 1.1s (10.1x speedup)
- TypeORM: 17.5s → 1.3s (13.5x speedup)
Source: Microsoft Developer Blog
#🛠 Installation
- Open Zed's Extensions page.
- Search for
TypeScript Language Serverand install the extension.
#⚙️ Configuration
#Basic Setup
Enable typescript-ls in your Zed settings:
{
"languages": {
"TypeScript": {
"language_servers": [
"typescript-ls",
"!vtsls",
"!typescript-language-server",
"...",
],
},
"TSX": {
"language_servers": [
"typescript-ls",
"!vtsls",
"!typescript-language-server",
"...",
],
},
},
}
You can also use typescript-ls in tandem with other language servers (e.g. typescript-language-server or vtsls). Zed will use typescript-ls for features it supports and fallback to the next language server in the list for unsupported features.
To do that with vtsls, use:
{
"languages": {
"TypeScript": {
"language_servers": [
"typescript-ls",
"vtsls",
"!typescript-language-server",
"...",
],
},
"TSX": {
"language_servers": [
"typescript-ls",
"vtsls",
"!typescript-language-server",
"...",
],
},
},
}
#Advanced Configuration
#Specifying a Package Version
By default, the extension installs and uses the latest version of the typescript npm package. To pin a specific version (must be >= 7.0.0, older versions have no native language server):
{ "lsp": { "typescript-ls": { "settings": { "package_version": "7.0.2" } } } }
This is useful for:
- Ensuring consistent behavior across the project
- Testing specific versions
- Avoiding automatic updates that might introduce issues
#Inlay Hints
The extension sets defaults to make typescript-ls send back inlay hints when Zed has inlay hints enabled. To show them, enable Zed's inlay_hints setting:
{ "inlay_hints": { "enabled": true } }
You can override the default inlay hint settings in your Zed settings:
{ "lsp": { "typescript-ls": { "settings": { "typescript": { "inlayHints": { "parameterNames": { "enabled": "none" }, "parameterTypes": { "enabled": false }, "variableTypes": { "enabled": false }, "propertyDeclarationTypes": { "enabled": false }, "functionLikeReturnTypes": { "enabled": false }, "enumMemberValues": { "enabled": false } } } } } } }
Use the same settings under javascript to override them for JavaScript.
#Code Lens
The extension enables references and implementations code lenses by default. These show reference counts and implementation counts above functions, classes, and interfaces. To use them, enable Zed's code_lens setting:
{ "code_lens": "on" }
You can override the default code lens settings in your Zed settings:
{ "lsp": { "typescript-ls": { "settings": { "typescript": { "implementationsCodeLens": { "enabled": false }, "referencesCodeLens": { "enabled": false } } } } } }
Use the same settings under javascript to override them for JavaScript.