fix(10019): allow renaming labels (#40064)

This commit is contained in:
Alexander T 2020-08-18 11:04:49 +03:00 committed by GitHub
parent f9cca25cd7
commit 9f3af67929
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 105 additions and 1 deletions

View File

@ -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;

View File

@ -0,0 +1,5 @@
/*====== /tests/cases/fourslash/renameLabel1.ts ======*/
RENAME: {
break [|RENAME|];
}

View File

@ -0,0 +1,5 @@
/*====== /tests/cases/fourslash/renameLabel2.ts ======*/
[|RENAME|]: {
break RENAME;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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|];
}
}

View File

@ -0,0 +1,7 @@
/// <reference path="fourslash.ts" />
////foo: {
//// break /**/foo;
////}
verify.baselineRename("", {});

View File

@ -0,0 +1,7 @@
/// <reference path="fourslash.ts" />
/////**/foo: {
//// break foo;
////}
verify.baselineRename("", {});

View File

@ -0,0 +1,11 @@
/// <reference path="fourslash.ts" />
/////**/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("", {});

View File

@ -0,0 +1,11 @@
/// <reference path="fourslash.ts" />
////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("", {});

View File

@ -0,0 +1,10 @@
/// <reference path="fourslash.ts" />
////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("", {});

View File

@ -0,0 +1,10 @@
/// <reference path="fourslash.ts" />
////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("", {});