From 9f3af6792943a2a5a6987fe8ca9e1326555f8d7c Mon Sep 17 00:00:00 2001 From: Alexander T Date: Tue, 18 Aug 2020 11:04:49 +0300 Subject: [PATCH] fix(10019): allow renaming labels (#40064) --- src/services/rename.ts | 8 +++++++- tests/baselines/reference/renameLabel1.baseline | 5 +++++ tests/baselines/reference/renameLabel2.baseline | 5 +++++ tests/baselines/reference/renameLabel3.baseline | 8 ++++++++ tests/baselines/reference/renameLabel4.baseline | 8 ++++++++ tests/baselines/reference/renameLabel5.baseline | 8 ++++++++ tests/baselines/reference/renameLabel6.baseline | 8 ++++++++ tests/cases/fourslash/renameLabel1.ts | 7 +++++++ tests/cases/fourslash/renameLabel2.ts | 7 +++++++ tests/cases/fourslash/renameLabel3.ts | 11 +++++++++++ tests/cases/fourslash/renameLabel4.ts | 11 +++++++++++ tests/cases/fourslash/renameLabel5.ts | 10 ++++++++++ tests/cases/fourslash/renameLabel6.ts | 10 ++++++++++ 13 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/renameLabel1.baseline create mode 100644 tests/baselines/reference/renameLabel2.baseline create mode 100644 tests/baselines/reference/renameLabel3.baseline create mode 100644 tests/baselines/reference/renameLabel4.baseline create mode 100644 tests/baselines/reference/renameLabel5.baseline create mode 100644 tests/baselines/reference/renameLabel6.baseline create mode 100644 tests/cases/fourslash/renameLabel1.ts create mode 100644 tests/cases/fourslash/renameLabel2.ts create mode 100644 tests/cases/fourslash/renameLabel3.ts create mode 100644 tests/cases/fourslash/renameLabel4.ts create mode 100644 tests/cases/fourslash/renameLabel5.ts create mode 100644 tests/cases/fourslash/renameLabel6.ts 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("", {});