diff --git a/devicetree-ts-mode.el b/devicetree-ts-mode.el index 1d9f72c..d26937c 100644 --- a/devicetree-ts-mode.el +++ b/devicetree-ts-mode.el @@ -33,6 +33,7 @@ ;; * IMenu ;; * Font Lock +;; The commentary section could elaborate on what "Devicetree" are. ;;; Code: @@ -44,15 +45,21 @@ (declare-function treesit-parser-create "treesit.c") (declare-function treesit-node-child-by-field-name "treesit.c") +(defgroup devicetree () + "Tree-sitter support for DTS." + :prefix "devicetree-ts-" + :group 'languages) + (defcustom devicetree-ts-mode-indent-offset 4 "Number of spaces for each indentation step in `devicetree-ts-mode'." :version "29.1" + ;; This is not a core package, the version of your package is 0.2, + ;; so this doesn't match up :type 'natnum - :safe 'natnump - :group 'devicetree) + :safe 'natnump) ;; Taken from the dts-mode -(defvar devicetree-ts-mode--syntax-table +(defvar devicetree-ts-mode-syntax-table (let ((table (make-syntax-table))) (modify-syntax-entry ?< "(>" table) @@ -81,6 +88,10 @@ (defvar devicetree-ts-mode--indent-rules (let ((offset devicetree-ts-mode-indent-offset)) + ;; If this is a variable, that is set when the package is loaded, + ;; customising the user option `devicetree-ts-mode-indent-offset' + ;; will have no effect. You could turn this into a function + ;; instead. `((devicetree ((node-is ">") parent-bol 0) ((node-is "]") parent-bol 0) @@ -93,13 +104,14 @@ (no-node parent-bol 0)))) "Tree-sitter indent rules for `devicetree-ts-mode'.") +;; Could these be defconst? (defvar devicetree-ts-mode--treesit-keywords '("/delete-node/" "/delete-property/" "#define" "#include" "/omit-if-no-ref/" "/dts-v1/")) (defvar devicetree-ts-mode--treesit-operators - '( "!" "~" "-" "+" "*" "/" "%" "||" "&&" "|" - "^" "&" "==" "!=" ">" ">=" "<=" ">" "<<" ">>")) + '("!" "~" "-" "+" "*" "/" "%" "||" "&&" "|" + "^" "&" "==" "!=" ">" ">=" "<=" ">" "<<" ">>")) (defvar devicetree-ts-mode--font-lock-settings (treesit-font-lock-rules @@ -154,8 +166,8 @@ (defun devicetree-ts-mode--node-addresses (node) "List of addresses for NODE." - (reverse - (seq-reduce + (reverse ;Why `reverse'? (or `nreverse'?) + (seq-reduce ;Isn't this a `seq-filter'? (lambda (acc children) (if (string-equal (treesit-node-field-name children) "address") @@ -175,8 +187,6 @@ ;;;###autoload (define-derived-mode devicetree-ts-mode prog-mode "DTS" "Major mode for editing devicetree, powered by tree-sitter." - :group 'devicetree - :syntax-table devicetree-ts-mode--syntax-table (when (treesit-ready-p 'devicetree) (treesit-parser-create 'devicetree) @@ -187,7 +197,7 @@ ;; Imenu. (setq-local treesit-simple-imenu-settings - `((nil "\\`node\\'" + `((nil ,(rx bos "node" eos) nil devicetree-ts--mode--name-function))) (setq-local which-func-functions nil) @@ -216,9 +226,8 @@ (treesit-major-mode-setup))) -(if (treesit-ready-p 'devicetree) - (add-to-list 'auto-mode-alist - '("\\.dtsi?\\'" . devicetree-ts-mode))) +(when (treesit-ready-p 'devicetree) + (add-to-list 'auto-mode-alist '("\\.dtsi?\\'" . devicetree-ts-mode))) (provide 'devicetree-ts-mode) ;;; devicetree-ts-mode.el ends here