tree-sitter-module
typescript-language-server
tree-sitter-module | typescript-language-server | |
---|---|---|
10 | 53 | |
158 | 1,714 | |
- | 2.9% | |
7.2 | 8.7 | |
about 1 month ago | 7 days ago | |
Shell | TypeScript | |
- | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
tree-sitter-module
-
Let's write an Emacs treesitter major mode
BTW:
While Emacs 29.1 comes with "treesitter" built-in, you still need to manually build and install any treesitter language plugin implementing the actual language specific parser. This can be fiddly and frustrating doing it yourself.
I had a quick success with using this convenience script: https://github.com/casouri/tree-sitter-module/. It provides fully-automated builds for the most popular languages (including typescript, c and c++).
This is how it works for "typescript":
1. Clone the repository: https://github.com/casouri/tree-sitter-module/
2. Install "build-essentials" (providing a c/c++ compiler if you're on Linux).
3. run "./build typescript" from within the repo
4. Copy the resulting shared library from "dist/libtree-sitter-typescript.so" into your "~/.emacs.d/tree-sitter/".
5. Open a random typescript file and try "M-x typescript-ts-mode" which should not give you any error but instead nice syntax highlighting.
You might find there is a treesitter plugin for your language available and it is even supported by "tree-sitter-module" but there is still no major mode, yet. Happened to me for Perl 5.
-
Mastering Emacs: What's new in Emacs 29.1
I will look into building my own tree sitter grammars using https://github.com/casouri/tree-sitter-module as you suggest.
Some time ago I followed this guide https://vxlabs.com/2022/06/12/typescript-development-with-em...
-
Getting Emacs 29 to Automatically Use Tree-sitter Modes ยท robbmann
;; FIRST: git clone https://github.com/casouri/tree-sitter-module ;; bash batch.sh ;; THEN : sudo cp dist/* /usr/local/lib ;; FINALLY: (setq treesit-extra-load-path '("/usr/local/lib")) ;; Treesit ;; Eglot (setq treesit-eglot-modes '((:ts (bash-mode . bash-ts-mode) :pacman "bash-language-server") (:ts (c++-mode . c++-ts-mode) :pacman "ccls") (:ts (c-mode . c-ts-mode) :pacman "ccls") (:ts (cpp-mode . cpp-ts-mode) :pacman "ccls") (:ts (c-sharp-mode . sharp-ts-mode)) (:ts (cmake-mode . cmake-ts-mode)) (:ts (css-mode . css-ts-mode) :pacman "vscode-css-languageserver") (:ts (dockerfile-mode . dockerfile-ts-mode)) (:ts (elixir-mode . elixir-ts-mode)) (:ts (glsl-mode . glsl-ts-mode)) (:ts (go-mode . go-ts-mode) :pacman "gopls") (:ts (heex-mode . heex-ts-mode)) (:ts (html-mode . html-ts-mode) :pacman "vscode-html-languageserver") (:ts (java-mode . java-ts-mode)) (:ts (javascript-mode . js-ts-mode) :pacman "typescript-language-server") (:ts (js-json-mode . json-ts-mode) :pacman "vscode-json-languageserver") (:ts (julia-mode . julia-ts-mode)) (:ts (make-mode . make-ts-mode)) (:ts (markdown-mode . markdown-ts-mode)) (:ts (python-mode . python-ts-mode) :pacman "jedi-language-server") (:ts (typescript-mode . typescript-ts-mode) :pacman "typescript-language-server") (:ts (proto-mode . proto-ts-mode)) (:ts (ruby-mode . ruby-ts-mode)) (:ts (rust-mode . rust-ts-mode) :pacman "rust-analyzer") (:ts (sql-mode . sql-ts-mode)) (:ts (toml-mode . toml-ts-mode)) (:ts (tsx-mode . tsx-ts-mode)) (:ts (verilog-mode . verilog-ts-mode)) (:ts (vhdl-mode . vhdl-ts-mode)) (:ts (wgsl-mode . wgsl-ts-mode)) (:ts (yaml-mode . yaml-ts-mode) :pacman "yaml-language-server"))) ;; Not mature yet: ;; (push '(org-mode . org-ts-mode) major-mode-remap-alist) ;; (push '(perl-mode . perl-ts-mode) major-mode-remap-alist) ;; cpan Perl::LanguageServer (require 'treesit) ;; Function to parse the above and make an install command (if (treesit-available-p) (let ((pacman-install-list (list ))) (dolist (ts-pm treesit-eglot-modes) (let ((majmode-remap (plist-get ts-pm :ts)) (pacman-cmd (plist-get ts-pm :pacman))) ;; bind default major-mode to ts-mode (push majmode-remap major-mode-remap-alist) ;; populate install cmd (if pacman-cmd (unless (member pacman-cmd pacman-install-list) (push pacman-cmd pacman-install-list))))) (let ((install-cmd (concat "pacman -S --needed " (--reduce (concat acc " " it) pacman-install-list)))) (message install-cmd))) (user-error "Treesitter not available"))
- tree-sitter-module: Building script for tree-sitter language definitions
-
Emacs 29: Install Tree-Sitter parser modules with a minor mode
Also this https://github.com/casouri/tree-sitter-module/issues/13
-
Do I still need to install tree-sitter manually, for native tree-sitter in emacs29 to work?
I've downloaded and generated the libraries for the various languages from: https://github.com/casouri/tree-sitter-module
-
Setup Eglot in Emacs29 to recognize Python virtualenv
Third, I'm using tsitter in emacs29. I have https://github.com/casouri/tree-sitter-module installed as a sub-module in ~/.config/emacs, and have a symlink called tree-sitter to ./tree-sitter-module/dist (built by ./tree-sitter-module/batch.sh) . I'm mentioning the tsitter config here since I'm using python-ts-mode which is tree-sitter aware.
-
Is anyone working on a ruby tree sitter mode?
I'd recommend checking out https://github.com/casouri/tree-sitter-module for building the native treesit libraries that are required to enable the various languages.
-
How to use Emacs 29 Tree-sitter?
The author of the built-in tree-sitter implementation has published this repo with a build script to help you build various grammars: https://github.com/casouri/tree-sitter-module
typescript-language-server
- Helix - Front-End Power
-
What is JSDoc and why you may not need typescript for your next project?
Besides the features TypeScript itself proposed, the most important thing it brought to the community was the ability to create cool features around this compiler that enhance the developer experience and productivity. Tools like tsserver, pretty ts errors, and many others are actively improving the ecosystem for both JavaScript and TypeScript writers.
-
A guide on Neovim's LSP client
Sometimes a language server can support multiple filetypes. An example of this is tsserver, the language server for javascript and typescript. In this case a filetype plugin can still work but there is an easier way to go about it.
-
Suspense your federated component with caution
in this way the ts server can detect and parse the component from the microfronent, thanks to monorepos!
-
Let's write an Emacs treesitter major mode
That was interesting, thanks for pointing it out
I was tremendously sad to see that the Typescript Language Server wasn't owned by Microsoft <https://microsoft.github.io/language-server-protocol/impleme...>, since if there was any sanity in the world a spec bump would travel with a reference implementation showing how they envision such a thing being used
But, I found that the Typescript Language Server that they did list does indeed have a semantic-tokens module in it, although it's much shorter than I would have expected from reading that section in the spec: https://github.com/typescript-language-server/typescript-lan...
-
How do I select which LSP is currently running?
I would like to use svelte language server when working on +page.server.ts files and not the typescript language server.
-
Formatting on save not working
[[language]] name = "python" roots = ["pyproject.toml"] formatter = { command = "black", args = ["--quiet", "-"] } language-server = { command = "pyright-langserver", args = ["--stdio"] } config = {} auto-format = true [[language]] name = "rust" auto-format = true # [[language]] # name = "typescript" # auto-format = true # formatter = { command = "prettier", args = ["--parser", "typescript"]} # # pass format options according to https://github.com/typescript-language-server/typescript-language-server#workspacedidchangeconfiguration omitting the "[language].format." prefix. # config = { format = { "semicolons" = "insert", "insertSpaceBeforeFunctionParenthesis" = true } } [[language]] name = "tsx" formatter = { command = 'prettier', args = ["--parser", "typescript"] } auto-format = true [[language]] name = "javascript" auto-format = true formatter = { command = 'npx', args = ["prettier", "--config", ".prettierrc", "--parser", "javascript"] } # formatter = { command = "prettier", args = ["--parser", "javascript"]} [[language]] name = "css" formatter = { command = 'prettier', args = ["--parser", "css"] } [[language]] name = "markdown" # https://github.com/executablebooks/mdformat formatter = { command = "mdformat", args = ["-"] } [[language]] name = "json" formatter = { command = "prettier", args = ["--parser", "json"] } [[language]] name = "toml" auto-format = true # https://github.com/bd82/toml-tools/tree/master/packages/prettier-plugin-toml formatter = { command = "prettier", args = ["--parser", "toml"] } [[language]] name = "yaml" indent = { tab-width = 2, unit = " " } formatter = { command = "prettier", args = ["--parser", "yaml"] } [[language]] name = "astro" scope = "source.astro" injection-regex = "astro" file-types = ["astro"] roots = ["package.json", "astro.config.mjs"] language-server = { command = "astro-ls", args = ["--stdio"] } config = { "typescript" = { serverPath = "/Users/matteostara/.nvm/versions/node/v18.16.0/bin/typescript-language-server" }, "environment" = "node" }
-
Struggling with javascript completion with LSP
Depending on the language server version, you may be running into https://github.com/typescript-language-server/typescript-language-server/issues/631. I temporarily fixed it for me by simply sticking with an old enough server build, though judging by the latest typescript-language-server commits a very recent build from master should also work
-
There's another typescript LSP that wraps the official VSCode typescript extension and has almost the same features - vtsls
Before, I was using typescript-language-server as it is LSP compliant but it was slow and lacks the features of what VSCode's implementation has, like extracting functions, constants, types into interfaces or alias and single imports. Auto-completion was also not very predictive as sometimes it works and sometimes it doesn't. For instance, I was having trouble getting it to auto-complete common attributes like className or href in JSX projects. It could be that I may be doing something wrong but didn't find any solution on how to get it properly working.
-
What could cause my LSP to be so slow and sluggish? Takes anywhere from 1 to 8 seconds to show auto-completion results and hide/ unhide errors.
Then this is highly likely issue of typescript-language-server. You might consider opening an issue for it.
What are some alternatives?
treesit-auto - Automatic installation, usage, and fallback for tree-sitter major modes in Emacs 29
deno - A modern runtime for JavaScript and TypeScript.
tree-sitter-langs - Language bundle for Emacs's tree-sitter package
nvim-lspconfig - Quickstart configs for Nvim LSP
tree-sitter-c-sharp - C# Grammar for tree-sitter
null-ls.nvim - Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua.
tree-sitter-typescript - TypeScript grammar for tree-sitter
nvim-lsp-ts-utils - Utilities to improve the TypeScript development experience for Neovim's built-in LSP client.
nvim-treesitter-textobjects
nvim-lspinstall - Provides the missing :LspInstall for nvim-lspconfig
git-sim - Visually simulate Git operations in your own repos with a single terminal command.
TypeScript - IO wrapper around TypeScript language services, allowing for easy consumption by editor plugins