diff --git a/src/services/rename.ts b/src/services/rename.ts
index 4cdb4f14dc8..c3392a0ee64 100644
--- a/src/services/rename.ts
+++ b/src/services/rename.ts
@@ -13,7 +13,13 @@ namespace ts.Rename {
function getRenameInfoForNode(node: Node, typeChecker: TypeChecker, sourceFile: SourceFile, isDefinedInLibraryFile: (declaration: Node) => boolean, options?: RenameInfoOptions): RenameInfo | undefined {
const symbol = typeChecker.getSymbolAtLocation(node);
- if (!symbol) return;
+ if (!symbol) {
+ if (isLabelName(node)) {
+ const name = getTextOfNode(node);
+ return getRenameInfoSuccess(name, name, ScriptElementKind.label, ScriptElementKindModifier.none, node, sourceFile);
+ }
+ return undefined;
+ }
// Only allow a symbol to be renamed if it actually has at least one declaration.
const { declarations } = symbol;
if (!declarations || declarations.length === 0) return;
diff --git a/tests/baselines/reference/renameLabel1.baseline b/tests/baselines/reference/renameLabel1.baseline
new file mode 100644
index 00000000000..e3cbd64b1c9
--- /dev/null
+++ b/tests/baselines/reference/renameLabel1.baseline
@@ -0,0 +1,5 @@
+/*====== /tests/cases/fourslash/renameLabel1.ts ======*/
+
+RENAME: {
+ break [|RENAME|];
+}
diff --git a/tests/baselines/reference/renameLabel2.baseline b/tests/baselines/reference/renameLabel2.baseline
new file mode 100644
index 00000000000..92f1771b2b0
--- /dev/null
+++ b/tests/baselines/reference/renameLabel2.baseline
@@ -0,0 +1,5 @@
+/*====== /tests/cases/fourslash/renameLabel2.ts ======*/
+
+[|RENAME|]: {
+ break RENAME;
+}
diff --git a/tests/baselines/reference/renameLabel3.baseline b/tests/baselines/reference/renameLabel3.baseline
new file mode 100644
index 00000000000..404851ae006
--- /dev/null
+++ b/tests/baselines/reference/renameLabel3.baseline
@@ -0,0 +1,8 @@
+/*====== /tests/cases/fourslash/renameLabel3.ts ======*/
+
+[|RENAME|]:
+for (let i = 0; i <= 10; i++) {
+ if (i === 0) continue RENAME;
+ if (i === 1) continue RENAME;
+ if (i === 10) break RENAME;
+}
diff --git a/tests/baselines/reference/renameLabel4.baseline b/tests/baselines/reference/renameLabel4.baseline
new file mode 100644
index 00000000000..5f1fd986ae0
--- /dev/null
+++ b/tests/baselines/reference/renameLabel4.baseline
@@ -0,0 +1,8 @@
+/*====== /tests/cases/fourslash/renameLabel4.ts ======*/
+
+RENAME:
+for (let i = 0; i <= 10; i++) {
+ if (i === 0) continue RENAME;
+ if (i === 1) continue [|RENAME|];
+ if (i === 10) break RENAME;
+}
diff --git a/tests/baselines/reference/renameLabel5.baseline b/tests/baselines/reference/renameLabel5.baseline
new file mode 100644
index 00000000000..14bb4f1d7fe
--- /dev/null
+++ b/tests/baselines/reference/renameLabel5.baseline
@@ -0,0 +1,8 @@
+/*====== /tests/cases/fourslash/renameLabel5.ts ======*/
+
+RENAME: for (let i = 0; i <= 10; i++) {
+ loop2: for (let j = 0; j <= 10; j++) {
+ if (i === 5) continue [|RENAME|];
+ if (j === 5) break loop2;
+ }
+}
diff --git a/tests/baselines/reference/renameLabel6.baseline b/tests/baselines/reference/renameLabel6.baseline
new file mode 100644
index 00000000000..1db2df7fde3
--- /dev/null
+++ b/tests/baselines/reference/renameLabel6.baseline
@@ -0,0 +1,8 @@
+/*====== /tests/cases/fourslash/renameLabel6.ts ======*/
+
+loop1: for (let i = 0; i <= 10; i++) {
+ RENAME: for (let j = 0; j <= 10; j++) {
+ if (i === 5) continue loop1;
+ if (j === 5) break [|RENAME|];
+ }
+}
diff --git a/tests/cases/fourslash/renameLabel1.ts b/tests/cases/fourslash/renameLabel1.ts
new file mode 100644
index 00000000000..b93eea87c4d
--- /dev/null
+++ b/tests/cases/fourslash/renameLabel1.ts
@@ -0,0 +1,7 @@
+///
+
+////foo: {
+//// break /**/foo;
+////}
+
+verify.baselineRename("", {});
diff --git a/tests/cases/fourslash/renameLabel2.ts b/tests/cases/fourslash/renameLabel2.ts
new file mode 100644
index 00000000000..93d896eb7b8
--- /dev/null
+++ b/tests/cases/fourslash/renameLabel2.ts
@@ -0,0 +1,7 @@
+///
+
+/////**/foo: {
+//// break foo;
+////}
+
+verify.baselineRename("", {});
diff --git a/tests/cases/fourslash/renameLabel3.ts b/tests/cases/fourslash/renameLabel3.ts
new file mode 100644
index 00000000000..af72177ff24
--- /dev/null
+++ b/tests/cases/fourslash/renameLabel3.ts
@@ -0,0 +1,11 @@
+///
+
+/////**/loop:
+////for (let i = 0; i <= 10; i++) {
+//// if (i === 0) continue loop;
+//// if (i === 1) continue loop;
+//// if (i === 10) break loop;
+////}
+
+verify.baselineRename("", {});
+
diff --git a/tests/cases/fourslash/renameLabel4.ts b/tests/cases/fourslash/renameLabel4.ts
new file mode 100644
index 00000000000..68b382288e6
--- /dev/null
+++ b/tests/cases/fourslash/renameLabel4.ts
@@ -0,0 +1,11 @@
+///
+
+////loop:
+////for (let i = 0; i <= 10; i++) {
+//// if (i === 0) continue loop;
+//// if (i === 1) continue /**/loop;
+//// if (i === 10) break loop;
+////}
+
+verify.baselineRename("", {});
+
diff --git a/tests/cases/fourslash/renameLabel5.ts b/tests/cases/fourslash/renameLabel5.ts
new file mode 100644
index 00000000000..7e9a200d0cd
--- /dev/null
+++ b/tests/cases/fourslash/renameLabel5.ts
@@ -0,0 +1,10 @@
+///
+
+////loop1: for (let i = 0; i <= 10; i++) {
+//// loop2: for (let j = 0; j <= 10; j++) {
+//// if (i === 5) continue /**/loop1;
+//// if (j === 5) break loop2;
+//// }
+////}
+
+verify.baselineRename("", {});
diff --git a/tests/cases/fourslash/renameLabel6.ts b/tests/cases/fourslash/renameLabel6.ts
new file mode 100644
index 00000000000..5114f4af63d
--- /dev/null
+++ b/tests/cases/fourslash/renameLabel6.ts
@@ -0,0 +1,10 @@
+///
+
+////loop1: for (let i = 0; i <= 10; i++) {
+//// loop2: for (let j = 0; j <= 10; j++) {
+//// if (i === 5) continue loop1;
+//// if (j === 5) break /**/loop2;
+//// }
+////}
+
+verify.baselineRename("", {});