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.
This commit is contained in:
Tom Tromey 2017-02-24 00:24:17 -07:00
parent 7b49bd44b7
commit e52287ca3e
2 changed files with 20 additions and 5 deletions

View file

@ -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.

View file

@ -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