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.
This commit is contained in:
parent
cab7a38588
commit
b47f97218e
2 changed files with 25 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue