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

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

[elpa] externals/devicetree-ts-mode bf3a235f5d 02/11: Add imenu support.


From: ELPA Syncer
Subject: [elpa] externals/devicetree-ts-mode bf3a235f5d 02/11: Add imenu support.
Date: Tue, 16 Jan 2024 03:58:27 -0500 (EST)

branch: externals/devicetree-ts-mode
commit bf3a235f5ddb04ef7de1e97a0e46e2e5f02e5e5a
Author: Aleksandr Vityazev <avityazew@gmail.com>
Commit: Aleksandr Vityazev <avityazew@gmail.com>

    Add imenu support.
---
 devicetree-ts-mode.el | 32 +++++++++++++++++++++++++++++---
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git a/devicetree-ts-mode.el b/devicetree-ts-mode.el
index 3b6444c61c..db053323ba 100644
--- a/devicetree-ts-mode.el
+++ b/devicetree-ts-mode.el
@@ -118,6 +118,26 @@
    '((ERROR) @font-lock-warning-face))
   "Tree-sitter font-lock settings.")
 
+(defun devicetree-ts-mode--node-address (node)
+  "Return unit addresses for NODE concanated with @."
+  (mapconcat (lambda (children)
+               (if (string-equal (treesit-node-field-name children)
+                                 "address")
+                   (treesit-node-text children t)
+                 ""))
+             (treesit-node-children node)
+             ""))
+
+(defun devicetree-ts--mode--name-function (node)
+  "Return name of NODE to use for in imenu."
+  (let ((name (treesit-node-child-by-field-name node "name"))
+        (address (treesit-node-child-by-field-name node "address")))
+    (if address
+        (concat (treesit-node-text name t)
+                (devicetree-ts-mode--node-address node))
+      (treesit-node-text name t))))
+
+
 ;;;###autoload
 (define-derived-mode devicetree-ts-mode prog-mode "DTS"
   "Major mode for editing devicetree, powered by tree-sitter."
@@ -132,18 +152,24 @@
     (setq-local comment-end " */")
 
     ;; Imenu.
-    ;; (setq-local imenu-create-index-function
-    ;;             #'devicetree-ts-mode--imenu)
+    (setq-local treesit-simple-imenu-settings
+                `((nil "\\`node\\'"
+                       nil devicetree-ts--mode--name-function)))
     (setq-local which-func-functions nil)
 
     ;; Indent.
     ;; (setq-local treesit-simple-indent-rules
     ;;             devicetree-ts-mode--indent-rules)
+    ;; (setq-local indent-tabs-mode t)
+
+    ;; Electric
+    (setq-local electric-indent-chars
+                (append "{}<>[]" electric-indent-chars))
 
     ;; Navigation
     (setq-local treesit-thing-settings
                 `((devicetree
-                   (sexp (not ,(rx (or "{" "}" "<" ">" "(" ")" "," ";")))))))
+                   (sexp (not ,(rx (or "{" "}" "<" ">" "[" "]" "," ";")))))))
 
     ;; Font-lock.
     (setq-local treesit-font-lock-settings



reply via email to

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