From 755b443b6dfe6bcf8b08c1af502d834ee0bb9d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Thu, 17 May 2018 10:18:20 +0800 Subject: [PATCH] disallow acesssor generate in function like initializer --- .../generateGetAccessorAndSetAccessor.ts | 7 ++++- ...efactorConvertToGetAccessAndSetAccess35.ts | 29 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess35.ts diff --git a/src/services/refactors/generateGetAccessorAndSetAccessor.ts b/src/services/refactors/generateGetAccessorAndSetAccessor.ts index ca94d10e80f..d68a052eca9 100644 --- a/src/services/refactors/generateGetAccessorAndSetAccessor.ts +++ b/src/services/refactors/generateGetAccessorAndSetAccessor.ts @@ -119,7 +119,12 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { function getConvertibleFieldAtPosition(file: SourceFile, startPosition: number): Info | undefined { const node = getTokenAtPosition(file, startPosition, /*includeJsDocComment*/ false); - const declaration = findAncestor(node.parent, isAcceptedDeclaration); + const declaration = findAncestor(node.parent, n => { + if (isFunctionLikeDeclaration(n)) { + return "quit"; + } + return isAcceptedDeclaration(n); + }); // make sure declaration have AccessibilityModifier or Static Modifier or Readonly Modifier const meaning = ModifierFlags.AccessibilityModifier | ModifierFlags.Static | ModifierFlags.Readonly; if (!declaration || !isConvertableName(declaration.name) || (getModifierFlags(declaration) | meaning) !== meaning) return undefined; diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess35.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess35.ts new file mode 100644 index 00000000000..f1b306fa4b9 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess35.ts @@ -0,0 +1,29 @@ +/// + +//// class A { +//// /*a*/public/*b*/ /*c*/a/*d*/ = () => { +//// /*e*/return/*f*/ /*g*/1/*h*/; +//// } +//// /*i*/b/*j*/: /*k*/number/*l*/ = /*m*/1/*n*/ +//// }; + +goTo.select("a", "b"); +verify.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("c", "d"); +verify.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("e", "f"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("g", "h"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("i", "j"); +verify.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("k", "l"); +verify.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("m", "n"); +verify.refactorAvailable("Generate 'get' and 'set' accessors"); \ No newline at end of file