emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 84b1cfb 15/28: Indent broken arrow function bodies


From: Jackson Ray Hamilton
Subject: [Emacs-diffs] master 84b1cfb 15/28: Indent broken arrow function bodies as an N+1th arg
Date: Tue, 9 Apr 2019 02:00:14 -0400 (EDT)

branch: master
commit 84b1cfbc2d6b9236913a18ed192798fd530911db
Author: Jackson Ray Hamilton <address@hidden>
Commit: Jackson Ray Hamilton <address@hidden>

    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.
---
 lisp/progmodes/js.el     | 22 ++++++++--------------
 test/manual/indent/js.js |  5 +++++
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 5d87489..f8dd72c 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -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))
diff --git a/test/manual/indent/js.js b/test/manual/indent/js.js
index 647d743..9658c95 100644
--- a/test/manual/indent/js.js
+++ b/test/manual/indent/js.js
@@ -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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]