diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index 53ccd81f7a6a3..45b43c1d761ff 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -141,11 +141,8 @@ namespace ts { export function visitLexicalEnvironment(statements: NodeArray, visitor: Visitor, context: TransformationContext, start?: number, ensureUseStrict?: boolean) { context.startLexicalEnvironment(); statements = visitNodes(statements, visitor, isStatement, start); - if (ensureUseStrict && !startsWithUseStrict(statements)) { - statements = setTextRange(createNodeArray([createExpressionStatement(createLiteral("use strict")), ...statements]), statements); - } - const declarations = context.endLexicalEnvironment(); - return setTextRange(createNodeArray(concatenate(declarations, statements)), statements); + if (ensureUseStrict) statements = ts.ensureUseStrict(statements); // tslint:disable-line no-unnecessary-qualifier + return mergeLexicalEnvironment(statements, context.endLexicalEnvironment()); } /** diff --git a/tests/baselines/reference/instanceMemberWithComputedPropertyName.js b/tests/baselines/reference/instanceMemberWithComputedPropertyName.js index eba55c9899e64..98b2960192cd7 100644 --- a/tests/baselines/reference/instanceMemberWithComputedPropertyName.js +++ b/tests/baselines/reference/instanceMemberWithComputedPropertyName.js @@ -1,5 +1,6 @@ //// [instanceMemberWithComputedPropertyName.ts] // https://github.com/microsoft/TypeScript/issues/30953 +"use strict"; const x = 1; class C { [x] = true; @@ -9,8 +10,9 @@ class C { } //// [instanceMemberWithComputedPropertyName.js] -var _a; // https://github.com/microsoft/TypeScript/issues/30953 +"use strict"; +var _a; var x = 1; var C = /** @class */ (function () { function C() { diff --git a/tests/baselines/reference/instanceMemberWithComputedPropertyName.symbols b/tests/baselines/reference/instanceMemberWithComputedPropertyName.symbols index 3d405c89cc87a..3c151df85c3e4 100644 --- a/tests/baselines/reference/instanceMemberWithComputedPropertyName.symbols +++ b/tests/baselines/reference/instanceMemberWithComputedPropertyName.symbols @@ -1,20 +1,21 @@ === tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts === // https://github.com/microsoft/TypeScript/issues/30953 +"use strict"; const x = 1; ->x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 1, 5)) +>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 2, 5)) class C { ->C : Symbol(C, Decl(instanceMemberWithComputedPropertyName.ts, 1, 12)) +>C : Symbol(C, Decl(instanceMemberWithComputedPropertyName.ts, 2, 12)) [x] = true; ->[x] : Symbol(C[x], Decl(instanceMemberWithComputedPropertyName.ts, 2, 9)) ->x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 1, 5)) +>[x] : Symbol(C[x], Decl(instanceMemberWithComputedPropertyName.ts, 3, 9)) +>x : Symbol(x, Decl(instanceMemberWithComputedPropertyName.ts, 2, 5)) constructor() { const { a, b } = { a: 1, b: 2 }; ->a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 5, 15)) ->b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 5, 18)) ->a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 5, 26)) ->b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 5, 32)) +>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 6, 15)) +>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 6, 18)) +>a : Symbol(a, Decl(instanceMemberWithComputedPropertyName.ts, 6, 26)) +>b : Symbol(b, Decl(instanceMemberWithComputedPropertyName.ts, 6, 32)) } } diff --git a/tests/baselines/reference/instanceMemberWithComputedPropertyName.types b/tests/baselines/reference/instanceMemberWithComputedPropertyName.types index f98cc7bb80a84..412d795206eb4 100644 --- a/tests/baselines/reference/instanceMemberWithComputedPropertyName.types +++ b/tests/baselines/reference/instanceMemberWithComputedPropertyName.types @@ -1,5 +1,8 @@ === tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts === // https://github.com/microsoft/TypeScript/issues/30953 +"use strict"; +>"use strict" : "use strict" + const x = 1; >x : 1 >1 : 1 diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts index 31aec681445a5..07287f1f600b0 100644 --- a/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts +++ b/tests/cases/conformance/classes/propertyMemberDeclarations/instanceMemberWithComputedPropertyName.ts @@ -1,4 +1,5 @@ // https://github.com/microsoft/TypeScript/issues/30953 +"use strict"; const x = 1; class C { [x] = true;