emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] feature/jsx e196207 15/19: Indent broken arrow function bo


From: Marcin Borkowski
Subject: [Emacs-diffs] feature/jsx e196207 15/19: Indent broken arrow function bodies as an N+1th arg
Date: Wed, 27 Mar 2019 05:35:02 -0400 (EDT)

branch: feature/jsx
commit e1962071a5b8c77bed1af8f9b6b1c636400de130
Author: Jackson Ray Hamilton <address@hidden>
Commit: Marcin Borkowski <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]