From: Tom Tromey Date: Tue, 10 Jan 2017 05:15:57 +0000 (-0700) Subject: Fix js-mode indentation bug X-Git-Tag: emacs-26.0.90~894 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b47f97218efb8d9966e084bdfd8a86e8c47cf81d;p=emacs.git Fix js-mode indentation bug Bug#15582: * lisp/progmodes/js.el (js--find-newline-backward): New function. (js--continued-expression-p): Use it. * test/manual/indent/js.js: Add new test. --- diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 1484b79739f..e84215d4301 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -1771,6 +1771,24 @@ This performs fontification according to `js--class-styles'." ;; return NaN anyway. Shouldn't be a problem. (memq (char-before) '(?, ?} ?{)))))))) +(defun js--find-newline-backward () + "Move backward to the nearest newline that is not in a block comment." + (let ((continue t) + (result t)) + (while continue + (setq continue nil) + (if (search-backward "\n" nil t) + (let ((parse (syntax-ppss))) + ;; We match the end of a // comment but not a newline in a + ;; block comment. + (when (nth 4 parse) + (goto-char (nth 8 parse)) + ;; If we saw a block comment, keep trying. + (unless (nth 7 parse) + (setq continue t)))) + (setq result nil))) + result)) + (defun js--continued-expression-p () "Return non-nil if the current line continues an expression." (save-excursion @@ -1780,7 +1798,7 @@ This performs fontification according to `js--class-styles'." (progn (forward-comment (- (point))) (not (memq (char-before) '(?, ?\[ ?\())))) - (and (js--re-search-backward "\n" nil t) + (and (js--find-newline-backward) (progn (skip-chars-backward " \t") (or (bobp) (backward-char)) diff --git a/test/manual/indent/js.js b/test/manual/indent/js.js index 806e9497ad5..d004b82f8bc 100644 --- a/test/manual/indent/js.js +++ b/test/manual/indent/js.js @@ -118,6 +118,12 @@ var arr = [ -5 ]; +// Regression test for bug#15582. +if (x > 72 && + y < 85) { // found + do_something(); +} + // Local Variables: // indent-tabs-mode: nil // js-indent-level: 2