]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow tree-sitter indent offset to be a variable
authorYuan Fu <casouri@gmail.com>
Sun, 6 Nov 2022 01:32:01 +0000 (18:32 -0700)
committerYuan Fu <casouri@gmail.com>
Sun, 6 Nov 2022 01:32:01 +0000 (18:32 -0700)
* 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
lisp/progmodes/js.el
lisp/progmodes/ts-mode.el
lisp/treesit.el

index e629679aeae3973f7ff6af5256b7a123fc8ab45d..5d9c4b15d87ebf5a800b3f2f5983357e289b81f2 100644 (file)
@@ -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.
index a3f0bc0ed39ff40e3f1c941db54e58720d384a42..8ec7e7c675046ad8280245b5ce61ce9e89dd42c6 100644 (file)
@@ -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
index a7dee1ead8814c06194e928b62c73d240d22f5da..f4dfa2ae95f16f5734cc7ce801cff5945d53c485 100644 (file)
      ((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.")
 
index 09e5d8084e269cfd33c80fd9c784881d2b359b30..7233ce7f18bc7d154e9c45604501f89c6d1c32a4 100644 (file)
@@ -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"))