diff options
| author | Dmitry Gutov | 2019-02-01 03:01:39 +0300 |
|---|---|---|
| committer | Dmitry Gutov | 2019-02-01 03:02:06 +0300 |
| commit | b01a4295c2f9bb58858880e4e28b05cc8396791c (patch) | |
| tree | 0a2486d50106ea36222fdac2922b31fe0c75ab7f | |
| parent | 47679e63230da94cffed568a4d5167ffc1baea96 (diff) | |
| download | emacs-b01a4295c2f9bb58858880e4e28b05cc8396791c.tar.gz emacs-b01a4295c2f9bb58858880e4e28b05cc8396791c.zip | |
js--re-search-backward-inner: Fix infloop
Fix JS indentation infloop reported in
https://github.com/mooz/js2-mode/issues/513.
* lisp/progmodes/js.el (js--re-search-backward-inner): Account for
multiline string literals.
* test/manual/indent/js.js: New test example.
| -rw-r--r-- | lisp/progmodes/js.el | 9 | ||||
| -rw-r--r-- | test/manual/indent/js.js | 7 |
2 files changed, 8 insertions, 8 deletions
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index e55539c17f4..a94a2fe134e 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el | |||
| @@ -785,7 +785,6 @@ macro as normal text." | |||
| 785 | (defun js--re-search-backward-inner (regexp &optional bound count) | 785 | (defun js--re-search-backward-inner (regexp &optional bound count) |
| 786 | "Auxiliary function for `js--re-search-backward'." | 786 | "Auxiliary function for `js--re-search-backward'." |
| 787 | (let ((parse) | 787 | (let ((parse) |
| 788 | str-terminator | ||
| 789 | (orig-macro-start | 788 | (orig-macro-start |
| 790 | (save-excursion | 789 | (save-excursion |
| 791 | (and (js--beginning-of-macro) | 790 | (and (js--beginning-of-macro) |
| @@ -796,13 +795,7 @@ macro as normal text." | |||
| 796 | (save-excursion (backward-char) (looking-at "/[/*]"))) | 795 | (save-excursion (backward-char) (looking-at "/[/*]"))) |
| 797 | (forward-char)) | 796 | (forward-char)) |
| 798 | (setq parse (syntax-ppss)) | 797 | (setq parse (syntax-ppss)) |
| 799 | (cond ((setq str-terminator (nth 3 parse)) | 798 | (cond ((nth 8 parse) |
| 800 | (when (eq str-terminator t) | ||
| 801 | (setq str-terminator ?/)) | ||
| 802 | (re-search-backward | ||
| 803 | (concat "\\([^\\]\\|^\\)" (string str-terminator)) | ||
| 804 | (point-at-bol) t)) | ||
| 805 | ((nth 7 parse) | ||
| 806 | (goto-char (nth 8 parse))) | 799 | (goto-char (nth 8 parse))) |
| 807 | ((or (nth 4 parse) | 800 | ((or (nth 4 parse) |
| 808 | (and (eq (char-before) ?/) (eq (char-after) ?*))) | 801 | (and (eq (char-before) ?/) (eq (char-after) ?*))) |
diff --git a/test/manual/indent/js.js b/test/manual/indent/js.js index b0d8bcabd20..df790986947 100644 --- a/test/manual/indent/js.js +++ b/test/manual/indent/js.js | |||
| @@ -144,6 +144,13 @@ bar( | |||
| 144 | /abc/ | 144 | /abc/ |
| 145 | ) | 145 | ) |
| 146 | 146 | ||
| 147 | // No infloop inside js--re-search-backward-inner | ||
| 148 | let b = { | ||
| 149 | a : ` | ||
| 150 | //1 | ||
| 151 | ` | ||
| 152 | } | ||
| 153 | |||
| 147 | // Local Variables: | 154 | // Local Variables: |
| 148 | // indent-tabs-mode: nil | 155 | // indent-tabs-mode: nil |
| 149 | // js-indent-level: 2 | 156 | // js-indent-level: 2 |