{"slug": "lsp-ember-for-sublime-text", "title": "LSP-ember for Sublime Text", "summary": "A developer created LSP-ember, a Language Server Protocol bridge that brings autocompletion, go-to-definition, and hover support to Ember's .gjs and .gts template-tag files in Sublime Text. The package mediates between Sublime Text and Glint's @glint/ember-tsc and @glint/tsserver-plugin, which handle the underlying TypeScript integration. The developer also split the Template Tag syntax package into separate Glimmer JS and Glimmer TS definitions, one per file extension, and is seeking community testing and modern code snippets.", "body_md": "In modern and legacy Ember projects (3.28 or above), we can use `<template>` tags—files with the extension `.gjs` or `.gts`—to write components, routes, and tests with fewer Emberisms. For each new file type, however, we need to instruct IDEs how to deliver a good developer experience.\n\nIn May 2025, I had published [Template Tag](https://github.com/ijlee2/sublime-syntax-definition-template-tag), which provides syntax highlighting in Sublime Text. Reading code became easy, but writing remained hard: As soon as a `*.{js,ts}` file turned `*.{gjs,gts}`, tools like **autocompletion**, **go-to-definition**, and **hover** became inaccessible. These tools are possible thanks to [LSP (Language Server Protocol)](https://microsoft.github.io/language-server-protocol).\n\nLast week, I created [LSP-ember](https://github.com/ijlee2/LSP-ember) to bridge the gap. The implementation (scaffolded with Claude Code) is rather straightforward, because Glint ([`@glint/ember-tsc`](https://github.com/typed-ember/glint/tree/main/packages/ember-tsc) and [`@glint/tsserver-plugin`](https://github.com/typed-ember/glint/tree/main/packages/tsserver-plugin)) takes care of the hard parts (e.g. talking to TypeScript). LSP-ember is simply a mediator between Sublime Text and Glint.\n\nThanks to [the feedback from `@rchl` and `@jwortmann`](https://github.com/sublimehq/package_control_channel/pull/9559), syntax highlighting is now done more correctly. Instead of 1 syntax definition (Template Tag) supporting `.gjs` and `.gts`, there are now 2 (Glimmer JS and Glimmer TS)—one for each type. You can install the package `Template Tag` to get both definitions.\n\nBefore: `src/Template Tag.sublime-syntax`\n\n```\nname: Template Tag\nscope: source.template-tag\nextends:\n  - Packages/JavaScript/TypeScript.sublime-syntax\nfile_extensions:\n  - gjs\n  - gts\ncontexts:\n  # ... (misuses ts-type-parameter-list)\n```\n\nAfter: `src/Glimmer JS.sublime-syntax`\n\n```\nname: Glimmer JS\nscope: source.gjs\nextends:\n  - Packages/JavaScript/JavaScript.sublime-syntax\nfile_extensions:\n  - gjs\ncontexts:\n  # ... (uses class-body-contents)\n```\n\nAfter: `src/Glimmer TS.sublime-syntax`\n\n```\nname: Glimmer TS\nscope: source.gts\nextends:\n  - Packages/JavaScript/TypeScript.sublime-syntax\nfile_extensions:\n  - gts\ncontexts:\n  # ... (uses class-body-contents)\n```\n\nNote, the separation allowed Glimmer JS and Glimmer TS to extend JavaScript and TypeScript, respectively. That is, the code matches how we think about `.gjs` and `.gts`: They are just `.js` and `.ts` with one or more `<template>` tags.\n\nI still ran into trial and error, because I didn't know what files are needed for an LSP, how Sublime puts packages together, and how the two Glint packages work (to see if they need to be configured in LSP-ember). I wasn't also sure what's the best way to test an LSP locally; symlinks happened to work.\n\n```\nln -s \"$HOME/<path/to/my/repo>/LSP-ember\" \"$HOME/Library/Application Support/Sublime Text/Packages/LSP-ember\"\n```\n\nI hope to gain a better understanding over time.\n\nLSP-ember helps Sublime Text be on par with [VS Code and a couple of other IDEs](https://guides.emberjs.com/release/code-editors). Moreover, the package `Template Tag` now provides 2 syntax definitions—one for `.gjs` and another for `.gts`. The separation will help us maintain code.\n\nSince LSP-ember depends on the versions of TypeScript and Glint, I need your help with testing and reporting issues. You can also contribute by providing modern code snippets. The ones that exist for Sublime Text show patterns from Ember 0.x-2.x. The repo [snippets](https://github.com/ember-tooling/snippets) may be a good place to start.\n\nFor instructions on installing LSP-ember, please check the [README](https://github.com/ijlee2/LSP-ember#installation).", "url": "https://wpnews.pro/news/lsp-ember-for-sublime-text", "canonical_source": "https://dev.to/ijlee2/lsp-ember-for-sublime-text-4cb1", "published_at": "2026-09-21 08:30:19+00:00", "updated_at": "2026-09-21 08:54:34.063495+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["LSP-ember", "Sublime Text", "Ember", "Glint", "@glint/ember-tsc", "@glint/tsserver-plugin", "Template Tag", "Claude Code"], "alternates": {"html": "https://wpnews.pro/news/lsp-ember-for-sublime-text", "markdown": "https://wpnews.pro/news/lsp-ember-for-sublime-text.md", "text": "https://wpnews.pro/news/lsp-ember-for-sublime-text.txt", "jsonld": "https://wpnews.pro/news/lsp-ember-for-sublime-text.jsonld"}}