branch: elpa/typescript-mode
commit 09bdb97c32b52e33a229d7b7d06633ccda8701e8
Author: Louis-Dominique Dubeau <[email protected]>
Commit: Louis-Dominique Dubeau <[email protected]>
Fix an indentation bug.
In a return value annotation, a generic in a position other than the
last in a union of types (e.g. Array<number> | number) was causing the
algorithm to go off-track.
---
test-files/indentation-reference-document.ts | 7 +++++++
typescript-mode.el | 25 +++++++++++++++----------
2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/test-files/indentation-reference-document.ts
b/test-files/indentation-reference-document.ts
index d6e3124f0f..2fdf6ef337 100644
--- a/test-files/indentation-reference-document.ts
+++ b/test-files/indentation-reference-document.ts
@@ -282,6 +282,13 @@ function bif(a: number,
return "abc):d";
}
+// Generic and union in return type. This case was constructed from
+// a specific bug in the indentation code.
+function bif2(a: number,
+ b: number): Array<number> | number {
+ return 1;
+}
+
// Comment where the return type would appear.
function gogo(a: number,
b: number) /* foo */ {
diff --git a/typescript-mode.el b/typescript-mode.el
index 4b091fa64d..448a31e519 100644
--- a/typescript-mode.el
+++ b/typescript-mode.el
@@ -1808,18 +1808,23 @@ moved on success."
(save-excursion
(loop named search-loop
do (progn
- (if (eq (char-before) ?>)
- (if (looking-back "=>" (- (point) 2))
- ;; Move back over the arrow of an arrow
function.
- (backward-char 2)
- ;; Otherwise, we are looking at the end of the
parameters
- ;; list of a generic. We need to move back over
the list.
- (backward-char)
-
(typescript--backward-over-generic-parameter-list))
- ;; General case: we just move back over the current
sexp.
+ (cond
+ ((eq (char-before) ?>)
+ (if (looking-back "=>" (- (point) 2))
+ ;; Move back over the arrow of an arrow function.
+ (backward-char 2)
+ ;; Otherwise, we are looking at the end of the
parameters
+ ;; list of a generic. We need to move back over the
list.
+ (backward-char)
+ (typescript--backward-over-generic-parameter-list)))
+ ;; Looking at a union: skip over the character.
+ ((eq (char-before) ?|)
+ (backward-char))
+ ;; General case: we just move back over the current
sexp.
+ (t
(condition-case nil
(backward-sexp)
- (scan-error nil)))
+ (scan-error nil))))
(typescript--backward-syntactic-ws)
(let ((before (char-before)))
;; Check whether we are at "):".