commit e8a35066ea4d30286836b2510e5c58409784fb97 Author: Tom Tromey Date: Fri Feb 24 00:24:17 2017 -0700 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. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 6e313dc..65325a8 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -1986,11 +1986,16 @@ js--indent-in-array-comp (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 99f5898..07e659a 100644 --- a/test/lisp/progmodes/js-tests.el +++ b/test/lisp/progmodes/js-tests.el @@ -118,6 +118,16 @@ ;; 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