emacs-diffs
[Top][All Lists]
Advanced

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

feature/tree-sitter 076a258101 1/2: Allow tree-sitter indent offset to b


From: Yuan Fu
Subject: feature/tree-sitter 076a258101 1/2: Allow tree-sitter indent offset to be a variable
Date: Sat, 5 Nov 2022 22:01:15 -0400 (EDT)

branch: feature/tree-sitter
commit 076a25810127cb8c56ff0f5272a3d8b98192ee77
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    Allow tree-sitter indent offset to be a variable
    
    * doc/lispref/modes.texi (Parser-based Indentation): Update manual.
    * lisp/progmodes/js.el (js--treesit-indent-rules): Change all
    occurance of ,js-indent-level to js-indent-level.
    
    * lisp/progmodes/ts-mode.el (ts-mode--indent-rules): Change all
    occurance of ,ts-mode-indent-offset to ts-mode-indent-offset.
    * lisp/treesit.el (treesit-simple-indent-rules): Change docstring.
    (treesit-simple-indent): Allow offset to be a variable.
---
 doc/lispref/modes.texi    |  3 ++-
 lisp/progmodes/js.el      | 48 +++++++++++++++++++++++------------------------
 lisp/progmodes/ts-mode.el | 38 ++++++++++++++++++-------------------
 lisp/treesit.el           |  9 ++++++---
 4 files changed, 51 insertions(+), 47 deletions(-)

diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index e629679aea..5d9c4b15d8 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -4838,7 +4838,8 @@ the current line to @var{matcher}; if it returns 
non-@code{nil}, this
 rule is applicable.  Then Emacs passes the node to @var{anchor}, which
 returns a buffer position.  Emacs takes the column number of that
 position, adds @var{offset} to it, and the result is the indentation
-column for the current line.
+column for the current line.  @var{offset} can be an integer or a
+variable whose value is an integer.
 
 The @var{matcher} and @var{anchor} are functions, and Emacs provides
 convenient defaults for them.
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index a3f0bc0ed3..8ec7e7c675 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3412,34 +3412,34 @@ This function is intended for use in 
`after-change-functions'."
        ((node-is ")") parent-bol 0)
        ((node-is "]") parent-bol 0)
        ((node-is ">") parent-bol 0)
-       ((parent-is "ternary_expression") parent-bol ,js-indent-level)
-       ((parent-is "member_expression") parent-bol ,js-indent-level)
+       ((parent-is "ternary_expression") parent-bol js-indent-level)
+       ((parent-is "member_expression") parent-bol js-indent-level)
        ((node-is ,switch-case) parent-bol 0)
        ;; "{" on the newline.
-       ((node-is "statement_block") parent-bol ,js-indent-level)
-       ((parent-is "named_imports") parent-bol ,js-indent-level)
-       ((parent-is "statement_block") parent-bol ,js-indent-level)
-       ((parent-is "variable_declarator") parent-bol ,js-indent-level)
-       ((parent-is "arguments") parent-bol ,js-indent-level)
-       ((parent-is "array") parent-bol ,js-indent-level)
-       ((parent-is "formal_parameters") parent-bol ,js-indent-level)
-       ((parent-is "template_substitution") parent-bol ,js-indent-level)
-       ((parent-is "object_pattern") parent-bol ,js-indent-level)
-       ((parent-is "object") parent-bol ,js-indent-level)
-       ((parent-is "pair") parent-bol ,js-indent-level)
-       ((parent-is "arrow_function") parent-bol ,js-indent-level)
-       ((parent-is "parenthesized_expression") parent-bol ,js-indent-level)
-       ((parent-is "class_body") parent-bol ,js-indent-level)
-       ((parent-is ,switch-case) parent-bol ,js-indent-level)
-       ((parent-is "statement_block") parent-bol ,js-indent-level)
+       ((node-is "statement_block") parent-bol js-indent-level)
+       ((parent-is "named_imports") parent-bol js-indent-level)
+       ((parent-is "statement_block") parent-bol js-indent-level)
+       ((parent-is "variable_declarator") parent-bol js-indent-level)
+       ((parent-is "arguments") parent-bol js-indent-level)
+       ((parent-is "array") parent-bol js-indent-level)
+       ((parent-is "formal_parameters") parent-bol js-indent-level)
+       ((parent-is "template_substitution") parent-bol js-indent-level)
+       ((parent-is "object_pattern") parent-bol js-indent-level)
+       ((parent-is "object") parent-bol js-indent-level)
+       ((parent-is "pair") parent-bol js-indent-level)
+       ((parent-is "arrow_function") parent-bol js-indent-level)
+       ((parent-is "parenthesized_expression") parent-bol js-indent-level)
+       ((parent-is "class_body") parent-bol js-indent-level)
+       ((parent-is ,switch-case) parent-bol js-indent-level)
+       ((parent-is "statement_block") parent-bol js-indent-level)
 
        ;; JSX
-       ((parent-is "jsx_opening_element") parent ,js-indent-level)
+       ((parent-is "jsx_opening_element") parent js-indent-level)
        ((node-is "jsx_closing_element") parent 0)
-       ((node-is "jsx_text") parent ,js-indent-level)
-       ((parent-is "jsx_element") parent ,js-indent-level)
+       ((node-is "jsx_text") parent js-indent-level)
+       ((parent-is "jsx_element") parent js-indent-level)
        ((node-is "/") parent 0)
-       ((parent-is "jsx_self_closing_element") parent ,js-indent-level)))))
+       ((parent-is "jsx_self_closing_element") parent js-indent-level)))))
 
 (defvar js--treesit-keywords
   '("as" "async" "await" "break" "case" "catch" "class" "const" "continue"
@@ -3852,11 +3852,11 @@ definition*\"."
 
 (defvar js--json-treesit-indent-rules
   `((json
-     (no-node (js--treesit-backward-up-list) ,js-indent-level)
+     (no-node (js--treesit-backward-up-list) js-indent-level)
      ((node-is "}") parent-bol 0)
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
-     ((parent-is "object") parent-bol ,js-indent-level)
+     ((parent-is "object") parent-bol js-indent-level)
      )))
 
 ;;;###autoload
