]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't mistake `for' inside a function for a part of array comprehension
authorDmitry Gutov <dgutov@yandex.ru>
Wed, 27 Apr 2016 23:00:23 +0000 (02:00 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Wed, 27 Apr 2016 23:00:48 +0000 (02:00 +0300)
* lisp/progmodes/js.el (js--indent-in-array-comp): Also check the
depth in parens between the bracket and `for' (bug#23391).

* test/indent/js.js: Add a corresponding example.

lisp/progmodes/js.el
test/indent/js.js

index 8c93ffa87310bd844ad830bea3a288ae11e975d6..48eb3e778e1b8e6bddc67e1a8481ba68ff30de99 100644 (file)
@@ -1892,9 +1892,11 @@ In particular, return the buffer position of the first `for' kwd."
           ;; To skip arbitrary expressions we need the parser,
           ;; so we'll just guess at it.
           (if (and (> end (point)) ; Not empty literal.
-                   (re-search-forward "[^,]]* \\(for\\" end t)
+                   (re-search-forward "[^,]]* \\(for\\_>\\)" end t)
                    ;; Not inside comment or string literal.
-                   (not (nth 8 (parse-partial-sexp bracket (point)))))
+                   (let ((status (parse-partial-sexp bracket (point))))
+                     (and (= 1 (car status))
+                          (not (nth 8 status)))))
               (match-beginning 1)))))))
 
 (defun js--array-comp-indentation (bracket for-kwd)
index 61c7b440ea3025b6427eef40e457fefd4605a07f..23fae17b3ce58a5f9363e7e8d57ac79a73cbf07e 100644 (file)
@@ -53,6 +53,14 @@ var p = {
 var evens = [e for each (e in range(0, 21))
                if (ed % 2 == 0)];
 
+var funs = [
+  function() {
+    for (;;) {
+    }
+  },
+  function(){},
+];
+
 !b
   !=b
   !==b