[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master b47f972 4/5: Fix js-mode indentation bug
From: |
Tom Tromey |
Subject: |
[Emacs-diffs] master b47f972 4/5: Fix js-mode indentation bug |
Date: |
Fri, 13 Jan 2017 19:51:00 +0000 (UTC) |
branch: master
commit b47f97218efb8d9966e084bdfd8a86e8c47cf81d
Author: Tom Tromey <address@hidden>
Commit: Tom Tromey <address@hidden>
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.
---
lisp/progmodes/js.el | 20 +++++++++++++++++++-
test/manual/indent/js.js | 6 ++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 1484b79..e84215d 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 806e949..d004b82 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