From: Felipe Ochoa <felipe.nospam.ochoa@gmail.com>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: 25904@debbugs.gnu.org
Subject: bug#25904: Formatting bug with js-mode
Date: Thu, 15 Mar 2018 20:06:57 -0500 [thread overview]
Message-ID: <CAJEr+DMTBjtMXOUUf6uT9dtye2TwHUgqnJ120t4TehWXo6FyXg@mail.gmail.com> (raw)
In-Reply-To: <ffa9276c-f384-45d4-f806-6d4b53093a15@yandex.ru>
This has taken a *little* longer than I'd hoped, but here's a new
patch with all the discussed changes. Hopefully I got the commit
message formatting and content right
From 0c7eed3fd9f7f77a071296c191e8569471bac4e5 Mon Sep 17 00:00:00 2001
From: Felipe Ochoa <felipe.nospam.ochoa@gmail.com>
Date: Tue, 7 Nov 2017 16:50:42 -0500
Subject: [PATCH] Fixes js indentation after arrow function without parens
From: felipe <felipe@fov.space>
* lisp/progmodes/js.el (js--proper-indentation)
(js--looking-at-broken-arrow-function-p)
* test/manual/indent/js.js: Indent expression following an arrow as
though it were enclosed in parentheses
(Bug#25904)
---
lisp/progmodes/js.el | 24 ++++++++++++++++++++++--
test/manual/indent/js.js | 9 +++++++++
2 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index f30e591..5a333a9 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -1849,7 +1849,9 @@ js--continued-expression-p
(skip-chars-backward " \t")
(or (bobp) (backward-char))
(and (> (point) (point-min))
- (save-excursion (backward-char) (not (looking-at "[/*]/")))
+ ;; Need to exclude => here since
js--looking-at-operator-p thinks
+ ;; it's looking at an assignment operator
+ (save-excursion (backward-char) (not (looking-at
"[/*]/\\|=>")))
(js--looking-at-operator-p)
(and (progn (backward-char)
(not (looking-at "+\\+\\|--\\|/[/*]"))))))))))
@@ -2078,6 +2080,23 @@ js--maybe-goto-declaration-keyword-end
(when comma-p
(goto-char (1+ declaration-keyword-end))))))))
+(defconst js--line-terminating-arrow "\\s-*=>\\s-*\\(/[/*]\\|$\\)"
+ "Regexp to match a \"=>\" token if it's the last non-whitespace,
non-comment token in a line.")
+
+(defun js--looking-at-broken-arrow-function-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 like 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))
+ (t (looking-at-p
+ (concat js--name-re js--line-terminating-arrow)))))
+
(defun js--proper-indentation (parse-status)
"Return the proper indentation for the current line."
(save-excursion
@@ -2108,7 +2127,8 @@ js--proper-indentation
(continued-expr-p (js--continued-expression-p)))
(goto-char (nth 1 parse-status)) ; go to the opening char
(if (or (not js-indent-align-list-continuation)
- (looking-at "[({[]\\s-*\\(/[/*]\\|$\\)"))
+ (looking-at "[({[]\\s-*\\(/[/*]\\|$\\)")
+ (progn (forward-char)
(js--looking-at-broken-arrow-function-p)))
(progn ; nothing following the opening paren/bracket
(skip-syntax-backward " ")
(when (eq (char-before) ?\)) (backward-list))
diff --git a/test/manual/indent/js.js b/test/manual/indent/js.js
index b0d8bca..fc39c12 100644
--- a/test/manual/indent/js.js
+++ b/test/manual/indent/js.js
@@ -144,6 +144,15 @@ bar(
/abc/
)
+// bug#25904
+foo.bar.baz(very => // A comment
+ very
+).biz(([baz={a: [123]}, boz]) =>
+ baz
+).snarf((snorf) => /* Another comment */
+ snorf
+);
+
// Local Variables:
// indent-tabs-mode: nil
// js-indent-level: 2
--
2.7.4
next prev parent reply other threads:[~2018-03-16 1:06 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAEtRwfDCdNSBPH=1Ohe3sBZJ70QBzJY3nd+Xs0uk85EuA3GRtw@mail.gmail.com>
[not found] ` <CAEtRwfA5_ibO2tmKCDtOHOs9ZCYosn21sKe5gC9LhE3y54GDyQ@mail.gmail.com>
2017-02-28 22:50 ` bug#25904: Formatting bug with js-mode Michael Snead
2017-11-07 23:55 ` Felipe Ochoa
2017-11-12 23:02 ` Dmitry Gutov
2017-11-20 22:22 ` Felipe Ochoa
2017-11-23 21:41 ` Dmitry Gutov
2018-03-16 1:06 ` Felipe Ochoa [this message]
2018-05-04 21:37 ` Dmitry Gutov
2018-04-29 1:20 ` bug#25904: bug#24896: JSX prop indentation after fat arrow Jimmy Yuen Ho Wong
2018-04-29 2:43 ` Eli Zaretskii
2019-02-10 22:03 ` bug#25904: Patches Jackson Ray Hamilton
2019-02-13 0:27 ` Dmitry Gutov
2019-02-13 4:01 ` Jackson Ray Hamilton
2019-02-13 15:15 ` Eli Zaretskii
2019-02-14 1:20 ` Dmitry Gutov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAJEr+DMTBjtMXOUUf6uT9dtye2TwHUgqnJ120t4TehWXo6FyXg@mail.gmail.com \
--to=felipe.nospam.ochoa@gmail.com \
--cc=25904@debbugs.gnu.org \
--cc=dgutov@yandex.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).