Indent broken arrow function bodies as an N+1th arg

* lisp/progmodes/js.el (js--line-terminating-arrow-re): Revise regexp
for use with re-search-backward.
(js--looking-at-broken-arrow-function-p): Remove.
(js--broken-arrow-terminates-line-p): Replacement for
js--looking-at-broken-arrow-function-p.  Don’t consider whether an
arrow appears at point (in an arglist); instead, just look for an
arrow that terminates the line.
(js--proper-indentation): Use js--broken-arrow-terminates-line-p.

* test/manual/indent/js.js: Add test for a broken arrow as an N+1th
arg.
This commit is contained in:
Jackson Ray Hamilton 2019-03-24 13:17:12 -07:00
parent d9d1bb2b07
commit 84b1cfbc2d
No known key found for this signature in database
GPG key ID: B4771664B476B290
2 changed files with 13 additions and 14 deletions

View file

@ -2550,23 +2550,17 @@ indentation is aligned to that column."
(when comma-p
(goto-char (1+ declaration-keyword-end))))))))
(defconst js--line-terminating-arrow-re "\\s-*=>\\s-*\\(/[/*]\\|$\\)"
(defconst js--line-terminating-arrow-re "=>\\s-*\\(/[/*]\\|$\\)"
"Regexp matching the last \"=>\" (arrow) token on a line.
Whitespace and comments around the arrow are ignored.")
(defun js--looking-at-broken-arrow-function-p ()
(defun js--broken-arrow-terminates-line-p ()
"Helper function for `js--proper-indentation'.
Return t if point is at the start of a (possibly async) arrow
function and the last non-comment, non-whitespace token of the
current line is the \"=>\" token."
(when (looking-at "\\s-*async\\s-*")
(goto-char (match-end 0)))
(cond
((eq (char-after) ?\()
(forward-list)
(looking-at-p js--line-terminating-arrow-re))
(t (looking-at-p
(concat js--name-re js--line-terminating-arrow-re)))))
Return t if the last non-comment, non-whitespace token of the
current line is the \"=>\" token (of an arrow function)."
(let ((from (point)))
(end-of-line)
(re-search-backward js--line-terminating-arrow-re from t)))
(defun js-jsx--context ()
"Determine JSX context and move to enclosing JSX."
@ -2713,7 +2707,7 @@ return nil."
(goto-char (nth 1 parse-status)) ; go to the opening char
(if (or (not js-indent-align-list-continuation)
(looking-at "[({[]\\s-*\\(/[/*]\\|$\\)")
(save-excursion (forward-char) (js--looking-at-broken-arrow-function-p)))
(save-excursion (forward-char) (js--broken-arrow-terminates-line-p)))
(progn ; nothing following the opening paren/bracket
(skip-syntax-backward " ")
(when (eq (char-before) ?\)) (backward-list))

View file

@ -160,6 +160,11 @@ foo.bar.baz(very => // A comment
snorf
);
// Continuation of bug#25904; support broken arrow as N+1th arg
map(arr, (val) =>
val
)
// Local Variables:
// indent-tabs-mode: nil
// js-indent-level: 2