summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/progmodes/js.el15
-rw-r--r--test/lisp/progmodes/js-tests.el10
2 files changed, 20 insertions, 5 deletions
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 6e313dc51b7..65325a8ffad 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -1986,11 +1986,16 @@ In particular, return the buffer position of the first `for' kwd."
(js--forward-syntactic-ws)
(if (looking-at "[[{]")
(let (forward-sexp-function) ; Use Lisp version.
- (forward-sexp) ; Skip destructuring form.
- (js--forward-syntactic-ws)
- (if (and (/= (char-after) ?,) ; Regular array.
- (looking-at "for"))
- (match-beginning 0)))
+ (condition-case nil
+ (progn
+ (forward-sexp) ; Skip destructuring form.
+ (js--forward-syntactic-ws)
+ (if (and (/= (char-after) ?,) ; Regular array.
+ (looking-at "for"))
+ (match-beginning 0)))
+ (scan-error
+ ;; Nothing to do here.
+ nil)))
;; To skip arbitrary expressions we need the parser,
;; so we'll just guess at it.
(if (and (> end (point)) ; Not empty literal.
diff --git a/test/lisp/progmodes/js-tests.el b/test/lisp/progmodes/js-tests.el
index 99f5898525b..07e659af605 100644
--- a/test/lisp/progmodes/js-tests.el
+++ b/test/lisp/progmodes/js-tests.el
@@ -118,6 +118,16 @@ if (!/[ (:,='\"]/.test(value)) {
;; implementation not recognizing the comment example.
(should-not (syntax-ppss-context (syntax-ppss))))))
+(ert-deftest js-mode-indentation-error ()
+ (with-temp-buffer
+ (js-mode)
+ ;; The bug previously was that requesting re-indentation on the
+ ;; "{" line here threw an exception.
+ (insert "const TESTS = [\n{")
+ (js-indent-line)
+ ;; Any success is ok here.
+ (should t)))
+
(provide 'js-tests)
;;; js-tests.el ends here