summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2017-02-24 00:24:17 -0700
committerTom Tromey <tom@tromey.com>2017-02-24 20:33:41 -0700
commite52287ca3e974ed9f658315288060f638081abb0 (patch)
tree5c4f57067ae60c95a45bff71edeae03efe18f604
parent7b49bd44b70d0583e7e5989513b38e6f77e1c559 (diff)
downloademacs-e52287ca3e974ed9f658315288060f638081abb0.tar.gz
Fix indentation error in js.el
* lisp/progmodes/js.el (js--indent-in-array-comp): Wrap forward-sexp call in condition-case. * test/lisp/progmodes/js-tests.el (js-mode-indentation-error): New test.
-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