]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve tree-sitter indent rules in ts-mode and js-mode
authorTheodor Thornhill <theo@thornhill.no>
Fri, 28 Oct 2022 04:05:02 +0000 (21:05 -0700)
committerYuan Fu <casouri@gmail.com>
Fri, 28 Oct 2022 08:15:46 +0000 (01:15 -0700)
* lisp/progmodes/js.el (js--treesit-indent-rules)
* lisp/progmodes/ts-mode.el (ts-mode--indent-rules): Add more rules.
(ts-mode): Create parser.

lisp/progmodes/js.el
lisp/progmodes/ts-mode.el

index 583de0c503225ba47d1ef1ed35e0e880d50c3e3e..dae6de1052a90162ecb5e5ed126f355450638652 100644 (file)
@@ -3417,12 +3417,14 @@ This function is intended for use in `after-change-functions'."
 (defvar js--treesit-indent-rules
   (let ((switch-case (rx "switch_" (or "case" "default"))))
     `((javascript
+       ((parent-is "program") parent-bol 0)
        (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)
        ((node-is ">") parent-bol 0)
-       ((node-is "\\.") 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)
index 28800e378a8d88f13887a9df91994baec298e1a9..15b8cbf71101e93db5b7b4d21a577f24fd336de5 100644 (file)
@@ -55,6 +55,7 @@
 
 (defvar ts-mode--indent-rules
   `((tsx
+     ((parent-is "program") parent-bol 0)
      ((node-is "}") parent-bol 0)
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
@@ -63,6 +64,8 @@
       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")
   :syntax-table ts-mode--syntax-table
 
   (cond
+   ;; `ts-mode' requires tree-sitter to work, so we don't check if
+   ;; user enables tree-sitter for it.
    ((treesit-ready-p nil 'tsx)
     ;; Tree-sitter.
+    (treesit-parser-create 'tsx)
     ;; Comments.
     (setq-local comment-start "// ")
     (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *")