Skip to content

Commit 9f3af67

Browse files
authored
fix(10019): allow renaming labels (microsoft#40064)
1 parent f9cca25 commit 9f3af67

13 files changed

+105
-1
lines changed

src/services/rename.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@ namespace ts.Rename {
1313

1414
function getRenameInfoForNode(node: Node, typeChecker: TypeChecker, sourceFile: SourceFile, isDefinedInLibraryFile: (declaration: Node) => boolean, options?: RenameInfoOptions): RenameInfo | undefined {
1515
const symbol = typeChecker.getSymbolAtLocation(node);
16-
if (!symbol) return;
16+
if (!symbol) {
17+
if (isLabelName(node)) {
18+
const name = getTextOfNode(node);
19+
return getRenameInfoSuccess(name, name, ScriptElementKind.label, ScriptElementKindModifier.none, node, sourceFile);
20+
}
21+
return undefined;
22+
}
1723
// Only allow a symbol to be renamed if it actually has at least one declaration.
1824
const { declarations } = symbol;
1925
if (!declarations || declarations.length === 0) return;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/*====== /tests/cases/fourslash/renameLabel1.ts ======*/
2+
3+
RENAME: {
4+
break [|RENAME|];
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/*====== /tests/cases/fourslash/renameLabel2.ts ======*/
2+
3+
[|RENAME|]: {
4+
break RENAME;
5+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*====== /tests/cases/fourslash/renameLabel3.ts ======*/
2+
3+
[|RENAME|]:
4+
for (let i = 0; i <= 10; i++) {
5+
if (i === 0) continue RENAME;
6+
if (i === 1) continue RENAME;
7+
if (i === 10) break RENAME;
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*====== /tests/cases/fourslash/renameLabel4.ts ======*/
2+
3+
RENAME:
4+
for (let i = 0; i <= 10; i++) {
5+
if (i === 0) continue RENAME;
6+
if (i === 1) continue [|RENAME|];
7+
if (i === 10) break RENAME;
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*====== /tests/cases/fourslash/renameLabel5.ts ======*/
2+
3+
RENAME: for (let i = 0; i <= 10; i++) {
4+
loop2: for (let j = 0; j <= 10; j++) {
5+
if (i === 5) continue [|RENAME|];
6+
if (j === 5) break loop2;
7+
}
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*====== /tests/cases/fourslash/renameLabel6.ts ======*/
2+
3+
loop1: for (let i = 0; i <= 10; i++) {
4+
RENAME: for (let j = 0; j <= 10; j++) {
5+
if (i === 5) continue loop1;
6+
if (j === 5) break [|RENAME|];
7+
}
8+
}

tests/cases/fourslash/renameLabel1.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
////foo: {
4+
//// break /**/foo;
5+
////}
6+
7+
verify.baselineRename("", {});

tests/cases/fourslash/renameLabel2.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
/////**/foo: {
4+
//// break foo;
5+
////}
6+
7+
verify.baselineRename("", {});

tests/cases/fourslash/renameLabel3.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
/////**/loop:
4+
////for (let i = 0; i <= 10; i++) {
5+
//// if (i === 0) continue loop;
6+
//// if (i === 1) continue loop;
7+
//// if (i === 10) break loop;
8+
////}
9+
10+
verify.baselineRename("", {});
11+

tests/cases/fourslash/renameLabel4.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
////loop:
4+
////for (let i = 0; i <= 10; i++) {
5+
//// if (i === 0) continue loop;
6+
//// if (i === 1) continue /**/loop;
7+
//// if (i === 10) break loop;
8+
////}
9+
10+
verify.baselineRename("", {});
11+

tests/cases/fourslash/renameLabel5.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
////loop1: for (let i = 0; i <= 10; i++) {
4+
//// loop2: for (let j = 0; j <= 10; j++) {
5+
//// if (i === 5) continue /**/loop1;
6+
//// if (j === 5) break loop2;
7+
//// }
8+
////}
9+
10+
verify.baselineRename("", {});

tests/cases/fourslash/renameLabel6.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
////loop1: for (let i = 0; i <= 10; i++) {
4+
//// loop2: for (let j = 0; j <= 10; j++) {
5+
//// if (i === 5) continue loop1;
6+
//// if (j === 5) break /**/loop2;
7+
//// }
8+
////}
9+
10+
verify.baselineRename("", {});

0 commit comments

Comments
 (0)