Skip to content

Commit 3b78168

Browse files
authored
fix(3700): fix index out of range panic when emitting whitespace-only jsx text (#3707)
1 parent 6a6cb09 commit 3b78168

2 files changed

Lines changed: 30 additions & 5 deletions

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package fourslash_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/microsoft/typescript-go/internal/fourslash"
7+
"github.com/microsoft/typescript-go/internal/testutil"
8+
)
9+
10+
func TestCodeFixMissingTypeAnnotationOnExports_jsxWhitespaceText(t *testing.T) {
11+
t.Parallel()
12+
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
13+
14+
const content = `// @isolatedDeclarations: true
15+
// @declaration: true
16+
// @module: preserve
17+
// @Filename: /test.tsx
18+
export const /**/elem = <div>
19+
<span />
20+
</div>;`
21+
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
22+
defer done()
23+
24+
f.GoToMarker(t, "")
25+
f.VerifyCodeFixAvailable(t, nil)
26+
}

internal/printer/changetrackerwriter.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,11 @@ func (ct *ChangeTrackerWriter) getEnd(node triviaPositionKey) int {
8888
func (ct *ChangeTrackerWriter) setLastNonTriviaPosition(s string, force bool) {
8989
if force || scanner.SkipTrivia(s, 0) != len(s) {
9090
ct.lastNonTriviaPosition = ct.textWriter.GetTextPos()
91-
i := 0
92-
for stringutil.IsWhiteSpaceLike(rune(s[len(s)-i-1])) {
93-
i++
94-
}
9591
// trim trailing whitespaces
96-
ct.lastNonTriviaPosition -= i
92+
pos := len(s) - 1
93+
for ; pos >= 0 && stringutil.IsWhiteSpaceLike(rune(s[pos])); pos-- {
94+
}
95+
ct.lastNonTriviaPosition -= len(s) - 1 - pos
9796
}
9897
}
9998

0 commit comments

Comments
 (0)