Commit b47f9721 authored by Tom Tromey's avatar Tom Tromey
Browse files

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.
parent cab7a385
......@@ -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))
......
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment