diff options
Diffstat (limited to '2022/talks/treesitter.md')
-rw-r--r-- | 2022/talks/treesitter.md | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/2022/talks/treesitter.md b/2022/talks/treesitter.md new file mode 100644 index 00000000..317cf3f5 --- /dev/null +++ b/2022/talks/treesitter.md @@ -0,0 +1,121 @@ +[[!sidebar content=""]] +[[!meta title="Tree-sitter beyond syntax highlighting"]] +[[!meta copyright="Copyright © 2022 Abin Simon"]] +[[!inline pages="internal(2022/info/treesitter-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Tree-sitter beyond syntax highlighting +Abin Simon (IRC: meain on libera.chat, Matrix: @meain:matrix.org, <mailto:mail@meain.io>) + +[[!inline pages="internal(2022/info/treesitter-before)" raw="yes"]] + +Tree sitter has seen a lot of development recently, but more often +than not folks are only aware of its use for syntax highliting. The +idea of this talk is to introduce some other usecases where they could +benefit from tree-sitter. + +This talk will be an overview of the kind of things that they will be +able to do with tree-sitter with demos but won't go in depth into how +they would all of them. The presentation will link to the resources +mentioned during the talk where folks can learn more about each of +them. + +This session will introduce them to things like (not final list): + +- textobjects using tree-sitter: <https://github.com/meain/evil-textobj-tree-sitter/> +- Folding using tree-sitter: <https://github.com/emacs-tree-sitter/ts-fold> +- Navigating config headings: <https://blog.meain.io/2022/navigating-config-files-using-tree-sitter/> +- Using tree-sitter for narrowing: <https://blog.meain.io/2022/more-treesitter-emacs/#narrow-to-language-level-constructs> +- Intelligent snippets using tree-sitter: <https://blog.meain.io/2021/intelligent-snippets-treesitter/> +- Using tree-sitter to get which-func like functionality: <https://blog.meain.io/2022/more-treesitter-emacs/#show-current-class%2Ffunction-name-in-modeline> +- Some useful tree-sitter functions: tree-sitter-save-excursion + + +# Discussion + +## Notes + +- The speaker's blog: <https://blog.meain.io/> +- Fancy Narrow: <https://github.com/Malabarba/fancy-narrow> +- Text objects using tree-sitter in evil-mode: + <https://github.com/meain/evil-textobj-tree-sitter/> +- Notes/Slides: <https://github.com/meain/emacsconf-talk-tree-sitter> + +## Questions and answers + +- Q: What treesitter package is being used I think there is 3 + different ones + - A: Most of what is demoed here is using + <https://github.com/emacs-tree-sitter/elisp-tree-sitter> +- Q: Can the folds be treated as outlines as in outline-minor-mode + folds? + - A: I don't think the package ts-fold which I showcased works + with outline mode, but it should be simple enough to add + something like that + (<https://github.com/emacs-tree-sitter/ts-fold>) +- Q: Is there any benefit to use tree-sitter for sexp-based languages? + +1 + - A: Being able to query for specific things like variables / + conditions might come in handy +- Q:Do you have to have an LSP set up in order to use tree-sitter? + - A:I still use eglot for lsp. While tree-sitter help with + highlighting, folding, nav etc . . tree-sitter can be more + thought of to be working on a single file. So when I need to do + project wide things like jump to defenition, find reference or + renames lsp comes in handy. +- Q: Is there any example configuration for the transition from + traditional major mode to new *-ts-major-mode? It seems that + configuration of major mode (xxx-mode-hook, yasnippet, etc) has to + been rewritten + - A: I am just starting to work with builtin tree-sitter, so + don't have much input here unfortunately :( +- Q: So, is there a tree-sitter language definition for elisp? + - A: I'm just starting to look into built-in tree sitter, but I feel like we should be able to do all of them. +- Q: awesome stuff. i always wonder when itll appear in my fingers. sure the lib is in 29 but i guess some glue is required? +- Q: thanks for the great talk. I have one question. Will tree sitter able to highlight syntax in sourceblocks of org files? + - A: there is nothing technically stopping one from enabling highlighting in config blocks. Since I don't use org, I've not really looked into how it currently is. +- Q: So Emacs 29 includes the original tree sitter C library by Max Brunsfeld or is it a custom rewrite? +- Q: what about the relationship between emacs-tree-sitter and treesitter in core emacs + - A: there are just two Emacs side implementaions for the tree-sitter lib <https://tree-sitter.github.io/tree-sitter/> . The first one is in Rust and the second in C within core + - A: I have not extensively tested out the builtin one, but both should be more or less the same. The builtin one is less mature as of now and has a slightly different api. + - A: Plus most plugins that work with tree-sitter will be working with elisp-tree-sitter only as of now + - I'm speaking of the the third party package. Perhaps it has been fixed. IIUC the issue is not the emacs package but rather tree-sitter itself. + - A: You might wanna open an issue at https://github.com/emacs-tree-sitter/tree-sitter-langs if you are having issues with tree-sitter highlighting +- Q: biggest difference between the treesitter functionality built into Emacs 29 and the emacs-tree-sitter github package? +- Q: Are there any sample configurations about *-ts-mode integrated with default major-mode? +- Q: Building Emacs 29 with native tree-sitter support seem challanging any useful tip. + - building emacs ... tips from Xah Lee <http://xahlee.info/emacs/emacs/building_emacs_on_linux.html> +- Q: How much of what you showed can be done with the build-in tree-sitter? +- Q: How easy is it to hack the syntax definition? + - A: It is super easy once you learn a bit about tree-sitter. This is how the highlight queries looks like. <https://github.com/emacs-tree-sitter/tree-sitter-langs/blob/master/queries/python/highlights.scm> Once we have this, the tree-sitter integration can take care of the rest. +- Q: So Emacs 29 includes the original tree sitter C library by Max Brunsfeld or is it a custom rewrite? + - both elisp-tree-sitter and tree-sitter in emacs core are emacs side wrappers on top of the tree-sitter lib from Max. +- Q: What was the name of the module used for doing AST queries on the current buffer? + - A: for viewing and querying the tree, they are commands built into `tree-sitter-debug-mode` and `tree-sitter-query-builder` + +## Other IRC discussions + +- thanks for the great talk meain! +- thank you for the talk +- Great talk. Can I use this with Python? Bash? +- Amazing stuff!!! I need that YAML thing! +- When I am writing lisp macros I'm always having problems with the highlighting. I'm seeing this can be achieve with tree-sitter, is there a more streamlined way of doing it with treesitter - with less code? +- thank you for tree-sitter talk, It's awesome +- Now I definitely need to try tree-sitter +- very inspiring talk, the future looks bright! +- Very well done talk. Thank you. +- I've actually added a lot of highlighting for rust mode on my editor, using tree sitter. It's very powerful once you get into it +- with the new *-ts-mode, seems that a lot of configurations of language specific major mode have to be rewritten + - A: yup, there are quite a few things that being rewritten a bit like indent, highlight etc. +- yup, previously I would just jump to top after reformatting code. These days I've been also trying https://github.com/radian-software/apheleia which has been pretty good at keeping the position by using some other methods +- I use your tree-sitter package for a long time, It works very stable. +- I use tree-sitter write plugin to replace paredit: https://github.com/manateelazycat/grammatical-edit + +[[!inline pages="internal(2022/info/treesitter-after)" raw="yes"]] + +[[!inline pages="internal(2022/info/treesitter-nav)" raw="yes"]] + +[[!taglink CategoryTreeSitter]] |