tree-sitter-module
evil-textobj-tree-sitter
tree-sitter-module | evil-textobj-tree-sitter | |
---|---|---|
10 | 12 | |
158 | 184 | |
- | - | |
7.2 | 6.2 | |
about 1 month ago | 6 days ago | |
Shell | Scheme | |
- | Apache License 2.0 |
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
evil-textobj-tree-sitter
-
Let's write an Emacs treesitter major mode
You may be aware but the author of TFA also has a tree-sitter based minor mode called Combobulate for exactly that:
https://www.masteringemacs.org/article/combobulate-structure...
There is also evil-textobj-tree-sitter for tree-sitter based text objects for Evil mode:
https://github.com/meain/evil-textobj-tree-sitter
-
How to Get Started with Tree-Sitter
here are the structural editing tools, and they're great - https://github.com/meain/evil-textobj-tree-sitter
- evil-textobj-tree-sitter: Tree-sitter powered textobjects for evil mode in Emacs
-
Tree-sitter starter guide
evil-mode users already have options, and there seems to be a new package with general applicability too.
-
Best packages to use with evil mode .
evil-textobj-tree-sitter: provides new textobjects to evil-mode, thanks to treesitter
-
Are we living in the golden age of Emacs?
I have a package which lets you target language level constructs like functions, classes, conditionals etc for text objects using tree-sitter. This is specific to evil mode as of now, though making it work outside evil would not be that big an effort. https://github.com/meain/evil-textobj-tree-sitter
-
Tree Sitter and the Complications of Parsing Languages
Other than combobulate, these packages also use tree-sitter for changing code (not just highlighting): * https://codeberg.org/FelipeLema/tree-sitter-indent.el * https://github.com/meain/evil-textobj-tree-sitter
-
Using tree-sitter to create better snippets
this might interest you: https://github.com/meain/evil-textobj-tree-sitter
-
The State of Structural Editing in Emacs?
not lsp, treesitter is the way to go. lsp does not provide AST ATM. There is already https://github.com/meain/evil-textobj-tree-sitter . As a side note, smartparens work on non-lispy code. I am very happy with using in combination with evil-cleverparens.
What are some alternatives?
treesit-auto - Automatic installation, usage, and fallback for tree-sitter major modes in Emacs 29
doom-emacs - An Emacs framework for the stubborn martian hacker [Moved to: https://github.com/doomemacs/doomemacs]
tree-sitter-langs - Language bundle for Emacs's tree-sitter package
combobulate - Structured Editing and Navigation in Emacs with Tree-Sitter
tree-sitter-c-sharp - C# Grammar for tree-sitter
lispy - Short and sweet LISP editing
tree-sitter-typescript - TypeScript grammar for tree-sitter
nvim-gps - Simple statusline component that shows what scope you are working inside
nvim-treesitter-textobjects
things.el - Extensions to thingatpt.el
git-sim - Visually simulate Git operations in your own repos with a single terminal command.
gopcaml-mode