diff --git a/lisp/progmodes/ts-mode.el b/lisp/progmodes/ts-mode.el
index a7dee1ead8..f4dfa2ae95 100644
--- a/lisp/progmodes/ts-mode.el
+++ b/lisp/progmodes/ts-mode.el
@@ -60,29 +60,29 @@
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
      ((node-is ">") parent-bol 0)
-     ((parent-is "ternary_expression") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "member_expression") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "named_imports") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "statement_block") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "type_arguments") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "variable_declarator") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "arguments") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "array") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "formal_parameters") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "template_substitution") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "object_pattern") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "object") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "object_type") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "enum_body") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "arrow_function") parent-bol ,ts-mode-indent-offset)
-     ((parent-is "parenthesized_expression") parent-bol ,ts-mode-indent-offset)
+     ((parent-is "ternary_expression") parent-bol ts-mode-indent-offset)
+     ((parent-is "member_expression") parent-bol ts-mode-indent-offset)
+     ((parent-is "named_imports") parent-bol ts-mode-indent-offset)
+     ((parent-is "statement_block") parent-bol ts-mode-indent-offset)
+     ((parent-is "type_arguments") parent-bol ts-mode-indent-offset)
+     ((parent-is "variable_declarator") parent-bol ts-mode-indent-offset)
+     ((parent-is "arguments") parent-bol ts-mode-indent-offset)
+     ((parent-is "array") parent-bol ts-mode-indent-offset)
+     ((parent-is "formal_parameters") parent-bol ts-mode-indent-offset)
+     ((parent-is "template_substitution") parent-bol ts-mode-indent-offset)
+     ((parent-is "object_pattern") parent-bol ts-mode-indent-offset)
+     ((parent-is "object") parent-bol ts-mode-indent-offset)
+     ((parent-is "object_type") parent-bol ts-mode-indent-offset)
+     ((parent-is "enum_body") parent-bol ts-mode-indent-offset)
+     ((parent-is "arrow_function") parent-bol ts-mode-indent-offset)
+     ((parent-is "parenthesized_expression") parent-bol ts-mode-indent-offset)
 
      ;; TSX
-     ((parent-is "jsx_opening_element") parent ,ts-mode-indent-offset)
+     ((parent-is "jsx_opening_element") parent ts-mode-indent-offset)
      ((node-is "jsx_closing_element") parent 0)
-     ((parent-is "jsx_element") parent ,ts-mode-indent-offset)
+     ((parent-is "jsx_element") parent ts-mode-indent-offset)
      ((node-is "/") parent 0)
-     ((parent-is "jsx_self_closing_element") parent ,ts-mode-indent-offset)
+     ((parent-is "jsx_self_closing_element") parent ts-mode-indent-offset)
      (no-node parent-bol 0)))
   "Tree-sitter indent rules.")
 
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 09e5d8084e..7233ce7f18 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -894,8 +894,9 @@ If MATCHER returns non-nil, meaning the rule matches, Emacs 
then
 uses ANCHOR to find an anchor, it should be a function that takes
 the same argument (NODE PARENT BOL) and returns a point.
 
-Finally Emacs computes the column of that point returned by ANCHOR
-and adds OFFSET to it, and indents to that column.
+Finally Emacs computes the column of that point returned by
+ANCHOR and adds OFFSET to it, and indents to that column.  OFFSET
+can be an integer or a variable whose value is an integer.
 
 For MATCHER and ANCHOR, Emacs provides some convenient presets.
 See `treesit-simple-indent-presets'.")
@@ -1298,7 +1299,9 @@ OFFSET."
                (let ((anchor-pos
                       (treesit--simple-indent-eval
                        (list anchor node parent bol))))
-                 (cons anchor-pos offset))
+                 (cons anchor-pos (if (symbolp offset)
+                                      (symbol-value offset)
+                                    offset)))
                finally return
                (progn (when treesit--indent-verbose
                         (message "No matched rule"))



reply via email to

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