Add indentation rules for bracketless statements in js-ts-mode
* lisp/progmodes/js.el (js--treesit-indent-rules): Add indentation rules to handle bracketless statements (bug#67758). * test/lisp/progmodes/js-tests.el (js-ts-mode-test-indentation): New test for js-ts-mode indentation. * test/lisp/progmodes/js-resources/js-ts-indents.erts: New file with indentation tests for js-ts-mode.
This commit is contained in:
parent
7f1bd69cd1
commit
c165247c30
3 changed files with 55 additions and 0 deletions
|
@ -3472,6 +3472,11 @@ Check if a node type is available, then return the right indent rules."
|
|||
((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)
|
||||
((match "while" "do_statement") parent-bol 0)
|
||||
((match "else" "if_statement") parent-bol 0)
|
||||
((parent-is ,(rx (or (seq (or "if" "for" "for_in" "while" "do") "_statement")
|
||||
"else_clause")))
|
||||
parent-bol js-indent-level)
|
||||
|
||||
;; JSX
|
||||
,@(js-jsx--treesit-indent-compatibility-bb1f97b)
|
||||
|
|
44
test/lisp/progmodes/js-resources/js-ts-indents.erts
Normal file
44
test/lisp/progmodes/js-resources/js-ts-indents.erts
Normal file
|
@ -0,0 +1,44 @@
|
|||
Code:
|
||||
(lambda ()
|
||||
(setq indent-tabs-mode nil)
|
||||
(setq js-indent-level 2)
|
||||
(js-ts-mode)
|
||||
(indent-region (point-min) (point-max)))
|
||||
|
||||
Name: Basic indentation
|
||||
|
||||
=-=
|
||||
const foo = () => {
|
||||
console.log("bar");
|
||||
if (x) {
|
||||
return y;
|
||||
} else if (y) {
|
||||
return u;
|
||||
}
|
||||
return baz.x()
|
||||
? true
|
||||
: false;
|
||||
}
|
||||
=-=-=
|
||||
|
||||
Name: Statement indentation without braces
|
||||
|
||||
=-=
|
||||
function bracketless_statements(x) {
|
||||
if (x == 0)
|
||||
console.log("if_statement");
|
||||
else if (x == 1)
|
||||
console.log("if_statement");
|
||||
else
|
||||
console.log("else_clause");
|
||||
for (let i = 0; i < 1; i++)
|
||||
console.log("for_statement");
|
||||
for (let _ of [true])
|
||||
console.log("for_in_statement");
|
||||
while (x-- > 0)
|
||||
console.log("while_statement");
|
||||
do
|
||||
console.log("do_statement");
|
||||
while (false)
|
||||
};
|
||||
=-=-=
|
|
@ -288,6 +288,12 @@ function bar() {
|
|||
;; end-of-defun should move point to eob.
|
||||
(should (eobp))))
|
||||
|
||||
;;;; Tree-sitter tests.
|
||||
|
||||
(ert-deftest js-ts-mode-test-indentation ()
|
||||
(skip-unless (treesit-ready-p 'javascript))
|
||||
(ert-test-erts-file (ert-resource-file "js-ts-indents.erts")))
|
||||
|
||||
(provide 'js-tests)
|
||||
|
||||
;;; js-tests.el ends here
|
||||
|
|
Loading…
Add table
Reference in a new issue