From 7fca9267e634e3b101006bbe2ebcd926ed5767eb Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Thu, 18 Feb 2021 03:07:31 +0200 Subject: [PATCH] fix(41740): disallow renaming/exclude from references default keyword (#41947) --- src/services/findAllReferences.ts | 2 +- ...indAllRefsForDefaultKeyword.baseline.jsonc | 89 +++++++++++++++++++ .../fourslash/findAllRefsForDefaultKeyword.ts | 16 ++++ tests/cases/fourslash/renameDefaultKeyword.ts | 22 +++++ 4 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/findAllRefsForDefaultKeyword.baseline.jsonc create mode 100644 tests/cases/fourslash/findAllRefsForDefaultKeyword.ts create mode 100644 tests/cases/fourslash/renameDefaultKeyword.ts diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 12a97433615..cd4fd139aee 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -921,7 +921,7 @@ namespace ts.FindAllReferences { // When renaming at an export specifier, rename the export and not the thing being exported. getReferencesAtExportSpecifier(exportSpecifier.name, symbol, exportSpecifier, state.createSearch(node, originalSymbol, /*comingFrom*/ undefined), state, /*addReferencesHere*/ true, /*alwaysGetReferences*/ true); } - else if (node && node.kind === SyntaxKind.DefaultKeyword) { + else if (node && node.kind === SyntaxKind.DefaultKeyword && symbol.escapedName === InternalSymbolName.Default) { addReference(node, symbol, state); searchForImportsOfExport(node, symbol, { exportingModuleSymbol: Debug.checkDefined(symbol.parent, "Expected export symbol to have a parent"), exportKind: ExportKind.Default }, state); } diff --git a/tests/baselines/reference/findAllRefsForDefaultKeyword.baseline.jsonc b/tests/baselines/reference/findAllRefsForDefaultKeyword.baseline.jsonc new file mode 100644 index 00000000000..66796fd0895 --- /dev/null +++ b/tests/baselines/reference/findAllRefsForDefaultKeyword.baseline.jsonc @@ -0,0 +1,89 @@ +undefined + +undefined + +undefined + +undefined + +// === /tests/cases/fourslash/findAllRefsForDefaultKeyword.ts === +// function f(value: string, default: string) {} +// +// const default = 1; +// +// function default() {} +// +// class default {} +// +// const foo = { +// /*FIND ALL REFS*/[|default|]: 1 +// } + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/tests/cases/fourslash/findAllRefsForDefaultKeyword.ts", + "kind": "property", + "name": "(property) default: number", + "textSpan": { + "start": 126, + "length": 7 + }, + "displayParts": [ + { + "text": "(", + "kind": "punctuation" + }, + { + "text": "property", + "kind": "text" + }, + { + "text": ")", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "default", + "kind": "propertyName" + }, + { + "text": ":", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "number", + "kind": "keyword" + } + ], + "contextSpan": { + "start": 126, + "length": 10 + } + }, + "references": [ + { + "textSpan": { + "start": 126, + "length": 7 + }, + "fileName": "/tests/cases/fourslash/findAllRefsForDefaultKeyword.ts", + "contextSpan": { + "start": 126, + "length": 10 + }, + "isWriteAccess": true, + "isDefinition": true + } + ] + } +] \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsForDefaultKeyword.ts b/tests/cases/fourslash/findAllRefsForDefaultKeyword.ts new file mode 100644 index 00000000000..b646485994e --- /dev/null +++ b/tests/cases/fourslash/findAllRefsForDefaultKeyword.ts @@ -0,0 +1,16 @@ +/// + +// @noLib: true +////function f(value: string, /*1*/default: string) {} +//// +////const /*2*/default = 1; +//// +////function /*3*/default() {} +//// +////class /*4*/default {} +//// +////const foo = { +//// /*5*/default: 1 +////} + +verify.baselineFindAllReferences("1", "2", "3", "4", "5"); diff --git a/tests/cases/fourslash/renameDefaultKeyword.ts b/tests/cases/fourslash/renameDefaultKeyword.ts new file mode 100644 index 00000000000..043edac41a3 --- /dev/null +++ b/tests/cases/fourslash/renameDefaultKeyword.ts @@ -0,0 +1,22 @@ +/// + +// @noLib: true +////function f(value: string, /*1*/default: string) {} +//// +////const /*2*/default = 1; +//// +////function /*3*/default() {} +//// +////class /*4*/default {} +//// +////const foo = { +//// /*5*/[|default|]: 1 +////} + +for (const marker of ["1", "2", "3", "4"]) { + goTo.marker(marker); + verify.renameInfoFailed(ts.Diagnostics.You_cannot_rename_this_element.message); +} + +goTo.marker("5"); +verify.renameInfoSucceeded("default");