From 862e7980d89b242784d447ee99a007d10aa6e063 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 21 Aug 2021 21:19:27 +0100 Subject: [PATCH 01/80] module: add :tools tree-sitter This module installs 'tree-sitter' and 'tree-sitter-langs' as well as the 'evil-textobj-treesitter' and configures them. This module is based on the prototype module that @hlissner has started and I am just fleshing out that work. It also comes with a README file Fix: #4151 --- modules/tools/tree-sitter/README.org | 55 +++++++++++++++++++++++++++ modules/tools/tree-sitter/config.el | 32 ++++++++++++++++ modules/tools/tree-sitter/packages.el | 13 +++++++ modules/tools/tree-sitter/test.js | 52 +++++++++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 modules/tools/tree-sitter/README.org create mode 100644 modules/tools/tree-sitter/config.el create mode 100644 modules/tools/tree-sitter/packages.el create mode 100644 modules/tools/tree-sitter/test.js diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org new file mode 100644 index 000000000..b15162f87 --- /dev/null +++ b/modules/tools/tree-sitter/README.org @@ -0,0 +1,55 @@ +#+TITLE: tools/tree-sitter +#+DATE: August 17, 2021 +#+SINCE: 3.0.0 +#+STARTUP: inlineimages nofold + +* Table of Contents :TOC_3:noexport: +- [[#description][Description]] + - [[#maintainers][Maintainers]] + - [[#module-flags][Module Flags]] + - [[#plugins][Plugins]] + - [[#hacks][Hacks]] +- [[#prerequisites][Prerequisites]] +- [[#features][Features]] +- [[#configuration][Configuration]] +- [[#troubleshooting][Troubleshooting]] + +* Description +Add [[https://tree-sitter.github.io/tree-sitter/][tree-sitter]] support to doom: + +#+begin_quote +Tree sitter is a parser generator tool and an incremental parsing library. It +can build a concrete syntax tree for a source file and efficiently update the +syntax tree as the source file is edited. +#+end_quote + + ++ include better syntax highlighting of supported code ++ add structural text objects to manipulate functions statements and other code + structures + +** Maintainers +- @jeetelongname + +** Module Flags +This module provides no flags. + +** Plugins ++ [[https://github.com/emacs-tree-sitter/elisp-tree-sitter][tree-sitter]] ++ [[https://github.com/emacs-tree-sitter/tree-sitter-langs][tree-sitter-langs]] ++ [[https://github.com/meain/evil-textobj-tree-sitter][evil-textobj-tree-sitter]]* (=:editor evil +everywhere=) + +** TODO Hacks +# A list of internal modifications to included packages; omit if unneeded + +* Prerequisites +This module has no prerequisites. + +* TODO Features +# An in-depth list of features, how to use them, and their dependencies. + +* TODO Configuration +# How to configure this module, including common problems and how to address them. + +* TODO Troubleshooting +# Common issues and their solution, or places to look for help. diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el new file mode 100644 index 000000000..b44dce01c --- /dev/null +++ b/modules/tools/tree-sitter/config.el @@ -0,0 +1,32 @@ +;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*- + +(use-package! tree-sitter + :when (bound-and-true-p module-file-suffix) + :hook (prog-mode . tree-sitter-mode) + :hook (tree-sitter-after-on . tree-sitter-hl-mode) + :config + (require 'tree-sitter-langs) + (setq tree-sitter-debug-jump-buttons t + tree-sitter-debug-highlight-jump-region t) + + (defadvice! doom-tree-sitter-fail-gracefully-a (orig-fn &rest args) + "Don't break with errors when current major mode lacks tree-sitter support." + :around #'tree-sitter-mode + (condition-case e + (apply orig-fn args) + (error + (unless (string-match-p (concat "^Cannot find shared library\\|" + "^No language registered\\|" + "cannot open shared object file") + (error-message-string e)) + (signal (car e) (cadr e))))))) + +(use-package! evil-textobj-tree-sitter + :after tree-sitter + :config + (map! + :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef + :textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer") + :textobj "c" nil (evil-textobj-tree-sitter-get-textobj "comment.outer") + :textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer") + :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer"))) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el new file mode 100644 index 000000000..6b4295419 --- /dev/null +++ b/modules/tools/tree-sitter/packages.el @@ -0,0 +1,13 @@ +;; -*- no-byte-compile: t; -*- +;;; tools/tree-sitter/packages.el + +(package! tree-sitter + ;; :ignore (null (bound-and-true-p module-file-suffix)) + :pin "c7a1c34549cad41a3618c6f17e0e9dabd3e98fe1") +(package! tree-sitter-langs + ;; :ignore (null (bound-and-true-p module-file-suffix)) + :pin "e7b8db7c4006c04a4bc1fc6865ec31f223843192") + +(when (featurep! :editor evil +everywhere) + (package! evil-textobj-tree-sitter + :pin "f20598676f99e6fa33759d9807e94f42271c0dfb")) diff --git a/modules/tools/tree-sitter/test.js b/modules/tools/tree-sitter/test.js new file mode 100644 index 000000000..c2ab5d40a --- /dev/null +++ b/modules/tools/tree-sitter/test.js @@ -0,0 +1,52 @@ +// this is a test file i am useing to test functionallity with treesitter + +// blocks +x = 10 + +// calls +call(); + +// class +class Car { + constructor(name, year) { + this.name = name; + this.year = year; + } + age(x) { + return x - this.year; + } +} + +// comments +/* + * multiline my dude + * a poem + * roses are red + * violets are blue + * there is a man behind you + * and he had an axe with him to + */ + + +// conditional +if (x == 1) { + doStuff(); +} else { + x = new Car.age(2020) +} + + +// function +function name(arg) { + doStuff(arg); +} + +const arrowFunc = arg => { + dosStuff(arg); +} + +// loop +for (let i = 0; i <= 10; i++) { + doStuff(i); +} +// param From 74a444db002f88511783dc2d768d03b430374803 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 20 Aug 2021 14:04:08 +0100 Subject: [PATCH 02/80] fix(tree-sitter): feature gate evil-textobj-ts where ts stands for tree sitter Only install 'evil-textobj-treesitter' if :editor evil +everywhere is enabled Also Comment which text objs are not currently not working --- modules/tools/tree-sitter/config.el | 19 ++++++++++--------- modules/tools/tree-sitter/packages.el | 2 -- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index b44dce01c..819ccc379 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -21,12 +21,13 @@ (error-message-string e)) (signal (car e) (cadr e))))))) -(use-package! evil-textobj-tree-sitter - :after tree-sitter - :config - (map! - :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef - :textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer") - :textobj "c" nil (evil-textobj-tree-sitter-get-textobj "comment.outer") - :textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer") - :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer"))) +(when (featurep! :editor evil +everywhere) + (use-package! evil-textobj-tree-sitter + :after tree-sitter + :config + (map! + :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef + :textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer") + :textobj "c" nil (evil-textobj-tree-sitter-get-textobj "comment.outer") + :textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer") + :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer")))) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 6b4295419..d467db603 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,10 +2,8 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - ;; :ignore (null (bound-and-true-p module-file-suffix)) :pin "c7a1c34549cad41a3618c6f17e0e9dabd3e98fe1") (package! tree-sitter-langs - ;; :ignore (null (bound-and-true-p module-file-suffix)) :pin "e7b8db7c4006c04a4bc1fc6865ec31f223843192") (when (featurep! :editor evil +everywhere) From 145d75eaaa5d3482a3a2d9ad710776304c7930f7 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 19 Aug 2021 22:03:12 +0100 Subject: [PATCH 03/80] fix(tree-sitter): bind text-objs to keys --- modules/tools/tree-sitter/config.el | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 819ccc379..08bb6b770 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -26,8 +26,16 @@ :after tree-sitter :config (map! + :textobj "f" nil nil :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef + :textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer") + + :textobj "c" nil nil :textobj "c" nil (evil-textobj-tree-sitter-get-textobj "comment.outer") + + :textobj "i" nil nil :textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer") + + :textobj "l" nil nil :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer")))) From b610b47b904559f551bd5b30bc8d6fef98d5a255 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 19 Aug 2021 22:05:00 +0100 Subject: [PATCH 04/80] docs(tree-sitter): make wording more verbose include 'like other text objects' to draw similarities and make the use case clear --- modules/tools/tree-sitter/README.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index b15162f87..e87c6db6b 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -26,7 +26,7 @@ syntax tree as the source file is edited. + include better syntax highlighting of supported code + add structural text objects to manipulate functions statements and other code - structures + structures like any other text object ** Maintainers - @jeetelongname From f937be21562ec3e28a4751bac94fdf67fe326c0f Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 20 Aug 2021 14:09:20 +0100 Subject: [PATCH 05/80] docs(tree-sitter): add entry to modules.org --- docs/modules.org | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/modules.org b/docs/modules.org index 1a6a70372..cf56d041c 100644 --- a/docs/modules.org +++ b/docs/modules.org @@ -195,6 +195,7 @@ Small modules that give Emacs access to external tools & services. + [[file:../modules/tools/taskrunner/README.org][taskrunner]] - TODO + [[file:../modules/tools/terraform/README.org][terraform]] - TODO + tmux - TODO ++ [[file:../modules/tools/tree-sitter/README.org][tree-sitter]] - TODO + [[file:../modules/tools/upload/README.org][upload]] - TODO * :ui From 9251ea9db7ee8abfbf39acc69074842d4646b814 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 21 Aug 2021 21:09:26 +0100 Subject: [PATCH 06/80] docs(tree-sitter): add doctor check for modules modules support it required by tree sitter to work. --- modules/tools/tree-sitter/doctor.el | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 modules/tools/tree-sitter/doctor.el diff --git a/modules/tools/tree-sitter/doctor.el b/modules/tools/tree-sitter/doctor.el new file mode 100644 index 000000000..68026fce7 --- /dev/null +++ b/modules/tools/tree-sitter/doctor.el @@ -0,0 +1,4 @@ +;;; tools/treesitter/doctor.el -*- lexical-binding: t; -*- + +(unless (fboundp 'module-load) + (warn! "Emacs was not built with dynamic modules support. Tree sitter needs this to function")) From afb1694b2b9650e57af80c3fe5efa18d16e4584b Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 20 Aug 2021 23:05:34 +0100 Subject: [PATCH 07/80] docs(tree-sitter): add links to support in feature - Add two feature subsections discussing with links to - languages that have parsers - languages that have highlighting support - languages that have text object support and what text objects they - have support for - Fix capitalisation --- modules/tools/tree-sitter/README.org | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index e87c6db6b..def0e05bb 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -11,6 +11,8 @@ - [[#hacks][Hacks]] - [[#prerequisites][Prerequisites]] - [[#features][Features]] + - [[#language-support][Language support]] + - [[#text-objects][Text Objects]] - [[#configuration][Configuration]] - [[#troubleshooting][Troubleshooting]] @@ -24,8 +26,8 @@ syntax tree as the source file is edited. #+end_quote -+ include better syntax highlighting of supported code -+ add structural text objects to manipulate functions statements and other code ++ Include better syntax highlighting of supported code ++ Add structural text objects to manipulate functions statements and other code structures like any other text object ** Maintainers @@ -45,8 +47,15 @@ This module provides no flags. * Prerequisites This module has no prerequisites. -* TODO Features -# An in-depth list of features, how to use them, and their dependencies. +* Features +** Language support +Currently Emacs tree sitter has got [[https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos][parsers for these languages]] with syntax +highlighting support for [[https://emacs-tree-sitter.github.io/syntax-highlighting/][these languages]]. + +** Text Objects +Not all language support all text objects (yet). [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects#built-in-textobjects][Here is a table of the text +objects languages support]] +Note: only languages with parsers in emacs have text object support currently * TODO Configuration # How to configure this module, including common problems and how to address them. From 727fcb2fcca07ac24466fffbc9c24449c96c4cf3 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 20 Aug 2021 23:10:19 +0100 Subject: [PATCH 08/80] nit(tree-sitter): add rationale for debug mode var --- modules/tools/tree-sitter/config.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 08bb6b770..58ff9aec6 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -6,7 +6,10 @@ :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config (require 'tree-sitter-langs) + + ;; This makes every node a link to a section of code (setq tree-sitter-debug-jump-buttons t + ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t) (defadvice! doom-tree-sitter-fail-gracefully-a (orig-fn &rest args) From 6dd678a53ca77302859f7d968fb71b73116f83a8 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 20 Aug 2021 23:26:12 +0100 Subject: [PATCH 09/80] docs(tree-sitter): mention text object bindings --- modules/tools/tree-sitter/README.org | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index def0e05bb..3922c0e83 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -57,6 +57,17 @@ Not all language support all text objects (yet). [[https://github.com/nvim-trees objects languages support]] Note: only languages with parsers in emacs have text object support currently +currently text objects are bound to: +| key | text object | +|-----+-------------| +| =f= | function | +| =C= | class | +| =c= | comment | +| =i= | conditional | +| =l= | loop | + +They are used in a container context (not =vf= but =vaf= or =vif=) + * TODO Configuration # How to configure this module, including common problems and how to address them. From 56432f16491fdff19713880e167becc5ecb7f580 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 21 Aug 2021 21:51:39 +0100 Subject: [PATCH 10/80] test(tree-sitter): remove test.js It does not belong in the module or the repo --- modules/tools/tree-sitter/test.js | 52 ------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 modules/tools/tree-sitter/test.js diff --git a/modules/tools/tree-sitter/test.js b/modules/tools/tree-sitter/test.js deleted file mode 100644 index c2ab5d40a..000000000 --- a/modules/tools/tree-sitter/test.js +++ /dev/null @@ -1,52 +0,0 @@ -// this is a test file i am useing to test functionallity with treesitter - -// blocks -x = 10 - -// calls -call(); - -// class -class Car { - constructor(name, year) { - this.name = name; - this.year = year; - } - age(x) { - return x - this.year; - } -} - -// comments -/* - * multiline my dude - * a poem - * roses are red - * violets are blue - * there is a man behind you - * and he had an axe with him to - */ - - -// conditional -if (x == 1) { - doStuff(); -} else { - x = new Car.age(2020) -} - - -// function -function name(arg) { - doStuff(arg); -} - -const arrowFunc = arg => { - dosStuff(arg); -} - -// loop -for (let i = 0; i <= 10; i++) { - doStuff(i); -} -// param From 76d38ddc636bf3bc57e6ce5a461a153539a39880 Mon Sep 17 00:00:00 2001 From: Daanturo Date: Sun, 22 Aug 2021 10:46:27 +0700 Subject: [PATCH 11/80] refactor(tree-sitter): remove doom-tree-sitter-fail-gracefully-a Use turn-on-tree-sitter-mode instead of tree-sitter-mode directly because the former now ignore errors. --- modules/tools/tree-sitter/config.el | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 58ff9aec6..ed9ae8239 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -2,7 +2,7 @@ (use-package! tree-sitter :when (bound-and-true-p module-file-suffix) - :hook (prog-mode . tree-sitter-mode) + :hook (prog-mode . turn-on-tree-sitter-mode) :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config (require 'tree-sitter-langs) @@ -10,19 +10,7 @@ ;; This makes every node a link to a section of code (setq tree-sitter-debug-jump-buttons t ;; and this highlights the entire sub tree in your code - tree-sitter-debug-highlight-jump-region t) - - (defadvice! doom-tree-sitter-fail-gracefully-a (orig-fn &rest args) - "Don't break with errors when current major mode lacks tree-sitter support." - :around #'tree-sitter-mode - (condition-case e - (apply orig-fn args) - (error - (unless (string-match-p (concat "^Cannot find shared library\\|" - "^No language registered\\|" - "cannot open shared object file") - (error-message-string e)) - (signal (car e) (cadr e))))))) + tree-sitter-debug-highlight-jump-region t)) (when (featurep! :editor evil +everywhere) (use-package! evil-textobj-tree-sitter From e72930c4339c41b415271c868547446d60e7be5d Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 22 Aug 2021 23:13:54 +0100 Subject: [PATCH 12/80] docs(tree-sitter): add better wording to readme --- modules/tools/tree-sitter/README.org | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 3922c0e83..4ab0a623e 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -17,7 +17,7 @@ - [[#troubleshooting][Troubleshooting]] * Description -Add [[https://tree-sitter.github.io/tree-sitter/][tree-sitter]] support to doom: +This module adds [[https://tree-sitter.github.io/tree-sitter/][tree-sitter]] support to doom: #+begin_quote Tree sitter is a parser generator tool and an incremental parsing library. It @@ -25,9 +25,9 @@ can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited. #+end_quote - -+ Include better syntax highlighting of supported code -+ Add structural text objects to manipulate functions statements and other code +It includes: ++ Better syntax highlighting of supported languages ++ Structural text objects to manipulate functions statements and other code structures like any other text object ** Maintainers @@ -55,9 +55,8 @@ highlighting support for [[https://emacs-tree-sitter.github.io/syntax-highlighti ** Text Objects Not all language support all text objects (yet). [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects#built-in-textobjects][Here is a table of the text objects languages support]] -Note: only languages with parsers in emacs have text object support currently - -currently text objects are bound to: +Note: only languages with parsers in emacs have text object support currently. +Currently text objects are bound to: | key | text object | |-----+-------------| | =f= | function | From 9a34308246c8db9cd6dc1077d874b3ef231b37ab Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 31 Aug 2021 00:50:39 +0100 Subject: [PATCH 13/80] bump: :tools tree-sitter emacs-tree-sitter/elisp-tree-sitter@c7a1c34549ca -> emacs-tree-sitter/elisp-tree-sitter@588170ffbdbf emacs-tree-sitter/tree-sitter-langs@e7b8db7c4006 -> emacs-tree-sitter/tree-sitter-langs@81adcdc06a97 meain/evil-textobj-tree-sitter@f20598676f99 -> meain/evil-textobj-tree-sitter@fe4d738486c4 --- modules/tools/tree-sitter/packages.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index d467db603..eaeb2a790 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,10 +2,10 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - :pin "c7a1c34549cad41a3618c6f17e0e9dabd3e98fe1") + :pin "588170ffbdbf02175cdb97547f7efd7e933a5a5f") (package! tree-sitter-langs - :pin "e7b8db7c4006c04a4bc1fc6865ec31f223843192") + :pin "81adcdc06a9700ecf9659171da275b1c9dcfdfb6") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "f20598676f99e6fa33759d9807e94f42271c0dfb")) + :pin "fe4d738486c4a267d799057409748063e036736e")) From c0637e9e00f7f9ba6787391305bfa5a9f27980da Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 16 Sep 2021 13:39:09 +0100 Subject: [PATCH 14/80] bump: :tools tree-sitter emacs-tree-sitter/elisp-tree-sitter@588170ffbdbf -> emacs-tree-sitter/elisp-tree-sitter@4d9871d23999 emacs-tree-sitter/tree-sitter-langs@81adcdc06a97 -> emacs-tree-sitter/tree-sitter-langs@fa47b55f7bd1 meain/evil-textobj-tree-sitter@fe4d738486c4 -> meain/evil-textobj-tree-sitter@eedc1f54611e --- modules/tools/tree-sitter/packages.el | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index eaeb2a790..11ddf4e1c 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,10 +2,11 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - :pin "588170ffbdbf02175cdb97547f7efd7e933a5a5f") + :pin "4d9871d23999fe5f8de821e23c9ec576df2b2738") + (package! tree-sitter-langs - :pin "81adcdc06a9700ecf9659171da275b1c9dcfdfb6") + :pin "fa47b55f7bd11bd2b17ab48deb03ed23000bb974") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "fe4d738486c4a267d799057409748063e036736e")) + :pin "eedc1f54611e4403ea228b33056388a8539a2b3e")) From cb269deed6cebe6ebe98f7b1fadc814ba914aba0 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 21 Sep 2021 19:40:00 +0100 Subject: [PATCH 15/80] feat(tree-sitter): add function call text object Changes: - Bind `F` to the function call text object - Add the text object to the table - Realign table so it looks right to people who don't hide emphasis markers --- modules/tools/tree-sitter/README.org | 15 ++++++++------- modules/tools/tree-sitter/config.el | 4 +++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 4ab0a623e..988467a4d 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -57,13 +57,14 @@ Not all language support all text objects (yet). [[https://github.com/nvim-trees objects languages support]] Note: only languages with parsers in emacs have text object support currently. Currently text objects are bound to: -| key | text object | -|-----+-------------| -| =f= | function | -| =C= | class | -| =c= | comment | -| =i= | conditional | -| =l= | loop | +| key | text object | +|-----+---------------------| +| =f= | function definition | +| =F= | function call | +| =C= | class | +| =c= | comment | +| =i= | conditional | +| =l= | loop | They are used in a container context (not =vf= but =vaf= or =vif=) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index ed9ae8239..8176b82cc 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -1,7 +1,6 @@ ;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*- (use-package! tree-sitter - :when (bound-and-true-p module-file-suffix) :hook (prog-mode . turn-on-tree-sitter-mode) :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config @@ -16,10 +15,13 @@ (use-package! evil-textobj-tree-sitter :after tree-sitter :config + ;; FIXME: only bind when using a supported major mode (map! :textobj "f" nil nil :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef + :textobj "F" (evil-textobj-tree-sitter-get-textobj "call.inner") (evil-textobj-tree-sitter-get-textobj "call.outer") + :textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer") :textobj "c" nil nil From 4552064a5aac2851f40746595821cffd0e386dbb Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 24 Sep 2021 17:24:41 +0100 Subject: [PATCH 16/80] refactor(tree-sitter): move ts-langs into use-pkg Move tree-sitter-langs into its own use-package call This is to reflect an accepted code pattern seen in the rest of doom's code. This does not cause any user facing changes --- modules/tools/tree-sitter/config.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 8176b82cc..effd2b473 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -4,13 +4,14 @@ :hook (prog-mode . turn-on-tree-sitter-mode) :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config - (require 'tree-sitter-langs) - ;; This makes every node a link to a section of code (setq tree-sitter-debug-jump-buttons t ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t)) +(use-package! tree-sitter-langs + :after tree-sitter) + (when (featurep! :editor evil +everywhere) (use-package! evil-textobj-tree-sitter :after tree-sitter From 4eeb45f80b747c9be8ae6c13b16ebd790582ef69 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 7 Oct 2021 00:37:30 +0100 Subject: [PATCH 17/80] fix(tree-sitter): lazy load tree-sitter-langs Some how for some reason tree-sitter-langs managed to load. If if put its require in the block of a lazy loaded package. it would load. If i were to set its use-package call to load it after a lazy loaded package. it would load. a hook (and disabling it) were the only reliable ways to get it to lazy load --- modules/tools/tree-sitter/config.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index effd2b473..0a753a1bd 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -9,8 +9,7 @@ ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t)) -(use-package! tree-sitter-langs - :after tree-sitter) +(add-hook! 'tree-sitter-after-on-hook (require 'tree-sitter-langs)) (when (featurep! :editor evil +everywhere) (use-package! evil-textobj-tree-sitter @@ -33,3 +32,4 @@ :textobj "l" nil nil :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer")))) + From 3fdd6883564941b630e7dc8c4f333d985a467aa0 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 7 Oct 2021 01:13:41 +0100 Subject: [PATCH 18/80] feat(tree-sitter): ts-langs eagar loads on daemon as ts-langs is quite heavy it makes sense to eagar load it when in daemon mode to make the experience smoother overall --- modules/tools/tree-sitter/config.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 0a753a1bd..0af5b01fa 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -9,7 +9,11 @@ ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t)) -(add-hook! 'tree-sitter-after-on-hook (require 'tree-sitter-langs)) +(if (daemonp) ;; eager load when in daemon as its start time is easily consumed + (require 'tree-sitter-langs) + (add-hook! 'tree-sitter-after-on-hook + (require 'tree-sitter-langs))) + (when (featurep! :editor evil +everywhere) (use-package! evil-textobj-tree-sitter @@ -32,4 +36,3 @@ :textobj "l" nil nil :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer")))) - From 400d8d4116fe4e6bbb2f34b22a0c2389539d4182 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 19 Oct 2021 01:32:57 +0100 Subject: [PATCH 19/80] feat(tree-sitter): bind textobjects to maps Instead of binding all of the tree sitter text objects to every map we only bind them to modes in the major-mode-language-alist --- modules/tools/tree-sitter/config.el | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 0af5b01fa..fc19c6167 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -1,9 +1,17 @@ ;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*- + + (use-package! tree-sitter - :hook (prog-mode . turn-on-tree-sitter-mode) + ;; :hook (prog-mode . turn-on-tree-sitter-mode) + :defer t ;; loading is handled by individual modes :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config + (defvar +tree-sitter-enabled-mode-maps (seq-map (lambda (mode) + (intern (concat + (symbol-name (car mode)) "-map"))) + tree-sitter-major-mode-language-alist) + "List of mode hooks for tree sitter enabled modes.") ;; This makes every node a link to a section of code (setq tree-sitter-debug-jump-buttons t ;; and this highlights the entire sub tree in your code @@ -21,6 +29,7 @@ :config ;; FIXME: only bind when using a supported major mode (map! + :map +tree-sitter-enabled-mode-maps :textobj "f" nil nil :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef From 06ed5ade3f30a2ac5039f127635114f13b582698 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 19 Oct 2021 01:54:17 +0100 Subject: [PATCH 20/80] refactor!(tree-sitter): add +tree-sitter flag BREAKING CHANGE: break the global nature of the tree sitter module by adding a +tree-sitter flag to every applicable module In the background this hooks turn-on-tree-sitter-mode to the major-mode-hook of the language. This may also solve the eager loading of tree sitter --- modules/lang/agda/config.el | 5 +++++ modules/lang/cc/config.el | 5 +++++ modules/lang/csharp/config.el | 4 ++++ modules/lang/elm/config.el | 4 ++++ modules/lang/go/config.el | 4 ++++ modules/lang/java/config.el | 4 ++++ modules/lang/javascript/config.el | 9 +++++++++ modules/lang/json/config.el | 4 ++++ modules/lang/julia/config.el | 4 ++++ modules/lang/ocaml/config.el | 4 ++++ modules/lang/php/config.el | 4 ++++ modules/lang/python/config.el | 4 ++++ modules/lang/ruby/config.el | 4 ++++ modules/lang/rust/config.el | 4 ++++ modules/lang/scala/config.el | 4 ++++ modules/lang/sh/config.el | 28 ++++++++++++++++------------ modules/lang/swift/config.el | 4 ++++ modules/lang/web/config.el | 6 ++++++ 18 files changed, 93 insertions(+), 12 deletions(-) diff --git a/modules/lang/agda/config.el b/modules/lang/agda/config.el index 212a9b5e1..97f107625 100644 --- a/modules/lang/agda/config.el +++ b/modules/lang/agda/config.el @@ -38,3 +38,8 @@ "h" #'agda2-display-implicit-arguments "q" #'agda2-quit "r" #'agda2-restart))) + +;; Tree Sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! '(agda-mode + agda2-mode) #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index f6ff67a0b..7d35a4d40 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -304,3 +304,8 @@ If rtags or rdm aren't available, fail silently instead of throwing a breaking e "-isystem/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include" "-isystem/usr/local/include"] :resourceDir (cdr (doom-call-process "clang" "-print-resource-dir")))))))) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! '(c-mode-hook + c++-mode-hook) #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/csharp/config.el b/modules/lang/csharp/config.el index 4da8c94a3..367169547 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -72,3 +72,7 @@ or terminating simple string." (use-package! sln-mode :mode "\\.sln\\'") + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'csharp-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/elm/config.el b/modules/lang/elm/config.el index 42b03352a..4a8c2697e 100644 --- a/modules/lang/elm/config.el +++ b/modules/lang/elm/config.el @@ -21,3 +21,7 @@ :when (featurep! :checkers syntax) :after elm-mode :config (add-to-list 'flycheck-checkers 'elm)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'elm-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/go/config.el b/modules/lang/go/config.el index dd97318d8..dca231476 100644 --- a/modules/lang/go/config.el +++ b/modules/lang/go/config.el @@ -76,3 +76,7 @@ (use-package! flycheck-golangci-lint :when (featurep! :checkers syntax) :hook (go-mode . flycheck-golangci-lint-setup)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'go-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/java/config.el b/modules/lang/java/config.el index 1c6c8bac7..8955bb5c1 100644 --- a/modules/lang/java/config.el +++ b/modules/lang/java/config.el @@ -49,3 +49,7 @@ If the depth is 2, the first two directories are removed: net.lissner.game.") (set-docsets! 'groovy-mode "Groovy" "Groovy_JDK") (set-eval-handler! 'groovy-mode "groovy") (set-repl-handler! 'groovy-mode #'+java/open-groovy-repl)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'java-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 6f3c13f6c..6aa94a7c2 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -311,3 +311,12 @@ to tide." (def-project-mode! +javascript-gulp-mode :when (locate-dominating-file default-directory "gulpfile.js")) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! '(javascript-mode-hook + js-mode-hook + js2-mode-hook + js3-mode-hook + typescript-mode-hook + rjsx-mode) #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/json/config.el b/modules/lang/json/config.el index b96221d11..303f2345a 100644 --- a/modules/lang/json/config.el +++ b/modules/lang/json/config.el @@ -29,3 +29,7 @@ :map json-mode-map :localleader "s" #'counsel-jq)) + +(eval-when! (featurep! +tree-sitter) + (add-hook! '(json-mode + jsonc-mode) #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/julia/config.el b/modules/lang/julia/config.el index d97811284..b69459f80 100644 --- a/modules/lang/julia/config.el +++ b/modules/lang/julia/config.el @@ -99,3 +99,7 @@ ;; Prevent timeout while installing LanguageServer.jl (setq-hook! 'julia-mode-hook eglot-connect-timeout (max eglot-connect-timeout 60)) :config (eglot-jl-init)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'julia-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/ocaml/config.el b/modules/lang/ocaml/config.el index 696aa9822..7eaaaf0e6 100644 --- a/modules/lang/ocaml/config.el +++ b/modules/lang/ocaml/config.el @@ -118,3 +118,7 @@ ((equal ext ".eliomi") (setq-local ocamlformat-file-kind 'interface))))) (setq +format-with 'ocamlformat)))) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'tuareg-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el index 8eb917f63..406cc39fd 100644 --- a/modules/lang/php/config.el +++ b/modules/lang/php/config.el @@ -176,3 +176,7 @@ :on-exit (setq phpunit-args nil phpunit-executable nil)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! #'php-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index d7932e2ba..2b5273a76 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -345,3 +345,7 @@ (use-package! lsp-pyright :when (featurep! +pyright) :after lsp-mode)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'python-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index c39686e1b..0e1121d42 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -195,3 +195,7 @@ (map! :localleader :map projectile-rails-mode-map "r" #'projectile-rails-command-map)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'ruby-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index b9971ad85..b97fb20e3 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -81,3 +81,7 @@ (set-lookup-handlers! 'rustic-mode :definition '(racer-find-definition :async t) :documentation '+rust-racer-lookup-documentation)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'rustic-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/scala/config.el b/modules/lang/scala/config.el index 470eb0dcc..27864a264 100644 --- a/modules/lang/scala/config.el +++ b/modules/lang/scala/config.el @@ -50,3 +50,7 @@ (use-package! sbt-mode :after scala-mode :config (set-repl-handler! 'scala-mode #'+scala/open-repl :persist t)) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'scala-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/sh/config.el b/modules/lang/sh/config.el index 16e23a610..a1de74ca4 100755 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -24,18 +24,18 @@ (set-repl-handler! 'sh-mode #'+sh/open-repl) (set-lookup-handlers! 'sh-mode :documentation #'+sh-lookup-documentation-handler) (set-ligatures! 'sh-mode - ;; Functional - :def "function" - ;; Types - :true "true" :false "false" - ;; Flow - :not "!" - :and "&&" :or "||" - :in "in" - :for "for" - :return "return" - ;; Other - :dot "." :dot "source") + ;; Functional + :def "function" + ;; Types + :true "true" :false "false" + ;; Flow + :not "!" + :and "&&" :or "||" + :in "in" + :for "for" + :return "return" + ;; Other + :dot "." :dot "source") (when (featurep! +lsp) (add-hook 'sh-mode-local-vars-hook #'lsp! 'append)) @@ -93,3 +93,7 @@ :config (when (featurep! +lsp) (add-hook 'powershell-mode-local-vars-hook #'lsp! 'append))) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'sh-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/swift/config.el b/modules/lang/swift/config.el index dc0fc6074..b349ec022 100644 --- a/modules/lang/swift/config.el +++ b/modules/lang/swift/config.el @@ -31,3 +31,7 @@ "sourcekit" "/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin/sourcekit-lsp" "/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin/sourcekit")))) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'swift-mode-hook #'turn-on-tree-sitter-mode)) diff --git a/modules/lang/web/config.el b/modules/lang/web/config.el index 2185048c0..a40fe6010 100644 --- a/modules/lang/web/config.el +++ b/modules/lang/web/config.el @@ -55,3 +55,9 @@ (def-project-mode! +web-phaser-mode :modes '(+javascript-npm-mode) :when (+javascript-npm-dep-p '(or phaser phaser-ce)))) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! '(html-mode-hook + mhtml-mode-hook + css-mode-hook)) #'turn-on-tree-sitter-mode) From 547860e847ac834fc0d4597c38350d8474623722 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 19 Oct 2021 19:26:26 +0100 Subject: [PATCH 21/80] docs(tree-sitter): add doctor checks for flag add in a check ala lsp, this has been applied to every module with tree sitter support --- modules/lang/agda/doctor.el | 5 +++++ modules/lang/cc/doctor.el | 4 ++++ modules/lang/csharp/doctor.el | 4 ++++ modules/lang/elm/doctor.el | 5 +++++ modules/lang/go/doctor.el | 4 ++++ modules/lang/java/doctor.el | 4 ++++ modules/lang/javascript/doctor.el | 4 ++++ modules/lang/json/doctor.el | 4 ++++ modules/lang/julia/doctor.el | 4 ++++ modules/lang/ocaml/doctor.el | 4 ++++ modules/lang/php/doctor.el | 4 ++++ modules/lang/python/doctor.el | 4 ++++ modules/lang/ruby/doctor.el | 4 ++++ modules/lang/rust/doctor.el | 4 ++++ modules/lang/scala/doctor.el | 4 ++++ modules/lang/sh/doctor.el | 4 ++++ modules/lang/swift/doctor.el | 5 +++++ modules/lang/web/doctor.el | 4 ++++ 18 files changed, 75 insertions(+) create mode 100644 modules/lang/agda/doctor.el create mode 100644 modules/lang/elm/doctor.el create mode 100644 modules/lang/swift/doctor.el diff --git a/modules/lang/agda/doctor.el b/modules/lang/agda/doctor.el new file mode 100644 index 000000000..e5715325b --- /dev/null +++ b/modules/lang/agda/doctor.el @@ -0,0 +1,5 @@ +;;; lang/agda/doctor.el -*- lexical-binding: t; -*- + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/cc/doctor.el b/modules/lang/cc/doctor.el index 3c3facd0f..8cb6f9e87 100644 --- a/modules/lang/cc/doctor.el +++ b/modules/lang/cc/doctor.el @@ -5,6 +5,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (when (require 'rtags nil t) ;; rtags (when-let (bins (cl-remove-if #'rtags-executable-find diff --git a/modules/lang/csharp/doctor.el b/modules/lang/csharp/doctor.el index b9a56317f..35592ca3e 100644 --- a/modules/lang/csharp/doctor.el +++ b/modules/lang/csharp/doctor.el @@ -5,3 +5,7 @@ (let ((omnisharp-bin (or omnisharp-server-executable-path (omnisharp--server-installation-path t)))) (unless (file-exists-p omnisharp-bin) (warn! "Omnisharp server isn't installed, completion won't work")))) + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/elm/doctor.el b/modules/lang/elm/doctor.el new file mode 100644 index 000000000..73c309eed --- /dev/null +++ b/modules/lang/elm/doctor.el @@ -0,0 +1,5 @@ +;;; lang/elm/doctor.el -*- lexical-binding: t; -*- + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/go/doctor.el b/modules/lang/go/doctor.el index 5a8c4ba3e..1f8c18ff7 100644 --- a/modules/lang/go/doctor.el +++ b/modules/lang/go/doctor.el @@ -5,6 +5,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "guru") (warn! "Couldn't find guru. Refactoring commands (go-guru-*) won't work")) diff --git a/modules/lang/java/doctor.el b/modules/lang/java/doctor.el index 4a9372c23..13746350c 100644 --- a/modules/lang/java/doctor.el +++ b/modules/lang/java/doctor.el @@ -5,6 +5,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "javac") (warn! "Couldn't find the javac executable, are you sure the JDK is installed?")) diff --git a/modules/lang/javascript/doctor.el b/modules/lang/javascript/doctor.el index e4c3dea63..087bde196 100644 --- a/modules/lang/javascript/doctor.el +++ b/modules/lang/javascript/doctor.el @@ -4,3 +4,7 @@ (assert! (or (not (featurep! +lsp)) (featurep! :tools lsp)) "This module requires (:tools lsp)") + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/json/doctor.el b/modules/lang/json/doctor.el index f1dc3009a..ce2226de7 100644 --- a/modules/lang/json/doctor.el +++ b/modules/lang/json/doctor.el @@ -3,3 +3,7 @@ (when (and (featurep! :completion ivy) (not (executable-find "jq"))) (warn! "Couldn't find jq. counsel-jq won't work." )) + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/julia/doctor.el b/modules/lang/julia/doctor.el index ea64cf495..193faed09 100644 --- a/modules/lang/julia/doctor.el +++ b/modules/lang/julia/doctor.el @@ -4,6 +4,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (when (featurep! +lsp) (let ((args (cond ((require 'eglot-jl nil t) diff --git a/modules/lang/ocaml/doctor.el b/modules/lang/ocaml/doctor.el index 4e5445de5..712931aba 100644 --- a/modules/lang/ocaml/doctor.el +++ b/modules/lang/ocaml/doctor.el @@ -5,6 +5,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "ocamlmerlin") (warn! "Couldn't find ocamlmerlin. Lookup, completion and syntax checking won't work")) diff --git a/modules/lang/php/doctor.el b/modules/lang/php/doctor.el index 4e2ed45fc..95b984ce9 100644 --- a/modules/lang/php/doctor.el +++ b/modules/lang/php/doctor.el @@ -4,3 +4,7 @@ (assert! (or (not (featurep! +lsp)) (featurep! :tools lsp)) "This module requires (:tools lsp)") + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/python/doctor.el b/modules/lang/python/doctor.el index d1d2c08e4..b45f14f24 100644 --- a/modules/lang/python/doctor.el +++ b/modules/lang/python/doctor.el @@ -4,6 +4,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (if (not (or (executable-find "python") (executable-find "python3"))) (error! "Couldn't find python in your PATH") diff --git a/modules/lang/ruby/doctor.el b/modules/lang/ruby/doctor.el index 5da563240..df74e9063 100644 --- a/modules/lang/ruby/doctor.el +++ b/modules/lang/ruby/doctor.el @@ -4,6 +4,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "ruby") (warn! "Ruby isn't installed.")) diff --git a/modules/lang/rust/doctor.el b/modules/lang/rust/doctor.el index 689d54285..70a5d2bc7 100644 --- a/modules/lang/rust/doctor.el +++ b/modules/lang/rust/doctor.el @@ -5,6 +5,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "rustc") (warn! "Couldn't find rustc binary")) diff --git a/modules/lang/scala/doctor.el b/modules/lang/scala/doctor.el index 06a62720f..76d3c6a05 100644 --- a/modules/lang/scala/doctor.el +++ b/modules/lang/scala/doctor.el @@ -4,6 +4,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (if (and (featurep! +lsp) (not (executable-find "metals-emacs"))) (warn! "metals-emacs isn't installed")) diff --git a/modules/lang/sh/doctor.el b/modules/lang/sh/doctor.el index a25f3dfbc..0575489b3 100644 --- a/modules/lang/sh/doctor.el +++ b/modules/lang/sh/doctor.el @@ -3,3 +3,7 @@ (when (featurep! :checkers syntax) (unless (executable-find "shellcheck") (warn! "Couldn't find shellcheck. Shell script linting will not work"))) + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/swift/doctor.el b/modules/lang/swift/doctor.el new file mode 100644 index 000000000..c5efe98bc --- /dev/null +++ b/modules/lang/swift/doctor.el @@ -0,0 +1,5 @@ +;;; lang/swift/doctor.el -*- lexical-binding: t; -*- + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/web/doctor.el b/modules/lang/web/doctor.el index fa51a0d30..575bdccb4 100644 --- a/modules/lang/web/doctor.el +++ b/modules/lang/web/doctor.el @@ -4,6 +4,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "js-beautify") (warn! "Couldn't find js-beautify. Code formatting in JS/CSS/HTML modes will not work.")) From 8d27b2bf9025bb2354cddb0eae792367036f63be Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 23 Oct 2021 02:12:32 +0100 Subject: [PATCH 22/80] nit(tree-sitter): remove outdated comments --- modules/tools/tree-sitter/config.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index fc19c6167..940d884f8 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -27,11 +27,10 @@ (use-package! evil-textobj-tree-sitter :after tree-sitter :config - ;; FIXME: only bind when using a supported major mode (map! :map +tree-sitter-enabled-mode-maps :textobj "f" nil nil - :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") ;; redef + :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") :textobj "F" (evil-textobj-tree-sitter-get-textobj "call.inner") (evil-textobj-tree-sitter-get-textobj "call.outer") From 83d22fe5ef76258cc4296590c75abcf2211b64a6 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 23 Oct 2021 02:15:49 +0100 Subject: [PATCH 23/80] feat(fold): add ts-fold --- modules/editor/fold/config.el | 6 ++++++ modules/editor/fold/packages.el | 3 +++ 2 files changed, 9 insertions(+) diff --git a/modules/editor/fold/config.el b/modules/editor/fold/config.el index 3dd9ed5c1..17c8679e6 100644 --- a/modules/editor/fold/config.el +++ b/modules/editor/fold/config.el @@ -86,3 +86,9 @@ "zE" #'vimish-fold-delete-all) :config (vimish-fold-global-mode +1)) + +(use-package! ts-fold + :when (featurep! :tools tree-sitter) + :after tree-sitter + :config + (ts-fold-mode +1)) diff --git a/modules/editor/fold/packages.el b/modules/editor/fold/packages.el index ff2233c81..022df265e 100644 --- a/modules/editor/fold/packages.el +++ b/modules/editor/fold/packages.el @@ -6,3 +6,6 @@ (package! vimish-fold :pin "a6501cbfe3db791f9ca17fd986c7202a87f3adb8") (when (featurep! :editor evil) (package! evil-vimish-fold :pin "b6e0e6b91b8cd047e80debef1a536d9d49eef31a")) +(when (featurep! :tools tree-sitter) + (package! ts-fold :pin "d6fbca3748a113c1ededbf20d84712048ade74da" + :recipe (:host github :repo "jcs090218/ts-fold"))) From c1f640209aa47b9eaf58761167097ce52b38c42a Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 23 Oct 2021 02:16:15 +0100 Subject: [PATCH 24/80] feat(fold): add ts-fold support to wrappers Changes: - add +fold--ts-fold-p which only checks if the feature is around - add ts-fold into +fold/toggle, +fold/open, +fold/close - update doc strings --- modules/editor/fold/autoload/fold.el | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index 69726ebaa..b8ce7ad39 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -32,6 +32,10 @@ (end-of-line) (+fold--hideshow-fold-p)))))) +;; NOTE: does this need more? +(defun +fold--ts-fold-p () + (featurep 'ts-fold)) + (defun +fold--invisible-points (count) (let (points) (save-excursion @@ -62,7 +66,7 @@ (defun +fold/toggle () "Toggle the fold at point. -Targets `vimmish-fold', `hideshow' and `outline' folds." +Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (interactive) (save-excursion (cond ((+fold--vimish-fold-p) (vimish-fold-toggle)) @@ -70,29 +74,32 @@ Targets `vimmish-fold', `hideshow' and `outline' folds." (cl-letf (((symbol-function #'outline-hide-subtree) (symbol-function #'outline-hide-entry))) (outline-toggle-children))) + ((+fold--ts-fold-p) (ts-fold-toggle)) ((+fold--hideshow-fold-p) (+fold-from-eol (hs-toggle-hiding)))))) ;;;###autoload (defun +fold/open () "Open the folded region at point. -Targets `vimmish-fold', `hideshow' and `outline' folds." +Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (interactive) (save-excursion (cond ((+fold--vimish-fold-p) (vimish-fold-unfold)) ((+fold--outline-fold-p) (outline-show-children) (outline-show-entry)) + ((+fold--ts-fold-p) (ts-fold-open)) ((+fold--hideshow-fold-p) (+fold-from-eol (hs-show-block)))))) ;;;###autoload (defun +fold/close () "Close the folded region at point. -Targets `vimmish-fold', `hideshow' and `outline' folds." +Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (interactive) (save-excursion (cond ((+fold--vimish-fold-p) (vimish-fold-refold)) + ((+fold--ts-fold-p) (ts-fold-close)) ((+fold--hideshow-fold-p) (+fold-from-eol (hs-hide-block))) ((+fold--outline-fold-p) (outline-hide-subtree))))) From c3e360eeaa46d8c0d674c8da291c2ed4edbda4ce Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 28 Oct 2021 14:46:22 +0100 Subject: [PATCH 25/80] tweak(tree-sitter): add tree sitter check to foldp instead of just checking if ts-fold is enabled I also check i tree-sitter mode is actually enabled if not it will move onto hidehshow --- modules/editor/fold/autoload/fold.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index b8ce7ad39..260fa718f 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -34,7 +34,8 @@ ;; NOTE: does this need more? (defun +fold--ts-fold-p () - (featurep 'ts-fold)) + (and tree-sitter-mode + (featurep 'ts-fold))) (defun +fold--invisible-points (count) (let (points) From 7b9d00d6616d67cbc92765bb9da0dd0d2d9e9581 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 28 Oct 2021 15:07:03 +0100 Subject: [PATCH 26/80] feat(tree-sitter): add ts to open/close all also refactor +fold-open-all, +fold-close-all to use cond instead of the when case for vimish fold. --- modules/editor/fold/autoload/fold.el | 42 +++++++++++++++------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index 260fa718f..35b5f24d6 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -109,18 +109,20 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." "Open folds at LEVEL (or all folds if LEVEL is nil)." (interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg)))) - (when (featurep 'vimish-fold) - (vimish-fold-unfold-all)) - (save-excursion - (+fold--ensure-hideshow-mode) - (if (integerp level) - (progn - (outline-hide-sublevels (max 1 (1- level))) - (hs-life-goes-on - (hs-hide-level-recursive (1- level) (point-min) (point-max)))) - (hs-show-all) - (when (fboundp 'outline-show-all) - (outline-show-all))))) + (cond ((+fold--ts-fold-p) + (ts-fold-open-all)) + ((featurep 'vimish-fold) + (vimish-fold-unfold-all)) + (t (save-excursion + (+fold--ensure-hideshow-mode) + (if (integerp level) + (progn + (outline-hide-sublevels (max 1 (1- level))) + (hs-life-goes-on + (hs-hide-level-recursive (1- level) (point-min) (point-max)))) + (hs-show-all) + (when (fboundp 'outline-show-all) + (outline-show-all))))))) ;;;###autoload (defun +fold/close-all (&optional level) @@ -128,13 +130,15 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg)))) (save-excursion - (when (featurep 'vimish-fold) - (vimish-fold-refold-all)) - (+fold--ensure-hideshow-mode) - (hs-life-goes-on - (if (integerp level) - (hs-hide-level-recursive (1- level) (point-min) (point-max)) - (hs-hide-all))))) + (cond ((+fold--ts-fold-p) + (ts-fold-close-all)) + (t (when (featurep 'vimish-fold) + (vimish-fold-refold-all)) + (+fold--ensure-hideshow-mode) + (hs-life-goes-on + (if (integerp level) + (hs-hide-level-recursive (1- level) (point-min) (point-max)) + (hs-hide-all))))))) ;;;###autoload (defun +fold/next (count) From caa64e832423f73f6883fe87849cb5283d7d5747 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 6 Nov 2021 12:47:57 +0000 Subject: [PATCH 27/80] feat(fold): change ts-fold replacement face this is to make it similar to hideshow --- modules/editor/fold/config.el | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/editor/fold/config.el b/modules/editor/fold/config.el index 17c8679e6..11be67aad 100644 --- a/modules/editor/fold/config.el +++ b/modules/editor/fold/config.el @@ -91,4 +91,11 @@ :when (featurep! :tools tree-sitter) :after tree-sitter :config + ;; we want to use our own face so we nullify this one to have no effect and + ;; make it more similar to hideshows + (custom-set-faces! '(ts-fold-replacement-face :foreground nil + :box nil + :inherit font-lock-comment-face + :weight light)) + (setq ts-fold-replacement " [...] ") (ts-fold-mode +1)) From f39fb3afc1ddf5990846d8e62cd7c32de182d0b5 Mon Sep 17 00:00:00 2001 From: Ellis Kenyo Date: Sun, 7 Nov 2021 09:13:34 +0000 Subject: [PATCH 28/80] fix(tree-sitter): adjust description for textobjs Reduce the length of the description for evil text objects --- modules/tools/tree-sitter/config.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 940d884f8..23d3a9e20 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -43,4 +43,9 @@ :textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer") :textobj "l" nil nil - :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer")))) + :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer")) + (after! which-key + (setq which-key-allow-multiple-replacements t) + (pushnew! + which-key-replacement-alist + '(("" . "\\`+?evil-textobj-tree-sitter-function--\\(.*\\)\\(?:.inner\\|.outer\\)") . (nil . "\\1")))))) From c16e16e92bf2831ac1d01d655ffa139d91f3c267 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Mon, 8 Nov 2021 02:30:25 +0000 Subject: [PATCH 29/80] feat(fold): define ts-fold movement logic As ts-fold does not provide fold movement logic I made my own. This can and probably should be upstreamed but the details for that are not clear --- modules/editor/fold/autoload/fold.el | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index 35b5f24d6..b3bd8ad6c 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -154,7 +154,25 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (if (> count 0) (evil-vimish-fold/next-fold count) (evil-vimish-fold/previous-fold (- count)))) - (if (/= (point) orig-pt) (point)))) + (if (/= (point) orig-pt) (point))) + (lambda () + ;; ts-fold does not define movement functions so we need to do it ourselves + (when (+fold--ts-fold-p) + (let* ((arg-list (if (> count 0) ;; depending on direction we need to change the ranges + (list (point) (point-max)) + (list (point-min) (point)))) + (comp-fun (if (> count 0) ;; also depending on direction we need to change how we sort the list + #'< + #'>)) + (ovs (seq-filter + (lambda (ov) + (eq (overlay-get ov 'creator) 'ts-fold)) + ;; `overlays-in' does not provide a list that is sorted + ;; (in the way we need it atleast) so we need to sort it based on direction + (cl-sort (eval `(overlays-in ,@arg-list)) + (lambda (ov1 ov2) + (funcall comp-fun (overlay-start ov1) (overlay-start ov2))))))) + (if ovs (goto-char (overlay-start (nth (- (abs count) 1) ovs)))))))) if (save-excursion (funcall fn)) collect it into points finally do From 6127692848385556d9221e73b0543751bf90c976 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Mon, 8 Nov 2021 15:22:49 +0000 Subject: [PATCH 30/80] fix(fold): handle bounding error This basically stops the "not overlay" error we were getting when you tried to jump to many times. this does have the disadvantage of not jumping at all if the amount of jumps is higher than the amount of overlays but this can be fixed in a future commit if necessary. --- modules/editor/fold/autoload/fold.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index b3bd8ad6c..7ae2aef1c 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -172,7 +172,8 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (cl-sort (eval `(overlays-in ,@arg-list)) (lambda (ov1 ov2) (funcall comp-fun (overlay-start ov1) (overlay-start ov2))))))) - (if ovs (goto-char (overlay-start (nth (- (abs count) 1) ovs)))))))) + (if (and ovs (<= count (length ovs))) + (goto-char (overlay-start (nth (- (abs count) 1) ovs)))))))) if (save-excursion (funcall fn)) collect it into points finally do From 32bf2ee4cfd5c6d5681c883eab5e6f7a447855e8 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 9 Dec 2021 03:22:33 +0000 Subject: [PATCH 31/80] fix(tree-sitter): message raised when jumping up as opposed to a nasty error, the error was raised because I was not using the abs of count this commit also comes with general code cleanup, this includes - removal of the eval quasiquote antipattern when an apply would work better - use of the :key keyword instead of the lambda --- modules/editor/fold/autoload/fold.el | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index 7ae2aef1c..5386d376b 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -169,11 +169,9 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (eq (overlay-get ov 'creator) 'ts-fold)) ;; `overlays-in' does not provide a list that is sorted ;; (in the way we need it atleast) so we need to sort it based on direction - (cl-sort (eval `(overlays-in ,@arg-list)) - (lambda (ov1 ov2) - (funcall comp-fun (overlay-start ov1) (overlay-start ov2))))))) - (if (and ovs (<= count (length ovs))) - (goto-char (overlay-start (nth (- (abs count) 1) ovs)))))))) + (cl-sort (apply #'overlays-in arg-list) comp-fun :key #'overlay-start)))) + (if (and ovs (<= (abs count) (length ovs))) + (goto-char (overlay-start (nth (- (abs count) 1) ovs)))))))) if (save-excursion (funcall fn)) collect it into points finally do From 2a7442da74edd17ced1b93435023cf5d1773cb5e Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 9 Dec 2021 03:26:29 +0000 Subject: [PATCH 32/80] nit(tree-sitter): cleanup remove dead lines remove old code comments add in hack... thingy? --- modules/tools/tree-sitter/config.el | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 23d3a9e20..f8362d511 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -1,9 +1,6 @@ ;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*- - - (use-package! tree-sitter - ;; :hook (prog-mode . turn-on-tree-sitter-mode) :defer t ;; loading is handled by individual modes :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config @@ -17,7 +14,7 @@ ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t)) -(if (daemonp) ;; eager load when in daemon as its start time is easily consumed +(if (daemonp) ;; HACK: eager load when in daemon as its start time is easily consumed (require 'tree-sitter-langs) (add-hook! 'tree-sitter-after-on-hook (require 'tree-sitter-langs))) From 66012fb4138bd010a40e1ced2ebf4fa4eae52dbe Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 10 Dec 2021 01:41:42 +0000 Subject: [PATCH 33/80] bump: :tools tree-sitter emacs-tree-sitter/elisp-tree-sitter@4d9871d23999 -> emacs-tree-sitter/elisp-tree-sitter@8bbbfa4fc5f4 emacs-tree-sitter/tree-sitter-langs@fa47b55f7bd1 -> emacs-tree-sitter/tree-sitter-langs@86a894a61797 meain/evil-textobj-tree-sitter@eedc1f54611e -> meain/evil-textobj-tree-sitter@4d79ea71219c --- modules/tools/tree-sitter/packages.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 11ddf4e1c..d7c04d0bd 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,11 +2,11 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - :pin "4d9871d23999fe5f8de821e23c9ec576df2b2738") + :pin "8bbbfa4fc5f478f10c7cb968177d5a907fe5928f") (package! tree-sitter-langs - :pin "fa47b55f7bd11bd2b17ab48deb03ed23000bb974") + :pin "86a894a617976aefa453fa6ce8dd9871c58f733e") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "eedc1f54611e4403ea228b33056388a8539a2b3e")) + :pin "4d79ea71219cb0153baf4046af8aae6b1ed2fcfb")) From 2cd40f7aa71a22fa9a32642c1ace33f0d7bcecef Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 19 Dec 2021 22:22:32 +0000 Subject: [PATCH 34/80] fix(tree-sitter): properly gatekeep ts text objs before today all text objects were bound in all modes, now they have been properly gatekept and only appear when `+tree-sitter-keys-mode` is enabled / hooked, this allows for more flexibility and the ability to arbitrarily disable / enable tree sitter text objects (which is nice) --- modules/tools/tree-sitter/config.el | 66 +++++++++++++++-------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index f8362d511..e85da3c24 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -4,45 +4,47 @@ :defer t ;; loading is handled by individual modes :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config - (defvar +tree-sitter-enabled-mode-maps (seq-map (lambda (mode) - (intern (concat - (symbol-name (car mode)) "-map"))) - tree-sitter-major-mode-language-alist) - "List of mode hooks for tree sitter enabled modes.") ;; This makes every node a link to a section of code (setq tree-sitter-debug-jump-buttons t ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t)) -(if (daemonp) ;; HACK: eager load when in daemon as its start time is easily consumed - (require 'tree-sitter-langs) - (add-hook! 'tree-sitter-after-on-hook - (require 'tree-sitter-langs))) +(defvar +tree-sitter-inner-text-objects-map (make-sparse-keymap)) +(defvar +tree-sitter-outer-text-objects-map (make-sparse-keymap)) +(defvar +tree-sitter-keys-mode-map + (let ((keymap (make-sparse-keymap))) + (evil-define-key '(visual operator) '+tree-sitter-keys-mode + "i" +tree-sitter-inner-text-objects-map + "a" +tree-sitter-outer-text-objects-map) + keymap) + "Basic keymap for tree sitter text objects") -(when (featurep! :editor evil +everywhere) - (use-package! evil-textobj-tree-sitter - :after tree-sitter - :config - (map! - :map +tree-sitter-enabled-mode-maps - :textobj "f" nil nil - :textobj "f" (evil-textobj-tree-sitter-get-textobj "function.inner") (evil-textobj-tree-sitter-get-textobj "function.outer") +(define-minor-mode +tree-sitter-keys-mode + "A minor mode with tree sitter keybinds." + :keymap +tree-sitter-keys-mode-map) - :textobj "F" (evil-textobj-tree-sitter-get-textobj "call.inner") (evil-textobj-tree-sitter-get-textobj "call.outer") +(use-package! evil-textobj-tree-sitter + :when (featurep! :editor evil +everywhere) + :after tree-sitter + :config - :textobj "C" (evil-textobj-tree-sitter-get-textobj "class.inner") (evil-textobj-tree-sitter-get-textobj "class.outer") + (map! (:map +tree-sitter-inner-text-objects-map + "f" (evil-textobj-tree-sitter-get-textobj "function.inner") + "F" (evil-textobj-tree-sitter-get-textobj "call.inner") + "C" (evil-textobj-tree-sitter-get-textobj "class.inner") + "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") + "l" (evil-textobj-tree-sitter-get-textobj "loop.inner")) + (:map +tree-sitter-outer-text-objects-map + "f" (evil-textobj-tree-sitter-get-textobj "function.outer") + "F" (evil-textobj-tree-sitter-get-textobj "call.outer") + "C" (evil-textobj-tree-sitter-get-textobj "class.outer") + "c" (evil-textobj-tree-sitter-get-textobj "comment.outer") + "i" (evil-textobj-tree-sitter-get-textobj "conditional.outer") + "l" (evil-textobj-tree-sitter-get-textobj "loop.outer"))) - :textobj "c" nil nil - :textobj "c" nil (evil-textobj-tree-sitter-get-textobj "comment.outer") - - :textobj "i" nil nil - :textobj "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") (evil-textobj-tree-sitter-get-textobj "conditional.outer") - - :textobj "l" nil nil - :textobj "l" (evil-textobj-tree-sitter-get-textobj "loop.inner") (evil-textobj-tree-sitter-get-textobj "loop.outer")) - (after! which-key - (setq which-key-allow-multiple-replacements t) - (pushnew! - which-key-replacement-alist - '(("" . "\\`+?evil-textobj-tree-sitter-function--\\(.*\\)\\(?:.inner\\|.outer\\)") . (nil . "\\1")))))) + (after! which-key + (setq which-key-allow-multiple-replacements t) + (pushnew! + which-key-replacement-alist + '(("" . "\\`+?evil-textobj-tree-sitter-function--\\(.*\\)\\(?:.inner\\|.outer\\)") . (nil . "\\1"))))) From 0c2f986708d1958ffbf37f20c28e0a5b3911234a Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 19 Dec 2021 22:33:58 +0000 Subject: [PATCH 35/80] feat(:lang): enable ts text objs in modes --- modules/lang/agda/config.el | 4 +++- modules/lang/cc/config.el | 4 +++- modules/lang/csharp/config.el | 4 +++- modules/lang/elm/config.el | 4 +++- modules/lang/go/config.el | 4 +++- modules/lang/java/config.el | 4 +++- modules/lang/javascript/config.el | 4 +++- modules/lang/json/config.el | 4 +++- modules/lang/julia/config.el | 4 +++- modules/lang/ocaml/config.el | 4 +++- modules/lang/php/config.el | 4 +++- modules/lang/python/config.el | 4 +++- modules/lang/ruby/config.el | 4 +++- modules/lang/rust/config.el | 4 +++- modules/lang/scala/config.el | 4 +++- modules/lang/sh/config.el | 4 +++- modules/lang/swift/config.el | 4 +++- modules/lang/web/config.el | 4 +++- 18 files changed, 54 insertions(+), 18 deletions(-) diff --git a/modules/lang/agda/config.el b/modules/lang/agda/config.el index 97f107625..5c543fb0b 100644 --- a/modules/lang/agda/config.el +++ b/modules/lang/agda/config.el @@ -42,4 +42,6 @@ ;; Tree Sitter (eval-when! (featurep! +tree-sitter) (add-hook! '(agda-mode - agda2-mode) #'turn-on-tree-sitter-mode)) + agda2-mode) + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index 7d35a4d40..8a4ee6ff8 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -308,4 +308,6 @@ If rtags or rdm aren't available, fail silently instead of throwing a breaking e ;; Tree sitter (eval-when! (featurep! +tree-sitter) (add-hook! '(c-mode-hook - c++-mode-hook) #'turn-on-tree-sitter-mode)) + c++-mode-hook) + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/csharp/config.el b/modules/lang/csharp/config.el index 367169547..83ffd232d 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -75,4 +75,6 @@ or terminating simple string." ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'csharp-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'csharp-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/elm/config.el b/modules/lang/elm/config.el index 4a8c2697e..803a553dd 100644 --- a/modules/lang/elm/config.el +++ b/modules/lang/elm/config.el @@ -24,4 +24,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'elm-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'elm-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/go/config.el b/modules/lang/go/config.el index dca231476..33c025140 100644 --- a/modules/lang/go/config.el +++ b/modules/lang/go/config.el @@ -79,4 +79,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'go-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'go-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/java/config.el b/modules/lang/java/config.el index 8955bb5c1..17e6f26f6 100644 --- a/modules/lang/java/config.el +++ b/modules/lang/java/config.el @@ -52,4 +52,6 @@ If the depth is 2, the first two directories are removed: net.lissner.game.") ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'java-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'java-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 6aa94a7c2..5dbc57f4f 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -319,4 +319,6 @@ to tide." js2-mode-hook js3-mode-hook typescript-mode-hook - rjsx-mode) #'turn-on-tree-sitter-mode)) + rjsx-mode) + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/json/config.el b/modules/lang/json/config.el index 303f2345a..fe5faf134 100644 --- a/modules/lang/json/config.el +++ b/modules/lang/json/config.el @@ -32,4 +32,6 @@ (eval-when! (featurep! +tree-sitter) (add-hook! '(json-mode - jsonc-mode) #'turn-on-tree-sitter-mode)) + jsonc-mode) + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/julia/config.el b/modules/lang/julia/config.el index b69459f80..cf765080e 100644 --- a/modules/lang/julia/config.el +++ b/modules/lang/julia/config.el @@ -102,4 +102,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'julia-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'julia-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/ocaml/config.el b/modules/lang/ocaml/config.el index 7eaaaf0e6..3d33b8675 100644 --- a/modules/lang/ocaml/config.el +++ b/modules/lang/ocaml/config.el @@ -121,4 +121,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'tuareg-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'tuareg-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el index 406cc39fd..5278d5e07 100644 --- a/modules/lang/php/config.el +++ b/modules/lang/php/config.el @@ -179,4 +179,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! #'php-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! #'php-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index 2b5273a76..ad228a5ed 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -348,4 +348,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'python-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'python-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index 0e1121d42..57a31172e 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -198,4 +198,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'ruby-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'ruby-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index b97fb20e3..320f526b8 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -84,4 +84,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'rustic-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'rustic-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/scala/config.el b/modules/lang/scala/config.el index 27864a264..234e7e99d 100644 --- a/modules/lang/scala/config.el +++ b/modules/lang/scala/config.el @@ -53,4 +53,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'scala-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'scala-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/sh/config.el b/modules/lang/sh/config.el index a1de74ca4..b8593401b 100755 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -96,4 +96,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'sh-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'sh-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/swift/config.el b/modules/lang/swift/config.el index b349ec022..fbfad58b6 100644 --- a/modules/lang/swift/config.el +++ b/modules/lang/swift/config.el @@ -34,4 +34,6 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'swift-mode-hook #'turn-on-tree-sitter-mode)) + (add-hook! 'swift-mode-hook + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) diff --git a/modules/lang/web/config.el b/modules/lang/web/config.el index a40fe6010..194a03e3e 100644 --- a/modules/lang/web/config.el +++ b/modules/lang/web/config.el @@ -60,4 +60,6 @@ (eval-when! (featurep! +tree-sitter) (add-hook! '(html-mode-hook mhtml-mode-hook - css-mode-hook)) #'turn-on-tree-sitter-mode) + css-mode-hook) + #'turn-on-tree-sitter-mode + #'+tree-sitter-keys-mode)) From 65085795952b8c5e1f57a4d2a6ba4f671d689b26 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 19 Dec 2021 23:05:15 +0000 Subject: [PATCH 36/80] docs(tree-sitter): add docs for disabling text-obj for certain modes, this also removes the hacks section as it was not needed --- modules/tools/tree-sitter/README.org | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 988467a4d..222215c07 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -8,12 +8,12 @@ - [[#maintainers][Maintainers]] - [[#module-flags][Module Flags]] - [[#plugins][Plugins]] - - [[#hacks][Hacks]] - [[#prerequisites][Prerequisites]] - [[#features][Features]] - [[#language-support][Language support]] - [[#text-objects][Text Objects]] - [[#configuration][Configuration]] + - [[#disable-text-objects-for-certain-modes][Disable text objects for certain modes]] - [[#troubleshooting][Troubleshooting]] * Description @@ -41,9 +41,6 @@ This module provides no flags. + [[https://github.com/emacs-tree-sitter/tree-sitter-langs][tree-sitter-langs]] + [[https://github.com/meain/evil-textobj-tree-sitter][evil-textobj-tree-sitter]]* (=:editor evil +everywhere=) -** TODO Hacks -# A list of internal modifications to included packages; omit if unneeded - * Prerequisites This module has no prerequisites. @@ -68,8 +65,14 @@ Currently text objects are bound to: They are used in a container context (not =vf= but =vaf= or =vif=) -* TODO Configuration -# How to configure this module, including common problems and how to address them. +* Configuration +** Disable text objects for certain modes +If you wish to disable tree sitter text objects then you can just remove +=+tree-sitter-keys-mode= from the language mode hook, for example if we did not +want it for ruby we would use this snippet +#+begin_src emacs-lisp +(remove-hook! 'ruby-mode-hook #'+tree-sitter-keys-mode) +#+end_src * TODO Troubleshooting # Common issues and their solution, or places to look for help. From 1f5618f02b55676f664d15295cca7e6118d9f13b Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 24 Dec 2021 14:13:34 +0000 Subject: [PATCH 37/80] docs(tree-sitter): add documentation sections also add a line to the quote --- modules/tools/tree-sitter/README.org | 38 +++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 222215c07..c8c3da033 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -14,7 +14,10 @@ - [[#text-objects][Text Objects]] - [[#configuration][Configuration]] - [[#disable-text-objects-for-certain-modes][Disable text objects for certain modes]] + - [[#adding-your-own-text-objects][Adding your own text objects]] + - [[#disabling-highlighting-for-certain-modes][Disabling highlighting for certain modes]] - [[#troubleshooting][Troubleshooting]] + - [[#error-bad-bounding-indices-0-1][=(error "Bad bounding indices: 0, 1")=]] * Description This module adds [[https://tree-sitter.github.io/tree-sitter/][tree-sitter]] support to doom: @@ -22,7 +25,8 @@ This module adds [[https://tree-sitter.github.io/tree-sitter/][tree-sitter]] sup #+begin_quote Tree sitter is a parser generator tool and an incremental parsing library. It can build a concrete syntax tree for a source file and efficiently update the -syntax tree as the source file is edited. +syntax tree as the source file is edited. This allows for features of the editor + to become syntax aware. #+end_quote It includes: @@ -74,5 +78,33 @@ want it for ruby we would use this snippet (remove-hook! 'ruby-mode-hook #'+tree-sitter-keys-mode) #+end_src -* TODO Troubleshooting -# Common issues and their solution, or places to look for help. +** Adding your own text objects +If you wish to [[https://github.com/meain/evil-textobj-tree-sitter#custom-textobjects][add your own custom text objects]] then you need to bind them and +add them to the ~+tree-sitter-{inner, outer}-text-objects-map~ +for example: +#+begin_src emacs-lisp +(map! (:map +tree-sitter-outer-text-objects-map + "m" (evil-textobj-tree-sitter-get-textobj "import" + '((python-mode . [(import_statement) @import]) + (rust-mode . [(use_declaration) @import]))))) +#+end_src + +** Disabling highlighting for certain modes +If you want to disable highlighting by default you can add a +#+begin_src emacs-lisp +(after! MODE-PACKAGE + (tree-sitter-hl-mode -1)) +#+end_src + +If you only want it for certain modes then +#+begin_src emacs-lisp +(remove-hook! 'tree-sitter-after-on-hook #'tree-sitter-hl-mode) + +(add-hook! 'MAJOR-MODE-HOOK #'tree-sitter-hl-mode) +#+end_src + +* Troubleshooting +** =(error "Bad bounding indices: 0, 1")= +This means that the text object does not have the underlying query needed, this can be +fixed by either adding in a custom query (which would override the current key +bound.) or [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects/][contributing upstream!]] From f73c7915d24ba89b141760a6477a80f715b4e2ca Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 24 Dec 2021 15:59:53 +0000 Subject: [PATCH 38/80] docs(tree-sitter): add module to example init also add the wittism to the modules.org file --- docs/modules.org | 2 +- init.example.el | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/modules.org b/docs/modules.org index cf56d041c..7eddea11e 100644 --- a/docs/modules.org +++ b/docs/modules.org @@ -195,7 +195,7 @@ Small modules that give Emacs access to external tools & services. + [[file:../modules/tools/taskrunner/README.org][taskrunner]] - TODO + [[file:../modules/tools/terraform/README.org][terraform]] - TODO + tmux - TODO -+ [[file:../modules/tools/tree-sitter/README.org][tree-sitter]] - TODO ++ [[file:../modules/tools/tree-sitter/README.org][tree-sitter]] - syntax and parsing, sitting in a tree... + [[file:../modules/tools/upload/README.org][upload]] - TODO * :ui diff --git a/init.example.el b/init.example.el index 07bcfaa6e..0ffd639db 100644 --- a/init.example.el +++ b/init.example.el @@ -105,6 +105,7 @@ ;;taskrunner ; taskrunner for all your projects ;;terraform ; infrastructure as code ;;tmux ; an API for interacting with tmux + ;;tree-sitter ; syntax and parsing, sitting in a tree... ;;upload ; map local to remote projects via ssh/ftp :os From e756d0b447f7c2e2d4eed6fa8e36f3a9d826809b Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 26 Dec 2021 16:12:20 +0000 Subject: [PATCH 39/80] docs(tree-sitter): add m1 warning to readme also fix small spelling mistake --- modules/tools/tree-sitter/README.org | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index c8c3da033..31a811fb6 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -34,6 +34,8 @@ It includes: + Structural text objects to manipulate functions statements and other code structures like any other text object +*Currently this module does not support M1 macbooks due to grammars being built for x86* + ** Maintainers - @jeetelongname @@ -46,7 +48,10 @@ This module provides no flags. + [[https://github.com/meain/evil-textobj-tree-sitter][evil-textobj-tree-sitter]]* (=:editor evil +everywhere=) * Prerequisites -This module has no prerequisites. +This module has no prerequisites. but if you are using an M1 mac (or a system +that's is not using an X86 instruction set) then you will not be able to use this +module for the moment, functions are being put in place for this use case but +they are still being worked on. * Features ** Language support @@ -56,7 +61,7 @@ highlighting support for [[https://emacs-tree-sitter.github.io/syntax-highlighti ** Text Objects Not all language support all text objects (yet). [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects#built-in-textobjects][Here is a table of the text objects languages support]] -Note: only languages with parsers in emacs have text object support currently. +Note: only languages with parser's in emacs have text object support currently. Currently text objects are bound to: | key | text object | |-----+---------------------| From 7534ce8fa709bdd23105409e02f169d12b46518e Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Wed, 5 Jan 2022 18:57:22 +0000 Subject: [PATCH 40/80] feat(tree-sitter): add parameter text object this will replace evil-{inner,outer}-arg --- modules/tools/tree-sitter/config.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index e85da3c24..d25a75b4f 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -30,12 +30,14 @@ :config (map! (:map +tree-sitter-inner-text-objects-map + "a" (evil-textobj-tree-sitter-get-textobj "parameter.inner") "f" (evil-textobj-tree-sitter-get-textobj "function.inner") "F" (evil-textobj-tree-sitter-get-textobj "call.inner") "C" (evil-textobj-tree-sitter-get-textobj "class.inner") "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") "l" (evil-textobj-tree-sitter-get-textobj "loop.inner")) (:map +tree-sitter-outer-text-objects-map + "a" (evil-textobj-tree-sitter-get-textobj "parameter.outer") "f" (evil-textobj-tree-sitter-get-textobj "function.outer") "F" (evil-textobj-tree-sitter-get-textobj "call.outer") "C" (evil-textobj-tree-sitter-get-textobj "class.outer") From e01e58c7735412e37bc50c5fe1747e0aff66fe50 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Wed, 5 Jan 2022 18:58:52 +0000 Subject: [PATCH 41/80] docs(tree-sitter): add param to text obj table --- modules/tools/tree-sitter/README.org | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 31a811fb6..aa6c5d47f 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -65,6 +65,7 @@ Note: only languages with parser's in emacs have text object support currently. Currently text objects are bound to: | key | text object | |-----+---------------------| +| =a= | parameter list | | =f= | function definition | | =F= | function call | | =C= | class | From c1bea42fa089a88e50ad571b4976d5e0a74323c8 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Wed, 5 Jan 2022 20:14:42 +0000 Subject: [PATCH 42/80] bump: :tools tree-sitter emacs-tree-sitter/elisp-tree-sitter@8bbbfa4fc5f4 -> emacs-tree-sitter/elisp-tree-sitter@48b06796a3b2 emacs-tree-sitter/tree-sitter-langs@86a894a61797 -> emacs-tree-sitter/tree-sitter-langs@3c0c82f9fb0a meain/evil-textobj-tree-sitter@4d79ea71219c -> meain/evil-textobj-tree-sitter@08823ff97277 - This fixes the java issue where switch expressions were erroring, - Roll back evil text obj tree sitter as ruby text objects became un - usable, see https://github.com/emacs-tree-sitter/elisp-tree-sitter/issues/180 --- modules/tools/tree-sitter/packages.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index d7c04d0bd..40c150b6b 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,11 +2,11 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - :pin "8bbbfa4fc5f478f10c7cb968177d5a907fe5928f") + :pin "48b06796a3b2e76ce004972d929de38146eafaa0") (package! tree-sitter-langs - :pin "86a894a617976aefa453fa6ce8dd9871c58f733e") + :pin "3c0c82f9fb0a796f5ebd7e1e4c89f13d5ab6ef58") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "4d79ea71219cb0153baf4046af8aae6b1ed2fcfb")) + :pin "08823ff97277fe50540d8226c7d298e06fb14932")) From 4e870be9ab761d422c56a9ded15a0c883bcdb67b Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 9 Jan 2022 02:25:17 +0000 Subject: [PATCH 43/80] docs(tree-sitter): add no text object found error --- modules/tools/tree-sitter/README.org | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index aa6c5d47f..58b8527c9 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -18,6 +18,7 @@ - [[#disabling-highlighting-for-certain-modes][Disabling highlighting for certain modes]] - [[#troubleshooting][Troubleshooting]] - [[#error-bad-bounding-indices-0-1][=(error "Bad bounding indices: 0, 1")=]] + - [[#no-textobj-text-object-found][=No 'TEXTOBJ' text object found=]] * Description This module adds [[https://tree-sitter.github.io/tree-sitter/][tree-sitter]] support to doom: @@ -114,3 +115,11 @@ If you only want it for certain modes then This means that the text object does not have the underlying query needed, this can be fixed by either adding in a custom query (which would override the current key bound.) or [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects/][contributing upstream!]] + +** =No 'TEXTOBJ' text object found= +the main reason for this is the underlying text object using the =#make-range!= +predicate, which at the moment [[https://github.com/emacs-tree-sitter/elisp-tree-sitter/issues/180][is not implemented in emacs tree sitter]] (see this +issue on [[https://github.com/meain/evil-textobj-tree-sitter/issues/33][evil-textobj-tree-sitter]]). + +the only way around it is to rewrite the query to not use =#make-range!= or to +implement that predicate the elisp tree sitter core From 75897af03699d1c07e2550c35ea2ec10ffe5319e Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 23 Jan 2022 16:14:41 +0000 Subject: [PATCH 44/80] bump: :tools tree-sitter evil-textobj-tree-sitter meain/evil-textobj-tree-sitter@08823ff97277 -> meain/evil-textobj-tree-sitter@607b71f38a1b --- modules/tools/tree-sitter/packages.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 40c150b6b..8b9768e59 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -9,4 +9,4 @@ (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "08823ff97277fe50540d8226c7d298e06fb14932")) + :pin "607b71f38a1b2d7fa464814d968427435d31dd7c")) From 89f82428e6df6f0da6649db04d09b43ca23409c0 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Mon, 24 Jan 2022 18:32:38 +0000 Subject: [PATCH 45/80] feat(tree-sitter): goto functionality --- modules/tools/tree-sitter/autoload.el | 10 ++++++++++ modules/tools/tree-sitter/config.el | 27 ++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 modules/tools/tree-sitter/autoload.el diff --git a/modules/tools/tree-sitter/autoload.el b/modules/tools/tree-sitter/autoload.el new file mode 100644 index 000000000..3c7c67d14 --- /dev/null +++ b/modules/tools/tree-sitter/autoload.el @@ -0,0 +1,10 @@ +;;; tools/tree-sitter/autoload.el -*- lexical-binding: t; -*- + +;;;###autoload +(defun +tree-sitter-goto-textobj (group &optional previous end query) + "Thin wrapper that returns the symbol of a named function, used in keybindings." + (let ((sym (intern (format "+goto%s%s-%s" (if previous "-previous" "") (if end "-end" "") group)))) + (fset sym (lambda () + (interactive) + (evil-textobj-tree-sitter-goto-textobj group previous end query))) + sym)) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index d25a75b4f..8d9df2fbb 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -11,12 +11,19 @@ (defvar +tree-sitter-inner-text-objects-map (make-sparse-keymap)) (defvar +tree-sitter-outer-text-objects-map (make-sparse-keymap)) +(defvar +tree-sitter-goto-previous-map (make-sparse-keymap)) +(defvar +tree-sitter-goto-next-map (make-sparse-keymap)) (defvar +tree-sitter-keys-mode-map (let ((keymap (make-sparse-keymap))) + ;; ts text objects (evil-define-key '(visual operator) '+tree-sitter-keys-mode "i" +tree-sitter-inner-text-objects-map "a" +tree-sitter-outer-text-objects-map) + ;; ts goto nodes + (evil-define-key 'normal '+tree-sitter-keys-mode + "[g" +tree-sitter-goto-previous-map + "]g" +tree-sitter-goto-next-map) keymap) "Basic keymap for tree sitter text objects") @@ -43,7 +50,25 @@ "C" (evil-textobj-tree-sitter-get-textobj "class.outer") "c" (evil-textobj-tree-sitter-get-textobj "comment.outer") "i" (evil-textobj-tree-sitter-get-textobj "conditional.outer") - "l" (evil-textobj-tree-sitter-get-textobj "loop.outer"))) + "l" (evil-textobj-tree-sitter-get-textobj "loop.outer")) + + (:map +tree-sitter-goto-previous-map + "a" (+tree-sitter-goto-textobj "parameter.outer" t) + "f" (+tree-sitter-goto-textobj "function.outer" t) + "F" (+tree-sitter-goto-textobj "call.outer" t) + "C" (+tree-sitter-goto-textobj "class.outer" t) + "c" (+tree-sitter-goto-textobj "comment.outer" t) + "i" (+tree-sitter-goto-textobj "conditional.outer" t) + "l" (+tree-sitter-goto-textobj "loop.outer" t)) + (:map +tree-sitter-goto-next-map + "a" (+tree-sitter-goto-textobj "parameter.outer") + "f" (+tree-sitter-goto-textobj "function.outer") + "F" (+tree-sitter-goto-textobj "call.outer") + "C" (+tree-sitter-goto-textobj "class.outer") + "c" (+tree-sitter-goto-textobj "comment.outer") + "i" (+tree-sitter-goto-textobj "conditional.outer") + "l" (+tree-sitter-goto-textobj "loop.outer"))) + (after! which-key (setq which-key-allow-multiple-replacements t) From e3b5798a587bc43a92223135ed96168129903817 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Mon, 24 Jan 2022 18:38:18 +0000 Subject: [PATCH 46/80] docs(tree-sitter): mention goto --- modules/tools/tree-sitter/README.org | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 58b8527c9..ef1b0aa30 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -12,6 +12,7 @@ - [[#features][Features]] - [[#language-support][Language support]] - [[#text-objects][Text Objects]] + - [[#goto-certain-nodes][Goto certain nodes]] - [[#configuration][Configuration]] - [[#disable-text-objects-for-certain-modes][Disable text objects for certain modes]] - [[#adding-your-own-text-objects][Adding your own text objects]] @@ -76,6 +77,11 @@ Currently text objects are bound to: They are used in a container context (not =vf= but =vaf= or =vif=) +** Goto certain nodes +you can also jump to the next / previous node type in a buffer by using =[g= +or =]g= respectfully, the following key will correspond to the text object you +want to jump to + * Configuration ** Disable text objects for certain modes If you wish to disable tree sitter text objects then you can just remove From e9f98001c1e88d6179a5283065dfac794bd8d9d9 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 25 Jan 2022 19:51:04 +0000 Subject: [PATCH 47/80] feat(tree-sitter): support typescript-tsx-mode --- modules/lang/javascript/config.el | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 5dbc57f4f..ab221d5cd 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -127,7 +127,17 @@ (define-derived-mode typescript-tsx-mode web-mode "TypeScript-TSX") (when (featurep! +lsp) (after! lsp-mode - (add-to-list 'lsp--formatting-indent-alist '(typescript-tsx-mode . typescript-indent-level))))) + (add-to-list 'lsp--formatting-indent-alist '(typescript-tsx-mode . typescript-indent-level)))) + (when (featurep! +tree-sitter) + (after! tree-sitter + (pushnew! tree-sitter-major-mode-language-alist '(typescript-tsx-mode . tsx)) + (pushnew! evil-textobj-tree-sitter-major-mode-language-alist '(typescript-tsx-mode . "tsx")) + + ;; HACK: the tsx grammer doesn't work with the hightlighting provided by + ;; font-lock-keywords. + ;; https://github.com/emacs-tree-sitter/tree-sitter-langs/issues/23 + (setq-hook! 'typescript-tsx-mode-hook + tree-sitter-hl-use-font-lock-keywords nil)))) (set-docsets! '(typescript-mode typescript-tsx-mode) :add "TypeScript" "AngularTS") @@ -319,6 +329,7 @@ to tide." js2-mode-hook js3-mode-hook typescript-mode-hook + typescript-tsx-mode-hook rjsx-mode) #'turn-on-tree-sitter-mode #'+tree-sitter-keys-mode)) From 084d0a69185d204a400555980b332a7de58b238e Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 25 Jan 2022 20:16:34 +0000 Subject: [PATCH 48/80] docs(tree-sitter): mention typescript-tsx support --- modules/tools/tree-sitter/README.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index ef1b0aa30..d7581d5a8 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -58,7 +58,7 @@ they are still being worked on. * Features ** Language support Currently Emacs tree sitter has got [[https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos][parsers for these languages]] with syntax -highlighting support for [[https://emacs-tree-sitter.github.io/syntax-highlighting/][these languages]]. +highlighting support for [[https://emacs-tree-sitter.github.io/syntax-highlighting/][these languages]] as well as ~typescript-tsx-mode~ ** Text Objects Not all language support all text objects (yet). [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects#built-in-textobjects][Here is a table of the text From a9bc2f08dcb50f09d42b3bf34f280a688e8e6a81 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 3 Feb 2022 01:25:53 +0000 Subject: [PATCH 49/80] bump: :tools tree-sitter emacs-tree-sitter/elisp-tree-sitter@48b06796a3b2 -> emacs-tree-sitter/elisp-tree-sitter@771239bacecf emacs-tree-sitter/tree-sitter-langs@3c0c82f9fb0a -> emacs-tree-sitter/tree-sitter-langs@a9b0390a751b this is to support both the new M1 macs and adding the haskell grammer --- modules/tools/tree-sitter/packages.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 8b9768e59..2fe721a37 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,10 +2,10 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - :pin "48b06796a3b2e76ce004972d929de38146eafaa0") + :pin "771239bacecf6c3ba9ee8b9eecec2b9fdd8e2256") (package! tree-sitter-langs - :pin "3c0c82f9fb0a796f5ebd7e1e4c89f13d5ab6ef58") + :pin "a9b0390a751be0a631cf8a356d61933795d9fcbc") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter From 795a17e664d5434b85579e66f1f6289b453d1002 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 15 Feb 2022 19:52:00 +0000 Subject: [PATCH 50/80] feat!(tree-sitter): rebind text objs to other keys BREAKING CHANGE: rebind the text objects parameter and conditional to 'A' and 'v' respectively, this is to make the defaults a little more intuitive and not clobber existing text objects that are useful to people --- modules/tools/tree-sitter/config.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 8d9df2fbb..331334b1d 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -37,19 +37,19 @@ :config (map! (:map +tree-sitter-inner-text-objects-map - "a" (evil-textobj-tree-sitter-get-textobj "parameter.inner") + "A" (evil-textobj-tree-sitter-get-textobj ("parameter.inner" "call.inner")) "f" (evil-textobj-tree-sitter-get-textobj "function.inner") "F" (evil-textobj-tree-sitter-get-textobj "call.inner") "C" (evil-textobj-tree-sitter-get-textobj "class.inner") - "i" (evil-textobj-tree-sitter-get-textobj "conditional.inner") + "v" (evil-textobj-tree-sitter-get-textobj "conditional.inner") "l" (evil-textobj-tree-sitter-get-textobj "loop.inner")) (:map +tree-sitter-outer-text-objects-map - "a" (evil-textobj-tree-sitter-get-textobj "parameter.outer") + "A" (evil-textobj-tree-sitter-get-textobj ("parameter.outer" "call.outer")) "f" (evil-textobj-tree-sitter-get-textobj "function.outer") "F" (evil-textobj-tree-sitter-get-textobj "call.outer") "C" (evil-textobj-tree-sitter-get-textobj "class.outer") "c" (evil-textobj-tree-sitter-get-textobj "comment.outer") - "i" (evil-textobj-tree-sitter-get-textobj "conditional.outer") + "v" (evil-textobj-tree-sitter-get-textobj "conditional.outer") "l" (evil-textobj-tree-sitter-get-textobj "loop.outer")) (:map +tree-sitter-goto-previous-map From 3ccfc3d847589a049ff7f26418e30c9d5daafd32 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 15 Feb 2022 19:52:39 +0000 Subject: [PATCH 51/80] docs(tree-sitter): remove m1 warning also remove unneeded apostroph --- modules/tools/tree-sitter/README.org | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index d7581d5a8..f24a89639 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -36,8 +36,6 @@ It includes: + Structural text objects to manipulate functions statements and other code structures like any other text object -*Currently this module does not support M1 macbooks due to grammars being built for x86* - ** Maintainers - @jeetelongname @@ -50,10 +48,7 @@ This module provides no flags. + [[https://github.com/meain/evil-textobj-tree-sitter][evil-textobj-tree-sitter]]* (=:editor evil +everywhere=) * Prerequisites -This module has no prerequisites. but if you are using an M1 mac (or a system -that's is not using an X86 instruction set) then you will not be able to use this -module for the moment, functions are being put in place for this use case but -they are still being worked on. +This module has no prerequisites. * Features ** Language support @@ -63,7 +58,7 @@ highlighting support for [[https://emacs-tree-sitter.github.io/syntax-highlighti ** Text Objects Not all language support all text objects (yet). [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects#built-in-textobjects][Here is a table of the text objects languages support]] -Note: only languages with parser's in emacs have text object support currently. +Note: only languages with parsers in emacs have text object support currently. Currently text objects are bound to: | key | text object | |-----+---------------------| From 93b6f8adfb8396f3d800930e73732773b391b812 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 15 Feb 2022 19:53:18 +0000 Subject: [PATCH 52/80] docs(tree-sitter): update text obj table --- modules/tools/tree-sitter/README.org | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index f24a89639..369cf7522 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -62,12 +62,12 @@ Note: only languages with parsers in emacs have text object support currently. Currently text objects are bound to: | key | text object | |-----+---------------------| -| =a= | parameter list | +| =A= | parameter list | | =f= | function definition | | =F= | function call | | =C= | class | | =c= | comment | -| =i= | conditional | +| =v= | conditional | | =l= | loop | They are used in a container context (not =vf= but =vaf= or =vif=) From 955e2d461bddd780b35be2afdcda23836587de78 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 15 Feb 2022 19:53:40 +0000 Subject: [PATCH 53/80] nit(javascript): add hook to end of rjsx-mode --- modules/lang/javascript/config.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index ab221d5cd..cfbb25db1 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -330,6 +330,6 @@ to tide." js3-mode-hook typescript-mode-hook typescript-tsx-mode-hook - rjsx-mode) + rjsx-mode-hook) #'turn-on-tree-sitter-mode #'+tree-sitter-keys-mode)) From 9c00df72d642c25e2c7ff979d682f98e4ff8a29e Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 22 Feb 2022 17:53:20 +0000 Subject: [PATCH 54/80] fix(tree-sitter): feature gate +tree-sitter-keys-mode As this has a dependency on evil it makes sense to only load it when evil is used, the entire mode is only needed for evil textobj tree-sitter anyway --- modules/tools/tree-sitter/config.el | 31 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 331334b1d..8afe41585 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -14,22 +14,23 @@ (defvar +tree-sitter-goto-previous-map (make-sparse-keymap)) (defvar +tree-sitter-goto-next-map (make-sparse-keymap)) -(defvar +tree-sitter-keys-mode-map - (let ((keymap (make-sparse-keymap))) - ;; ts text objects - (evil-define-key '(visual operator) '+tree-sitter-keys-mode - "i" +tree-sitter-inner-text-objects-map - "a" +tree-sitter-outer-text-objects-map) - ;; ts goto nodes - (evil-define-key 'normal '+tree-sitter-keys-mode - "[g" +tree-sitter-goto-previous-map - "]g" +tree-sitter-goto-next-map) - keymap) - "Basic keymap for tree sitter text objects") +(when (featurep! :editor evil +everywhere) + (defvar +tree-sitter-keys-mode-map + (let ((keymap (make-sparse-keymap))) + ;; ts text objects + (evil-define-key '(visual operator) '+tree-sitter-keys-mode + "i" +tree-sitter-inner-text-objects-map + "a" +tree-sitter-outer-text-objects-map) + ;; ts goto nodes + (evil-define-key 'normal '+tree-sitter-keys-mode + "[g" +tree-sitter-goto-previous-map + "]g" +tree-sitter-goto-next-map) + keymap) + "Basic keymap for tree sitter text objects") -(define-minor-mode +tree-sitter-keys-mode - "A minor mode with tree sitter keybinds." - :keymap +tree-sitter-keys-mode-map) + (define-minor-mode +tree-sitter-keys-mode + "A minor mode with tree sitter keybinds." + :keymap +tree-sitter-keys-mode-map)) (use-package! evil-textobj-tree-sitter :when (featurep! :editor evil +everywhere) From 372565af0df8a317a562c9e64ca6f357e089d93f Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 25 Feb 2022 03:28:55 +0000 Subject: [PATCH 55/80] bump: :tools tree-sitter emacs-tree-sitter/elisp-tree-sitter@771239bacecf -> emacs-tree-sitter/elisp-tree-sitter@5e1091658d62 emacs-tree-sitter/tree-sitter-langs@a9b0390a751b -> emacs-tree-sitter/tree-sitter-langs@599570cd2a6d meain/evil-textobj-tree-sitter@607b71f38a1b -> meain/evil-textobj-tree-sitter@ff733576d1dc --- modules/tools/tree-sitter/packages.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 2fe721a37..355def200 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,11 +2,11 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - :pin "771239bacecf6c3ba9ee8b9eecec2b9fdd8e2256") + :pin "5e1091658d625984c6c5756e3550c4d2eebd73a1") (package! tree-sitter-langs - :pin "a9b0390a751be0a631cf8a356d61933795d9fcbc") + :pin "599570cd2a6d1b43a109634896b5c52121e155e3") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "607b71f38a1b2d7fa464814d968427435d31dd7c")) + :pin "ff733576d1dc5395c08d8f0e396b7a7073e39674")) From cc238dd666eda1c201bb43a86ddcdc82b679660a Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 25 Feb 2022 03:31:30 +0000 Subject: [PATCH 56/80] bump: :editor fold ts-fold jcs090218/ts-fold@d6fbca3748a1 -> jcs090218/ts-fold@01d6485398a5 --- modules/editor/fold/packages.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/editor/fold/packages.el b/modules/editor/fold/packages.el index 022df265e..2867a322f 100644 --- a/modules/editor/fold/packages.el +++ b/modules/editor/fold/packages.el @@ -7,5 +7,5 @@ (when (featurep! :editor evil) (package! evil-vimish-fold :pin "b6e0e6b91b8cd047e80debef1a536d9d49eef31a")) (when (featurep! :tools tree-sitter) - (package! ts-fold :pin "d6fbca3748a113c1ededbf20d84712048ade74da" + (package! ts-fold :pin "01d6485398a553a4fc4bbb3910edeb881c657f1f" :recipe (:host github :repo "jcs090218/ts-fold"))) From 12bf2e0b2fbc1d6e3a768953107efa8d7714fb12 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 20 Mar 2022 22:55:22 +0000 Subject: [PATCH 57/80] bump: :tools tree-sitter emacs-tree-sitter/tree-sitter-langs@599570cd2a6d -> emacs-tree-sitter/tree-sitter-langs@f4effc81fcac meain/evil-textobj-tree-sitter@ff733576d1dc -> meain/evil-textobj-tree-sitter@f3b3e9554e5e --- modules/tools/tree-sitter/packages.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 355def200..b0c8ef024 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -5,8 +5,8 @@ :pin "5e1091658d625984c6c5756e3550c4d2eebd73a1") (package! tree-sitter-langs - :pin "599570cd2a6d1b43a109634896b5c52121e155e3") + :pin "f4effc81fcac3592bce7072619a0e17043412cf4") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "ff733576d1dc5395c08d8f0e396b7a7073e39674")) + :pin "f3b3e9554e5ecae55200454804e183e268b4a6fc")) From 869aefb5234a6e611f978b86c528c6c2651a8143 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:10:39 +0100 Subject: [PATCH 58/80] docs(tree-sitter): remove no textobj found entry This is no longer needed as this has been resolved upstream --- modules/tools/tree-sitter/README.org | 9 --------- 1 file changed, 9 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 369cf7522..d16856a7e 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -19,7 +19,6 @@ - [[#disabling-highlighting-for-certain-modes][Disabling highlighting for certain modes]] - [[#troubleshooting][Troubleshooting]] - [[#error-bad-bounding-indices-0-1][=(error "Bad bounding indices: 0, 1")=]] - - [[#no-textobj-text-object-found][=No 'TEXTOBJ' text object found=]] * Description This module adds [[https://tree-sitter.github.io/tree-sitter/][tree-sitter]] support to doom: @@ -116,11 +115,3 @@ If you only want it for certain modes then This means that the text object does not have the underlying query needed, this can be fixed by either adding in a custom query (which would override the current key bound.) or [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects/][contributing upstream!]] - -** =No 'TEXTOBJ' text object found= -the main reason for this is the underlying text object using the =#make-range!= -predicate, which at the moment [[https://github.com/emacs-tree-sitter/elisp-tree-sitter/issues/180][is not implemented in emacs tree sitter]] (see this -issue on [[https://github.com/meain/evil-textobj-tree-sitter/issues/33][evil-textobj-tree-sitter]]). - -the only way around it is to rewrite the query to not use =#make-range!= or to -implement that predicate the elisp tree sitter core From c6a006dd68635d9d2e4919628d689094548427a5 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:16:11 +0100 Subject: [PATCH 59/80] docs(tree-sitter): replace {add,remove}-hook! these are redundant in these contexts --- modules/tools/tree-sitter/README.org | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index d16856a7e..2c223a7e0 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -82,7 +82,7 @@ If you wish to disable tree sitter text objects then you can just remove =+tree-sitter-keys-mode= from the language mode hook, for example if we did not want it for ruby we would use this snippet #+begin_src emacs-lisp -(remove-hook! 'ruby-mode-hook #'+tree-sitter-keys-mode) +(remove-hook 'ruby-mode-hook #'+tree-sitter-keys-mode) #+end_src ** Adding your own text objects @@ -105,9 +105,9 @@ If you want to disable highlighting by default you can add a If you only want it for certain modes then #+begin_src emacs-lisp -(remove-hook! 'tree-sitter-after-on-hook #'tree-sitter-hl-mode) +(remove-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode) -(add-hook! 'MAJOR-MODE-HOOK #'tree-sitter-hl-mode) +(add-hook 'MAJOR-MODE-HOOK #'tree-sitter-hl-mode) #+end_src * Troubleshooting From 56d0f02f31f4e64b83b29ae5fbd8ce73ae85d9e8 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:17:55 +0100 Subject: [PATCH 60/80] feat(tree-sitter): add tree-sitter! autodef --- modules/tools/tree-sitter/autoload.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/tools/tree-sitter/autoload.el b/modules/tools/tree-sitter/autoload.el index 3c7c67d14..bb9194f4a 100644 --- a/modules/tools/tree-sitter/autoload.el +++ b/modules/tools/tree-sitter/autoload.el @@ -1,5 +1,10 @@ ;;; tools/tree-sitter/autoload.el -*- lexical-binding: t; -*- +;;;###autodef +(defun tree-sitter! () + (turn-on-tree-sitter-mode) + (+tree-sitter-keys-mode)) + ;;;###autoload (defun +tree-sitter-goto-textobj (group &optional previous end query) "Thin wrapper that returns the symbol of a named function, used in keybindings." From 561eb533a8073fcae5bb79ad1d0b4e64286d9e79 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:22:35 +0100 Subject: [PATCH 61/80] nit(tree-sitter): remove defer, its redundant --- modules/tools/tree-sitter/config.el | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 8afe41585..f49b78cd1 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -1,7 +1,6 @@ ;;; tools/tree-sitter/config.el -*- lexical-binding: t; -*- (use-package! tree-sitter - :defer t ;; loading is handled by individual modes :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config ;; This makes every node a link to a section of code From 74fc2a87c9369019398db7ad9a1171fe82c073a7 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:23:28 +0100 Subject: [PATCH 62/80] tweak(tree-sitter): gate textobj maps --- modules/tools/tree-sitter/config.el | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index f49b78cd1..2648b4c51 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -8,12 +8,13 @@ ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t)) -(defvar +tree-sitter-inner-text-objects-map (make-sparse-keymap)) -(defvar +tree-sitter-outer-text-objects-map (make-sparse-keymap)) -(defvar +tree-sitter-goto-previous-map (make-sparse-keymap)) -(defvar +tree-sitter-goto-next-map (make-sparse-keymap)) (when (featurep! :editor evil +everywhere) + (defvar +tree-sitter-inner-text-objects-map (make-sparse-keymap)) + (defvar +tree-sitter-outer-text-objects-map (make-sparse-keymap)) + (defvar +tree-sitter-goto-previous-map (make-sparse-keymap)) + (defvar +tree-sitter-goto-next-map (make-sparse-keymap)) + (defvar +tree-sitter-keys-mode-map (let ((keymap (make-sparse-keymap))) ;; ts text objects From cd6cb8c49982b3b5b72418eeaada43868cb7868b Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:28:15 +0100 Subject: [PATCH 63/80] fix(tree-sitter): check tree-sitter-mode is bound and-true-p --- modules/editor/fold/autoload/fold.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index 5386d376b..e88be083a 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -34,7 +34,7 @@ ;; NOTE: does this need more? (defun +fold--ts-fold-p () - (and tree-sitter-mode + (and (bound-and-true-p tree-sitter-mode) (featurep 'ts-fold))) (defun +fold--invisible-points (count) From 4334eb285fb48a32928b68b571432a9890a795ac Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:40:38 +0100 Subject: [PATCH 64/80] nit(fold): fix non idiomatic code - remove final t in cond - replace cond with if - replace seq-filter with cl-remove-if-not --- modules/editor/fold/autoload/fold.el | 41 ++++++++++++++-------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index e88be083a..2b757cc87 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -113,16 +113,16 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (ts-fold-open-all)) ((featurep 'vimish-fold) (vimish-fold-unfold-all)) - (t (save-excursion - (+fold--ensure-hideshow-mode) - (if (integerp level) - (progn - (outline-hide-sublevels (max 1 (1- level))) - (hs-life-goes-on - (hs-hide-level-recursive (1- level) (point-min) (point-max)))) - (hs-show-all) - (when (fboundp 'outline-show-all) - (outline-show-all))))))) + ((save-excursion + (+fold--ensure-hideshow-mode) + (if (integerp level) + (progn + (outline-hide-sublevels (max 1 (1- level))) + (hs-life-goes-on + (hs-hide-level-recursive (1- level) (point-min) (point-max)))) + (hs-show-all) + (when (fboundp 'outline-show-all) + (outline-show-all))))))) ;;;###autoload (defun +fold/close-all (&optional level) @@ -130,15 +130,16 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg)))) (save-excursion - (cond ((+fold--ts-fold-p) - (ts-fold-close-all)) - (t (when (featurep 'vimish-fold) - (vimish-fold-refold-all)) - (+fold--ensure-hideshow-mode) - (hs-life-goes-on - (if (integerp level) - (hs-hide-level-recursive (1- level) (point-min) (point-max)) - (hs-hide-all))))))) + (if (+fold--ts-fold-p) + (ts-fold-close-all) + (progn + (when (featurep 'vimish-fold) + (vimish-fold-refold-all)) + (+fold--ensure-hideshow-mode) + (hs-life-goes-on + (if (integerp level) + (hs-hide-level-recursive (1- level) (point-min) (point-max)) + (hs-hide-all))))))) ;;;###autoload (defun +fold/next (count) @@ -164,7 +165,7 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (comp-fun (if (> count 0) ;; also depending on direction we need to change how we sort the list #'< #'>)) - (ovs (seq-filter + (ovs (cl-remove-if-not (lambda (ov) (eq (overlay-get ov 'creator) 'ts-fold)) ;; `overlays-in' does not provide a list that is sorted From 7a7565cedf39cbe1889eacdb1559d7193c1092f5 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sat, 2 Apr 2022 02:53:00 +0100 Subject: [PATCH 65/80] nit(sh): revert formatting snuck in when running the formatter --- modules/lang/sh/config.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/lang/sh/config.el b/modules/lang/sh/config.el index b8593401b..0ad4919a7 100755 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -24,18 +24,18 @@ (set-repl-handler! 'sh-mode #'+sh/open-repl) (set-lookup-handlers! 'sh-mode :documentation #'+sh-lookup-documentation-handler) (set-ligatures! 'sh-mode - ;; Functional - :def "function" - ;; Types - :true "true" :false "false" - ;; Flow - :not "!" - :and "&&" :or "||" - :in "in" - :for "for" - :return "return" - ;; Other - :dot "." :dot "source") + ;; Functional + :def "function" + ;; Types + :true "true" :false "false" + ;; Flow + :not "!" + :and "&&" :or "||" + :in "in" + :for "for" + :return "return" + ;; Other + :dot "." :dot "source") (when (featurep! +lsp) (add-hook 'sh-mode-local-vars-hook #'lsp! 'append)) From 7f814e5d99292598eb822397869f93de3b28ddda Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 3 Apr 2022 18:00:54 +0100 Subject: [PATCH 66/80] refactor(:lang): redo tree-sitter hooks - bind to major-mode-local-vars-hook instead of major mode hook - bind the autodef tree-sitter! instead of the functions. --- modules/lang/agda/config.el | 7 +++---- modules/lang/cc/config.el | 7 +++---- modules/lang/csharp/config.el | 4 +--- modules/lang/elm/config.el | 4 +--- modules/lang/go/config.el | 4 +--- modules/lang/java/config.el | 4 +--- modules/lang/javascript/config.el | 15 ++++++--------- modules/lang/json/config.el | 7 +++---- modules/lang/julia/config.el | 4 +--- modules/lang/ocaml/config.el | 4 +--- modules/lang/php/config.el | 4 +--- modules/lang/python/config.el | 4 +--- modules/lang/ruby/config.el | 4 +--- modules/lang/rust/config.el | 4 +--- modules/lang/scala/config.el | 4 +--- modules/lang/sh/config.el | 4 +--- modules/lang/swift/config.el | 4 +--- modules/lang/web/config.el | 9 ++++----- 18 files changed, 32 insertions(+), 65 deletions(-) diff --git a/modules/lang/agda/config.el b/modules/lang/agda/config.el index 5c543fb0b..2920abd54 100644 --- a/modules/lang/agda/config.el +++ b/modules/lang/agda/config.el @@ -41,7 +41,6 @@ ;; Tree Sitter (eval-when! (featurep! +tree-sitter) - (add-hook! '(agda-mode - agda2-mode) - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! '(agda-mode-local-vars-hook + agda2-mode-local-vars-hook) + #'tree-sitter!)) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index 8a4ee6ff8..40fb8069e 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -307,7 +307,6 @@ If rtags or rdm aren't available, fail silently instead of throwing a breaking e ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! '(c-mode-hook - c++-mode-hook) - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! '(c-mode-local-vars-hook + c++-mode-local-vars-hook) + #'tree-sitter!)) diff --git a/modules/lang/csharp/config.el b/modules/lang/csharp/config.el index 83ffd232d..cdd4bb6fd 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -75,6 +75,4 @@ or terminating simple string." ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'csharp-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'csharp-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/elm/config.el b/modules/lang/elm/config.el index 803a553dd..df263a0d7 100644 --- a/modules/lang/elm/config.el +++ b/modules/lang/elm/config.el @@ -24,6 +24,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'elm-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'elm-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/go/config.el b/modules/lang/go/config.el index 33c025140..7231839b0 100644 --- a/modules/lang/go/config.el +++ b/modules/lang/go/config.el @@ -79,6 +79,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'go-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'go-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/java/config.el b/modules/lang/java/config.el index 17e6f26f6..0b06a1e61 100644 --- a/modules/lang/java/config.el +++ b/modules/lang/java/config.el @@ -52,6 +52,4 @@ If the depth is 2, the first two directories are removed: net.lissner.game.") ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'java-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'java-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index cfbb25db1..280851cc5 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -324,12 +324,9 @@ to tide." ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! '(javascript-mode-hook - js-mode-hook - js2-mode-hook - js3-mode-hook - typescript-mode-hook - typescript-tsx-mode-hook - rjsx-mode-hook) - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! '(js-mode-local-vars-hook + js2-mode-local-vars-hook + typescript-mode-local-vars-hook + typescript-tsx-mode-local-vars-hook + rjsx-mode-local-vars-hook) + #'tree-sitter!)) diff --git a/modules/lang/json/config.el b/modules/lang/json/config.el index fe5faf134..a088c54d2 100644 --- a/modules/lang/json/config.el +++ b/modules/lang/json/config.el @@ -31,7 +31,6 @@ "s" #'counsel-jq)) (eval-when! (featurep! +tree-sitter) - (add-hook! '(json-mode - jsonc-mode) - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! '(json-mode-local-vars-hook + jsonc-mode-local-vars-hook) + #'tree-sitter!)) diff --git a/modules/lang/julia/config.el b/modules/lang/julia/config.el index cf765080e..bd4837c46 100644 --- a/modules/lang/julia/config.el +++ b/modules/lang/julia/config.el @@ -102,6 +102,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'julia-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'julia-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/ocaml/config.el b/modules/lang/ocaml/config.el index 3d33b8675..001428d3f 100644 --- a/modules/lang/ocaml/config.el +++ b/modules/lang/ocaml/config.el @@ -121,6 +121,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'tuareg-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'tuareg-mode-local-vars-hook #'tree-sitter)) diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el index 5278d5e07..c6f435b24 100644 --- a/modules/lang/php/config.el +++ b/modules/lang/php/config.el @@ -179,6 +179,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! #'php-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'php-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index ad228a5ed..4f2b65f31 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -348,6 +348,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'python-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'python-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index 57a31172e..3ffec7bc0 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -198,6 +198,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'ruby-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'ruby-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index 320f526b8..3fcab041a 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -84,6 +84,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'rustic-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'rustic-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/scala/config.el b/modules/lang/scala/config.el index 234e7e99d..0e427e909 100644 --- a/modules/lang/scala/config.el +++ b/modules/lang/scala/config.el @@ -53,6 +53,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'scala-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'scala-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/sh/config.el b/modules/lang/sh/config.el index 0ad4919a7..684781bea 100755 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -96,6 +96,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'sh-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'sh-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/swift/config.el b/modules/lang/swift/config.el index fbfad58b6..0de022376 100644 --- a/modules/lang/swift/config.el +++ b/modules/lang/swift/config.el @@ -34,6 +34,4 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! 'swift-mode-hook - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! 'swift-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/web/config.el b/modules/lang/web/config.el index 194a03e3e..34ad2d069 100644 --- a/modules/lang/web/config.el +++ b/modules/lang/web/config.el @@ -58,8 +58,7 @@ ;; Tree sitter (eval-when! (featurep! +tree-sitter) - (add-hook! '(html-mode-hook - mhtml-mode-hook - css-mode-hook) - #'turn-on-tree-sitter-mode - #'+tree-sitter-keys-mode)) + (add-hook! '(html-mode-local-vars-hook + mhtml-mode-local-vars-hook + css-mode-local-vars-hook) + #'tree-sitter!)) From 45ed981b41544de9ab02f33f17a3b67a034d95aa Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 3 Apr 2022 18:21:34 +0100 Subject: [PATCH 67/80] refactor(tree-sitter): put keys on ts-mode-map - move map definition and binding into evil-textobj-tree-sitter :config body - replace +tree-sitter-keys-mode with tree-sitter-mode as bind site - remove +tree-sitter-keys-mode from tree-sitter! autodef --- modules/tools/tree-sitter/autoload.el | 4 ++-- modules/tools/tree-sitter/config.el | 32 +++++++++------------------ 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/modules/tools/tree-sitter/autoload.el b/modules/tools/tree-sitter/autoload.el index bb9194f4a..d1682b6a6 100644 --- a/modules/tools/tree-sitter/autoload.el +++ b/modules/tools/tree-sitter/autoload.el @@ -2,8 +2,8 @@ ;;;###autodef (defun tree-sitter! () - (turn-on-tree-sitter-mode) - (+tree-sitter-keys-mode)) + (interactive) + (turn-on-tree-sitter-mode)) ;;;###autoload (defun +tree-sitter-goto-textobj (group &optional previous end query) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 2648b4c51..6b588fee7 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -8,34 +8,22 @@ ;; and this highlights the entire sub tree in your code tree-sitter-debug-highlight-jump-region t)) +(use-package! evil-textobj-tree-sitter + :when (featurep! :editor evil +everywhere) + :after tree-sitter + :config -(when (featurep! :editor evil +everywhere) (defvar +tree-sitter-inner-text-objects-map (make-sparse-keymap)) (defvar +tree-sitter-outer-text-objects-map (make-sparse-keymap)) (defvar +tree-sitter-goto-previous-map (make-sparse-keymap)) (defvar +tree-sitter-goto-next-map (make-sparse-keymap)) - (defvar +tree-sitter-keys-mode-map - (let ((keymap (make-sparse-keymap))) - ;; ts text objects - (evil-define-key '(visual operator) '+tree-sitter-keys-mode - "i" +tree-sitter-inner-text-objects-map - "a" +tree-sitter-outer-text-objects-map) - ;; ts goto nodes - (evil-define-key 'normal '+tree-sitter-keys-mode - "[g" +tree-sitter-goto-previous-map - "]g" +tree-sitter-goto-next-map) - keymap) - "Basic keymap for tree sitter text objects") - - (define-minor-mode +tree-sitter-keys-mode - "A minor mode with tree sitter keybinds." - :keymap +tree-sitter-keys-mode-map)) - -(use-package! evil-textobj-tree-sitter - :when (featurep! :editor evil +everywhere) - :after tree-sitter - :config + (evil-define-key '(visual operator) 'tree-sitter-mode + "i" +tree-sitter-inner-text-objects-map + "a" +tree-sitter-outer-text-objects-map) + (evil-define-key 'normal 'tree-sitter-mode + "[g" +tree-sitter-goto-previous-map + "]g" +tree-sitter-goto-next-map) (map! (:map +tree-sitter-inner-text-objects-map "A" (evil-textobj-tree-sitter-get-textobj ("parameter.inner" "call.inner")) From 0074dc415b5771c2df770ca3a226c482af30054e Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 3 Apr 2022 18:35:09 +0100 Subject: [PATCH 68/80] nit(javascript): use issue shorthand --- modules/lang/javascript/config.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 280851cc5..64eabf742 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -134,8 +134,7 @@ (pushnew! evil-textobj-tree-sitter-major-mode-language-alist '(typescript-tsx-mode . "tsx")) ;; HACK: the tsx grammer doesn't work with the hightlighting provided by - ;; font-lock-keywords. - ;; https://github.com/emacs-tree-sitter/tree-sitter-langs/issues/23 + ;; font-lock-keywords. See emacs-tree-sitter/tree-sitter-langs#23 (setq-hook! 'typescript-tsx-mode-hook tree-sitter-hl-use-font-lock-keywords nil)))) From def8c05371f4181b3382f3f191eb97d52b3ada93 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 10 Apr 2022 16:52:06 +0100 Subject: [PATCH 69/80] bump: :tools tree-sitter emacs-tree-sitter/tree-sitter-langs@f4effc81fcac -> emacs-tree-sitter/tree-sitter-langs@0dd5e56e2f56 meain/evil-textobj-tree-sitter@f3b3e9554e5e -> meain/evil-textobj-tree-sitter@e5fda8eca926 --- modules/tools/tree-sitter/packages.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index b0c8ef024..c53d629c1 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -5,8 +5,8 @@ :pin "5e1091658d625984c6c5756e3550c4d2eebd73a1") (package! tree-sitter-langs - :pin "f4effc81fcac3592bce7072619a0e17043412cf4") + :pin "0dd5e56e2f5646aa51ed0fc9eb869a8f7090228a") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "f3b3e9554e5ecae55200454804e183e268b4a6fc")) + :pin "e5fda8eca926e65f7aadc9ed27d768eb6d1d415f")) From 65207ab3dc2875c0c7920cf2c3e46c59bf99cdf4 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 10 Apr 2022 18:13:20 +0100 Subject: [PATCH 70/80] docs(tree-sitter): add rebinding keys section --- modules/tools/tree-sitter/README.org | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 2c223a7e0..653d843fa 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -15,6 +15,7 @@ - [[#goto-certain-nodes][Goto certain nodes]] - [[#configuration][Configuration]] - [[#disable-text-objects-for-certain-modes][Disable text objects for certain modes]] + - [[#rebinding-text-objects][Rebinding text objects]] - [[#adding-your-own-text-objects][Adding your own text objects]] - [[#disabling-highlighting-for-certain-modes][Disabling highlighting for certain modes]] - [[#troubleshooting][Troubleshooting]] @@ -85,6 +86,23 @@ want it for ruby we would use this snippet (remove-hook 'ruby-mode-hook #'+tree-sitter-keys-mode) #+end_src +** Rebinding text objects +Rebinding keys is the same as any other key but do notes they need to be bound +to the keymaps ~+tree-sitter-inner-text-object-map~ or +~+tree-sitter-outer-text-object-map~ +#+begin_src emacs-lisp +(map! (:map +tree-sitter-outer-text-objects-map + "f" nil + "f" (evil-textobj-tree-sitter-get-textobj "call.inner") + "F" nil + "F" (evil-textobj-tree-sitter-get-textobj "function.inner")) + (:map +tree-sitter-inner-text-objects-map + "f" nil + "f" (evil-textobj-tree-sitter-get-textobj "call.inner") + "F" nil + "F" (evil-textobj-tree-sitter-get-textobj "function.inner"))) +#+end_src + ** Adding your own text objects If you wish to [[https://github.com/meain/evil-textobj-tree-sitter#custom-textobjects][add your own custom text objects]] then you need to bind them and add them to the ~+tree-sitter-{inner, outer}-text-objects-map~ From 152f0e0f91e92173cf0b8d85ee0ebc77e3130735 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 10 Apr 2022 23:06:26 +0100 Subject: [PATCH 71/80] feat(elixir): add tree-sitter support --- modules/lang/elixir/config.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/lang/elixir/config.el b/modules/lang/elixir/config.el index df6cbb60b..de356246b 100644 --- a/modules/lang/elixir/config.el +++ b/modules/lang/elixir/config.el @@ -99,3 +99,6 @@ "T" #'exunit-toggle-file-and-test "t" #'exunit-toggle-file-and-test-other-window "s" #'exunit-verify-single)) + +(eval-when! (featurep! +tree-sitter) + (add-hook! 'elixir-mode-local-vars-hook #'tree-sitter!)) From 984564ea6c99f953e8b025bd9afa942e74e4b217 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 8 May 2022 02:30:44 +0100 Subject: [PATCH 72/80] bump: :tools tree-sitter emacs-tree-sitter/elisp-tree-sitter@5e1091658d62 -> emacs-tree-sitter/elisp-tree-sitter@3cfab8a0e945 meain/evil-textobj-tree-sitter@e5fda8eca926 -> meain/evil-textobj-tree-sitter@bfdef5a292f7 --- modules/tools/tree-sitter/packages.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index c53d629c1..711dd1a2b 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -2,11 +2,11 @@ ;;; tools/tree-sitter/packages.el (package! tree-sitter - :pin "5e1091658d625984c6c5756e3550c4d2eebd73a1") + :pin "3cfab8a0e945db9b3df84437f27945746a43cc71") (package! tree-sitter-langs :pin "0dd5e56e2f5646aa51ed0fc9eb869a8f7090228a") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "e5fda8eca926e65f7aadc9ed27d768eb6d1d415f")) + :pin "bfdef5a292f7dde36967bb86eb2f7009b03631b1")) From 84d47016d0eb26f5eae37c1de13c16717dc0f090 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Sun, 22 May 2022 21:25:28 +0100 Subject: [PATCH 73/80] fix(tree-sitter): no longer eager load tree sitter --- modules/tools/tree-sitter/autoload.el | 7 +++++++ modules/tools/tree-sitter/config.el | 28 +++++++++++++-------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/modules/tools/tree-sitter/autoload.el b/modules/tools/tree-sitter/autoload.el index d1682b6a6..608ed77bf 100644 --- a/modules/tools/tree-sitter/autoload.el +++ b/modules/tools/tree-sitter/autoload.el @@ -5,6 +5,13 @@ (interactive) (turn-on-tree-sitter-mode)) +;; HACK: Remove and refactor when `use-package' eager macro expansion is solved or `use-package!' is removed +;;;###autoload +(defun +tree-sitter-get-textobj (group &optional query) + "A wrapper around `evil-textobj-tree-sitter-get-textobj' to +prevent eager expansion." + (eval `(evil-textobj-tree-sitter-get-textobj ,group ,query))) + ;;;###autoload (defun +tree-sitter-goto-textobj (group &optional previous end query) "Thin wrapper that returns the symbol of a named function, used in keybindings." diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index 6b588fee7..aab52e2cb 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -3,6 +3,7 @@ (use-package! tree-sitter :hook (tree-sitter-after-on . tree-sitter-hl-mode) :config + (require 'tree-sitter-langs) ;; This makes every node a link to a section of code (setq tree-sitter-debug-jump-buttons t ;; and this highlights the entire sub tree in your code @@ -12,7 +13,6 @@ :when (featurep! :editor evil +everywhere) :after tree-sitter :config - (defvar +tree-sitter-inner-text-objects-map (make-sparse-keymap)) (defvar +tree-sitter-outer-text-objects-map (make-sparse-keymap)) (defvar +tree-sitter-goto-previous-map (make-sparse-keymap)) @@ -26,20 +26,20 @@ "]g" +tree-sitter-goto-next-map) (map! (:map +tree-sitter-inner-text-objects-map - "A" (evil-textobj-tree-sitter-get-textobj ("parameter.inner" "call.inner")) - "f" (evil-textobj-tree-sitter-get-textobj "function.inner") - "F" (evil-textobj-tree-sitter-get-textobj "call.inner") - "C" (evil-textobj-tree-sitter-get-textobj "class.inner") - "v" (evil-textobj-tree-sitter-get-textobj "conditional.inner") - "l" (evil-textobj-tree-sitter-get-textobj "loop.inner")) + "A" (+tree-sitter-get-textobj '("parameter.inner" "call.inner")) + "f" (+tree-sitter-get-textobj "function.inner") + "F" (+tree-sitter-get-textobj "call.inner") + "C" (+tree-sitter-get-textobj "class.inner") + "v" (+tree-sitter-get-textobj "conditional.inner") + "l" (+tree-sitter-get-textobj "loop.inner")) (:map +tree-sitter-outer-text-objects-map - "A" (evil-textobj-tree-sitter-get-textobj ("parameter.outer" "call.outer")) - "f" (evil-textobj-tree-sitter-get-textobj "function.outer") - "F" (evil-textobj-tree-sitter-get-textobj "call.outer") - "C" (evil-textobj-tree-sitter-get-textobj "class.outer") - "c" (evil-textobj-tree-sitter-get-textobj "comment.outer") - "v" (evil-textobj-tree-sitter-get-textobj "conditional.outer") - "l" (evil-textobj-tree-sitter-get-textobj "loop.outer")) + "A" (+tree-sitter-get-textobj '("parameter.outer" "call.outer")) + "f" (+tree-sitter-get-textobj "function.outer") + "F" (+tree-sitter-get-textobj "call.outer") + "C" (+tree-sitter-get-textobj "class.outer") + "c" (+tree-sitter-get-textobj "comment.outer") + "v" (+tree-sitter-get-textobj "conditional.outer") + "l" (+tree-sitter-get-textobj "loop.outer")) (:map +tree-sitter-goto-previous-map "a" (+tree-sitter-goto-textobj "parameter.outer" t) From 33de147b8f29ee0626f6b4b85c8ca343ce537d2e Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Mon, 23 May 2022 20:01:59 +0100 Subject: [PATCH 74/80] bump: :tools tree-sitter emacs-tree-sitter/tree-sitter-langs@0dd5e56e2f56 -> emacs-tree-sitter/tree-sitter-langs@deb2d8674be8 meain/evil-textobj-tree-sitter@bfdef5a292f7 -> meain/evil-textobj-tree-sitter@0bf5bbbfecba --- modules/tools/tree-sitter/packages.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 711dd1a2b..f572ea6f9 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -5,8 +5,8 @@ :pin "3cfab8a0e945db9b3df84437f27945746a43cc71") (package! tree-sitter-langs - :pin "0dd5e56e2f5646aa51ed0fc9eb869a8f7090228a") + :pin "deb2d8674be8f777ace50e15c7c041aeddb1d0b2") (when (featurep! :editor evil +everywhere) (package! evil-textobj-tree-sitter - :pin "bfdef5a292f7dde36967bb86eb2f7009b03631b1")) + :pin "0bf5bbbfecba95d49d40441ea54c6130e52bbeb1")) From 6d10e205dd99a4ff898612038eb7e21202b50a15 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Mon, 23 May 2022 20:02:22 +0100 Subject: [PATCH 75/80] feat(tree-sitter): add support to zig and nix --- modules/lang/nix/config.el | 4 ++++ modules/lang/zig/config.el | 3 +++ 2 files changed, 7 insertions(+) diff --git a/modules/lang/nix/config.el b/modules/lang/nix/config.el index b65f732ad..bda5cb76a 100644 --- a/modules/lang/nix/config.el +++ b/modules/lang/nix/config.el @@ -47,3 +47,7 @@ (use-package! nix-repl :commands nix-repl-show) + +;; Tree sitter +(eval-when! (featurep! +tree-sitter) + (add-hook! 'nix-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/zig/config.el b/modules/lang/zig/config.el index 09a8e5d7e..828a48129 100644 --- a/modules/lang/zig/config.el +++ b/modules/lang/zig/config.el @@ -30,3 +30,6 @@ "f" #'zig-format-buffer "r" #'zig-run "t" #'zig-test-buffer)) + +(eval-when! (featurep! +tree-sitter) + (add-hook! 'zig-mode-local-vars-hook #'tree-sitter!)) From de052a7a927ae6e82ed59be81f76a26f8a00599f Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Tue, 24 May 2022 15:38:31 +0100 Subject: [PATCH 76/80] docs(tree-sitter): add goto binding table --- modules/tools/tree-sitter/README.org | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 653d843fa..808cd442f 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -76,6 +76,16 @@ They are used in a container context (not =vf= but =vaf= or =vif=) you can also jump to the next / previous node type in a buffer by using =[g= or =]g= respectfully, the following key will correspond to the text object you want to jump to +Currently keys are bound to: +| key | text object | +|-----+----------------| +| =a= | parameter list | +| =f= | function | +| =F= | function call | +| =c= | comment | +| =C= | class | +| =i= | conditional | +| =l= | loop | * Configuration ** Disable text objects for certain modes From e1056f0053b5c7e8e3dbda2776e6519db9ebf83c Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 26 May 2022 23:44:39 +0100 Subject: [PATCH 77/80] tweak(tree-sitter): rebind conditional nav key Move the conditional bindings from `i` to `v` this is to reflect the text object, the thinking being if users have to learn one anti mnemonic then it should reflect all cases to make it easier to swallow. --- modules/tools/tree-sitter/config.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tools/tree-sitter/config.el b/modules/tools/tree-sitter/config.el index aab52e2cb..a0ff3a3c0 100644 --- a/modules/tools/tree-sitter/config.el +++ b/modules/tools/tree-sitter/config.el @@ -47,7 +47,7 @@ "F" (+tree-sitter-goto-textobj "call.outer" t) "C" (+tree-sitter-goto-textobj "class.outer" t) "c" (+tree-sitter-goto-textobj "comment.outer" t) - "i" (+tree-sitter-goto-textobj "conditional.outer" t) + "v" (+tree-sitter-goto-textobj "conditional.outer" t) "l" (+tree-sitter-goto-textobj "loop.outer" t)) (:map +tree-sitter-goto-next-map "a" (+tree-sitter-goto-textobj "parameter.outer") @@ -55,7 +55,7 @@ "F" (+tree-sitter-goto-textobj "call.outer") "C" (+tree-sitter-goto-textobj "class.outer") "c" (+tree-sitter-goto-textobj "comment.outer") - "i" (+tree-sitter-goto-textobj "conditional.outer") + "v" (+tree-sitter-goto-textobj "conditional.outer") "l" (+tree-sitter-goto-textobj "loop.outer"))) From 349247fb3e55875028d367695139b195b3c56d07 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Thu, 26 May 2022 23:52:13 +0100 Subject: [PATCH 78/80] docs(tree-sitter): update goto bind table --- modules/tools/tree-sitter/README.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 808cd442f..3f9a21e16 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -84,7 +84,7 @@ Currently keys are bound to: | =F= | function call | | =c= | comment | | =C= | class | -| =i= | conditional | +| =v= | conditional | | =l= | loop | * Configuration From 7105292eedf1555bd87b633490440ecc8dbdeaf6 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 17 Jun 2022 20:05:16 +0100 Subject: [PATCH 79/80] docs(tree-sitter): add mention on how to enable On a language level --- modules/tools/tree-sitter/README.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/tools/tree-sitter/README.org b/modules/tools/tree-sitter/README.org index 3f9a21e16..0ae737029 100644 --- a/modules/tools/tree-sitter/README.org +++ b/modules/tools/tree-sitter/README.org @@ -54,6 +54,8 @@ This module has no prerequisites. ** Language support Currently Emacs tree sitter has got [[https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos][parsers for these languages]] with syntax highlighting support for [[https://emacs-tree-sitter.github.io/syntax-highlighting/][these languages]] as well as ~typescript-tsx-mode~ +To enable tree sitter for individual languages add the =+tree-sitter= flag. +Check the module readme of your language for support. ** Text Objects Not all language support all text objects (yet). [[https://github.com/nvim-treesitter/nvim-treesitter-textobjects#built-in-textobjects][Here is a table of the text From 908ea8de5fe2bf053e1702079eb1f6e86feaab49 Mon Sep 17 00:00:00 2001 From: Jeetaditya Chatterjee Date: Fri, 17 Jun 2022 20:08:42 +0100 Subject: [PATCH 80/80] docs(tree-sitter): add doc checks for langs langs being: - elixir - nix - zig --- modules/lang/elixir/doctor.el | 6 ++++++ modules/lang/nix/doctor.el | 3 +++ modules/lang/zig/doctor.el | 4 ++++ 3 files changed, 13 insertions(+) create mode 100644 modules/lang/elixir/doctor.el diff --git a/modules/lang/elixir/doctor.el b/modules/lang/elixir/doctor.el new file mode 100644 index 000000000..cb0e825e0 --- /dev/null +++ b/modules/lang/elixir/doctor.el @@ -0,0 +1,6 @@ +;; -*- lexical-binding: t; no-byte-compile: t; -*- +;;; lang/elixir/doctor.el + +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/nix/doctor.el b/modules/lang/nix/doctor.el index 93f4de0c3..d79f06880 100644 --- a/modules/lang/nix/doctor.el +++ b/modules/lang/nix/doctor.el @@ -7,3 +7,6 @@ (unless (executable-find "nixfmt") (warn! "Couldn't find nixfmt. nix-format-buffer won't work.")) +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") diff --git a/modules/lang/zig/doctor.el b/modules/lang/zig/doctor.el index ecbeca1a1..cfa477cdd 100644 --- a/modules/lang/zig/doctor.el +++ b/modules/lang/zig/doctor.el @@ -5,6 +5,10 @@ (featurep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (featurep! +tree-sitter)) + (featurep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "zig") (warn! "Couldn't find zig binary"))