emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/expand-region 541d971f7c: Tree-sitter support for Emacs


From: ELPA Syncer
Subject: [elpa] externals/expand-region 541d971f7c: Tree-sitter support for Emacs 29+
Date: Thu, 19 Sep 2024 12:58:25 -0400 (EDT)

branch: externals/expand-region
commit 541d971f7c77ca5c0f66c88bcbfeb0d165883023
Author: Alexander Adolf <c-alpha@users.noreply.github.com>
Commit: Magnar Sveen <magnars@gmail.com>

    Tree-sitter support for Emacs 29+
    
    er-basic-expansions.el (er/mark-ts-node): New function for expanding
    the region using Tree-sitter parse tree nodes when Tree-sitter is
    available and can parse the buffer around point. The new function is
    safe to add to the global base value of `er/try-expand-list` since it
    leaves the region unchanged when Tree-sitter information is not
    available.
---
 er-basic-expansions.el | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/er-basic-expansions.el b/er-basic-expansions.el
index 2e771a5a55..08cdc562d1 100644
--- a/er-basic-expansions.el
+++ b/er-basic-expansions.el
@@ -242,5 +242,26 @@ period and marks next symbol."
                 er/mark-defun)
               er/try-expand-list))
 
+(when (and (>= emacs-major-version 29)
+           (treesit-available-p))
+  (defun er/mark-ts-node ()
+    "Mark tree sitter node around or after point."
+    (interactive)
+    (when (treesit-language-at (point))
+      (let* ((node (if (use-region-p)
+                       (treesit-node-on (region-beginning) (region-end))
+                     (treesit-node-at (point))))
+             (node-start (treesit-node-start node))
+             (node-end (treesit-node-end node)))
+        ;; when the node fits the region exactly, try its parent node instead
+        (when (and (= (region-beginning) node-start)
+                   (= (region-end) node-end))
+          (when-let ((node (treesit-node-parent node)))
+            (setq node-start (treesit-node-start node)
+                  node-end (treesit-node-end node))))
+        (goto-char node-start)
+        (set-mark node-end))))
+  (setq er/try-expand-list (append er/try-expand-list '(er/mark-ts-node))))
+
 (provide 'er-basic-expansions)
 ;;; er-basic-expansions.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]