= new Map<
['jsxPragma', ['string']],
['jsxFragmentName', ['string']],
['sourceType', ['string', new Set(['module', 'script'])]],
+ ['emitDecoratorMetadata', ['boolean']],
]);
function nestDescribe(
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/accessor-deco.ts b/packages/scope-manager/tests/fixtures/class/emit-metadata/accessor-deco.ts
new file mode 100644
index 000000000000..41c40b287703
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/accessor-deco.ts
@@ -0,0 +1,23 @@
+//// @emitDecoratorMetadata = true
+
+function deco(...param: any) {}
+
+class T {}
+const keyName = 'foo';
+
+class A {
+ @deco
+ set b(b: T) {}
+
+ set ['a'](a: T) {}
+ @deco
+ get a() {}
+
+ set [0](a: T) {}
+ @deco
+ get [0]() {}
+
+ set [keyName](a: T) {}
+ @deco
+ get [keyName]() {}
+}
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/accessor-deco.ts.shot b/packages/scope-manager/tests/fixtures/class/emit-metadata/accessor-deco.ts.shot
new file mode 100644
index 000000000000..f535f8e61be2
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/accessor-deco.ts.shot
@@ -0,0 +1,470 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`class emit-metadata accessor-deco 1`] = `
+ScopeManager {
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2 {
+ defs: Array [
+ FunctionNameDefinition$1 {
+ name: Identifier<"deco">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "deco",
+ references: Array [
+ Reference$3 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ Reference$5 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ Reference$7 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ Reference$11 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$3 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$4 {
+ defs: Array [
+ ParameterDefinition$2 {
+ name: Identifier<"param">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "param",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$5 {
+ defs: Array [
+ ClassNameDefinition$3 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [
+ Reference$2 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$4 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$6 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$9 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: false,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$6 {
+ defs: Array [
+ ClassNameDefinition$4 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$7 {
+ defs: Array [
+ VariableDefinition$5 {
+ name: Identifier<"keyName">,
+ node: VariableDeclarator$3,
+ },
+ ],
+ name: "keyName",
+ references: Array [
+ Reference$1 {
+ identifier: Identifier<"keyName">,
+ init: true,
+ isRead: false,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: true,
+ resolved: Variable$7,
+ writeExpr: Literal$4,
+ },
+ Reference$8 {
+ identifier: Identifier<"keyName">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$7,
+ },
+ Reference$10 {
+ identifier: Identifier<"keyName">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$7,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$8 {
+ defs: Array [
+ ClassNameDefinition$6 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$9 {
+ defs: Array [
+ ClassNameDefinition$7 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$10 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$11 {
+ defs: Array [
+ ParameterDefinition$8 {
+ name: Identifier<"b">,
+ node: FunctionExpression$6,
+ },
+ ],
+ name: "b",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$12 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$13 {
+ defs: Array [
+ ParameterDefinition$9 {
+ name: Identifier<"a">,
+ node: FunctionExpression$7,
+ },
+ ],
+ name: "a",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$14 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$15 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$16 {
+ defs: Array [
+ ParameterDefinition$10 {
+ name: Identifier<"a">,
+ node: FunctionExpression$8,
+ },
+ ],
+ name: "a",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$17 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$18 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$19 {
+ defs: Array [
+ ParameterDefinition$11 {
+ name: Identifier<"a">,
+ node: FunctionExpression$9,
+ },
+ ],
+ name: "a",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$20 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ ],
+ scopes: Array [
+ GlobalScope$1 {
+ block: Program$10,
+ isStrict: false,
+ references: Array [
+ Reference$1,
+ ],
+ set: Map {
+ "const" => ImplicitGlobalConstTypeVariable,
+ "deco" => Variable$2,
+ "T" => Variable$5,
+ "keyName" => Variable$7,
+ "A" => Variable$8,
+ },
+ type: "global",
+ upper: null,
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2,
+ Variable$5,
+ Variable$7,
+ Variable$8,
+ ],
+ },
+ FunctionScope$2 {
+ block: FunctionDeclaration$1,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$3,
+ "param" => Variable$4,
+ },
+ type: "function",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$3,
+ Variable$4,
+ ],
+ },
+ ClassScope$3 {
+ block: ClassDeclaration$2,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "T" => Variable$6,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$6,
+ ],
+ },
+ ClassScope$4 {
+ block: ClassDeclaration$5,
+ isStrict: true,
+ references: Array [
+ Reference$3,
+ Reference$5,
+ Reference$7,
+ Reference$8,
+ Reference$10,
+ Reference$11,
+ ],
+ set: Map {
+ "A" => Variable$9,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$9,
+ ],
+ },
+ FunctionScope$5 {
+ block: FunctionExpression$6,
+ isStrict: true,
+ references: Array [
+ Reference$2,
+ ],
+ set: Map {
+ "arguments" => Variable$10,
+ "b" => Variable$11,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$10,
+ Variable$11,
+ ],
+ },
+ FunctionScope$6 {
+ block: FunctionExpression$7,
+ isStrict: true,
+ references: Array [
+ Reference$4,
+ ],
+ set: Map {
+ "arguments" => Variable$12,
+ "a" => Variable$13,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$12,
+ Variable$13,
+ ],
+ },
+ FunctionScope$7 {
+ block: FunctionExpression$11,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$14,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$14,
+ ],
+ },
+ FunctionScope$8 {
+ block: FunctionExpression$8,
+ isStrict: true,
+ references: Array [
+ Reference$6,
+ ],
+ set: Map {
+ "arguments" => Variable$15,
+ "a" => Variable$16,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$15,
+ Variable$16,
+ ],
+ },
+ FunctionScope$9 {
+ block: FunctionExpression$12,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$17,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$17,
+ ],
+ },
+ FunctionScope$10 {
+ block: FunctionExpression$9,
+ isStrict: true,
+ references: Array [
+ Reference$9,
+ ],
+ set: Map {
+ "arguments" => Variable$18,
+ "a" => Variable$19,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$18,
+ Variable$19,
+ ],
+ },
+ FunctionScope$11 {
+ block: FunctionExpression$13,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$20,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$20,
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/method-deco.ts b/packages/scope-manager/tests/fixtures/class/emit-metadata/method-deco.ts
new file mode 100644
index 000000000000..ab030a5b0b9a
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/method-deco.ts
@@ -0,0 +1,11 @@
+//// @emitDecoratorMetadata = true
+
+function deco(...param: any) {}
+
+class T {}
+
+class A {
+ foo(a: T): T {}
+ @deco
+ foo1(a: T, b: T): T {}
+}
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/method-deco.ts.shot b/packages/scope-manager/tests/fixtures/class/emit-metadata/method-deco.ts.shot
new file mode 100644
index 000000000000..74707c85f354
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/method-deco.ts.shot
@@ -0,0 +1,291 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`class emit-metadata method-deco 1`] = `
+ScopeManager {
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2 {
+ defs: Array [
+ FunctionNameDefinition$1 {
+ name: Identifier<"deco">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "deco",
+ references: Array [
+ Reference$6 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$3 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$4 {
+ defs: Array [
+ ParameterDefinition$2 {
+ name: Identifier<"param">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "param",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$5 {
+ defs: Array [
+ ClassNameDefinition$3 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [
+ Reference$1 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: false,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$2 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: false,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$3 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$4 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$5 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$6 {
+ defs: Array [
+ ClassNameDefinition$4 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$7 {
+ defs: Array [
+ ClassNameDefinition$5 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$8 {
+ defs: Array [
+ ClassNameDefinition$6 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$9 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$10 {
+ defs: Array [
+ ParameterDefinition$7 {
+ name: Identifier<"a">,
+ node: FunctionExpression$4,
+ },
+ ],
+ name: "a",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$11 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$12 {
+ defs: Array [
+ ParameterDefinition$8 {
+ name: Identifier<"a">,
+ node: FunctionExpression$5,
+ },
+ ],
+ name: "a",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$13 {
+ defs: Array [
+ ParameterDefinition$9 {
+ name: Identifier<"b">,
+ node: FunctionExpression$5,
+ },
+ ],
+ name: "b",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ ],
+ scopes: Array [
+ GlobalScope$1 {
+ block: Program$6,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "const" => ImplicitGlobalConstTypeVariable,
+ "deco" => Variable$2,
+ "T" => Variable$5,
+ "A" => Variable$7,
+ },
+ type: "global",
+ upper: null,
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2,
+ Variable$5,
+ Variable$7,
+ ],
+ },
+ FunctionScope$2 {
+ block: FunctionDeclaration$1,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$3,
+ "param" => Variable$4,
+ },
+ type: "function",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$3,
+ Variable$4,
+ ],
+ },
+ ClassScope$3 {
+ block: ClassDeclaration$2,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "T" => Variable$6,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$6,
+ ],
+ },
+ ClassScope$4 {
+ block: ClassDeclaration$3,
+ isStrict: true,
+ references: Array [
+ Reference$6,
+ ],
+ set: Map {
+ "A" => Variable$8,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$8,
+ ],
+ },
+ FunctionScope$5 {
+ block: FunctionExpression$4,
+ isStrict: true,
+ references: Array [
+ Reference$1,
+ Reference$2,
+ ],
+ set: Map {
+ "arguments" => Variable$9,
+ "a" => Variable$10,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$9,
+ Variable$10,
+ ],
+ },
+ FunctionScope$6 {
+ block: FunctionExpression$5,
+ isStrict: true,
+ references: Array [
+ Reference$3,
+ Reference$4,
+ Reference$5,
+ ],
+ set: Map {
+ "arguments" => Variable$11,
+ "a" => Variable$12,
+ "b" => Variable$13,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$11,
+ Variable$12,
+ Variable$13,
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-both.ts b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-both.ts
new file mode 100644
index 000000000000..39fa3c402325
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-both.ts
@@ -0,0 +1,15 @@
+//// @emitDecoratorMetadata = true
+
+function deco(...param: any) {}
+
+class T {}
+
+@deco
+class A {
+ constructor(foo: T) {
+ @deco
+ class B {
+ constructor(bar: T) {}
+ }
+ }
+}
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-both.ts.shot b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-both.ts.shot
new file mode 100644
index 000000000000..01686cb28848
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-both.ts.shot
@@ -0,0 +1,298 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`class emit-metadata nested-class-both 1`] = `
+ScopeManager {
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2 {
+ defs: Array [
+ FunctionNameDefinition$1 {
+ name: Identifier<"deco">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "deco",
+ references: Array [
+ Reference$1 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ Reference$3 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$3 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$4 {
+ defs: Array [
+ ParameterDefinition$2 {
+ name: Identifier<"param">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "param",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$5 {
+ defs: Array [
+ ClassNameDefinition$3 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [
+ Reference$2 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$4 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$6 {
+ defs: Array [
+ ClassNameDefinition$4 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$7 {
+ defs: Array [
+ ClassNameDefinition$5 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$8 {
+ defs: Array [
+ ClassNameDefinition$6 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$9 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$10 {
+ defs: Array [
+ ParameterDefinition$7 {
+ name: Identifier<"foo">,
+ node: FunctionExpression$4,
+ },
+ ],
+ name: "foo",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$11 {
+ defs: Array [
+ ClassNameDefinition$8 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$12 {
+ defs: Array [
+ ClassNameDefinition$9 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$13 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$14 {
+ defs: Array [
+ ParameterDefinition$10 {
+ name: Identifier<"bar">,
+ node: FunctionExpression$6,
+ },
+ ],
+ name: "bar",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ ],
+ scopes: Array [
+ GlobalScope$1 {
+ block: Program$7,
+ isStrict: false,
+ references: Array [
+ Reference$1,
+ ],
+ set: Map {
+ "const" => ImplicitGlobalConstTypeVariable,
+ "deco" => Variable$2,
+ "T" => Variable$5,
+ "A" => Variable$7,
+ },
+ type: "global",
+ upper: null,
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2,
+ Variable$5,
+ Variable$7,
+ ],
+ },
+ FunctionScope$2 {
+ block: FunctionDeclaration$1,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$3,
+ "param" => Variable$4,
+ },
+ type: "function",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$3,
+ Variable$4,
+ ],
+ },
+ ClassScope$3 {
+ block: ClassDeclaration$2,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "T" => Variable$6,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$6,
+ ],
+ },
+ ClassScope$4 {
+ block: ClassDeclaration$3,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "A" => Variable$8,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$8,
+ ],
+ },
+ FunctionScope$5 {
+ block: FunctionExpression$4,
+ isStrict: true,
+ references: Array [
+ Reference$2,
+ Reference$3,
+ ],
+ set: Map {
+ "arguments" => Variable$9,
+ "foo" => Variable$10,
+ "B" => Variable$11,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$9,
+ Variable$10,
+ Variable$11,
+ ],
+ },
+ ClassScope$6 {
+ block: ClassDeclaration$5,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "B" => Variable$12,
+ },
+ type: "class",
+ upper: FunctionScope$5,
+ variables: Array [
+ Variable$12,
+ ],
+ },
+ FunctionScope$7 {
+ block: FunctionExpression$6,
+ isStrict: true,
+ references: Array [
+ Reference$4,
+ ],
+ set: Map {
+ "arguments" => Variable$13,
+ "bar" => Variable$14,
+ },
+ type: "function",
+ upper: ClassScope$6,
+ variables: Array [
+ Variable$13,
+ Variable$14,
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-inner.ts b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-inner.ts
new file mode 100644
index 000000000000..d2fd5be90214
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-inner.ts
@@ -0,0 +1,14 @@
+//// @emitDecoratorMetadata = true
+
+function deco(...param: any) {}
+
+class T {}
+
+class A {
+ constructor(foo: T) {
+ @deco
+ class B {
+ constructor(bar: T) {}
+ }
+ }
+}
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-inner.ts.shot b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-inner.ts.shot
new file mode 100644
index 000000000000..963402a90367
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-inner.ts.shot
@@ -0,0 +1,288 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`class emit-metadata nested-class-inner 1`] = `
+ScopeManager {
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2 {
+ defs: Array [
+ FunctionNameDefinition$1 {
+ name: Identifier<"deco">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "deco",
+ references: Array [
+ Reference$2 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$3 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$4 {
+ defs: Array [
+ ParameterDefinition$2 {
+ name: Identifier<"param">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "param",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$5 {
+ defs: Array [
+ ClassNameDefinition$3 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [
+ Reference$1 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: false,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$3 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$6 {
+ defs: Array [
+ ClassNameDefinition$4 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$7 {
+ defs: Array [
+ ClassNameDefinition$5 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$8 {
+ defs: Array [
+ ClassNameDefinition$6 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$9 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$10 {
+ defs: Array [
+ ParameterDefinition$7 {
+ name: Identifier<"foo">,
+ node: FunctionExpression$4,
+ },
+ ],
+ name: "foo",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$11 {
+ defs: Array [
+ ClassNameDefinition$8 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$12 {
+ defs: Array [
+ ClassNameDefinition$9 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$13 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$14 {
+ defs: Array [
+ ParameterDefinition$10 {
+ name: Identifier<"bar">,
+ node: FunctionExpression$6,
+ },
+ ],
+ name: "bar",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ ],
+ scopes: Array [
+ GlobalScope$1 {
+ block: Program$7,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "const" => ImplicitGlobalConstTypeVariable,
+ "deco" => Variable$2,
+ "T" => Variable$5,
+ "A" => Variable$7,
+ },
+ type: "global",
+ upper: null,
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2,
+ Variable$5,
+ Variable$7,
+ ],
+ },
+ FunctionScope$2 {
+ block: FunctionDeclaration$1,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$3,
+ "param" => Variable$4,
+ },
+ type: "function",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$3,
+ Variable$4,
+ ],
+ },
+ ClassScope$3 {
+ block: ClassDeclaration$2,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "T" => Variable$6,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$6,
+ ],
+ },
+ ClassScope$4 {
+ block: ClassDeclaration$3,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "A" => Variable$8,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$8,
+ ],
+ },
+ FunctionScope$5 {
+ block: FunctionExpression$4,
+ isStrict: true,
+ references: Array [
+ Reference$1,
+ Reference$2,
+ ],
+ set: Map {
+ "arguments" => Variable$9,
+ "foo" => Variable$10,
+ "B" => Variable$11,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$9,
+ Variable$10,
+ Variable$11,
+ ],
+ },
+ ClassScope$6 {
+ block: ClassDeclaration$5,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "B" => Variable$12,
+ },
+ type: "class",
+ upper: FunctionScope$5,
+ variables: Array [
+ Variable$12,
+ ],
+ },
+ FunctionScope$7 {
+ block: FunctionExpression$6,
+ isStrict: true,
+ references: Array [
+ Reference$3,
+ ],
+ set: Map {
+ "arguments" => Variable$13,
+ "bar" => Variable$14,
+ },
+ type: "function",
+ upper: ClassScope$6,
+ variables: Array [
+ Variable$13,
+ Variable$14,
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-outer.ts b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-outer.ts
new file mode 100644
index 000000000000..2f5247067bf1
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-outer.ts
@@ -0,0 +1,14 @@
+//// @emitDecoratorMetadata = true
+
+function deco(...param: any) {}
+
+class T {}
+
+@deco
+class A {
+ constructor(foo: T) {
+ class B {
+ constructor(bar: T) {}
+ }
+ }
+}
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-outer.ts.shot b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-outer.ts.shot
new file mode 100644
index 000000000000..5db83db9116b
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/nested-class-outer.ts.shot
@@ -0,0 +1,289 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`class emit-metadata nested-class-outer 1`] = `
+ScopeManager {
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2 {
+ defs: Array [
+ FunctionNameDefinition$1 {
+ name: Identifier<"deco">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "deco",
+ references: Array [
+ Reference$1 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$3 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$4 {
+ defs: Array [
+ ParameterDefinition$2 {
+ name: Identifier<"param">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "param",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$5 {
+ defs: Array [
+ ClassNameDefinition$3 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [
+ Reference$2 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$3 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: false,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$6 {
+ defs: Array [
+ ClassNameDefinition$4 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$7 {
+ defs: Array [
+ ClassNameDefinition$5 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$8 {
+ defs: Array [
+ ClassNameDefinition$6 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$9 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$10 {
+ defs: Array [
+ ParameterDefinition$7 {
+ name: Identifier<"foo">,
+ node: FunctionExpression$4,
+ },
+ ],
+ name: "foo",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$11 {
+ defs: Array [
+ ClassNameDefinition$8 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$12 {
+ defs: Array [
+ ClassNameDefinition$9 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$5,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$13 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$14 {
+ defs: Array [
+ ParameterDefinition$10 {
+ name: Identifier<"bar">,
+ node: FunctionExpression$6,
+ },
+ ],
+ name: "bar",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ ],
+ scopes: Array [
+ GlobalScope$1 {
+ block: Program$7,
+ isStrict: false,
+ references: Array [
+ Reference$1,
+ ],
+ set: Map {
+ "const" => ImplicitGlobalConstTypeVariable,
+ "deco" => Variable$2,
+ "T" => Variable$5,
+ "A" => Variable$7,
+ },
+ type: "global",
+ upper: null,
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2,
+ Variable$5,
+ Variable$7,
+ ],
+ },
+ FunctionScope$2 {
+ block: FunctionDeclaration$1,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$3,
+ "param" => Variable$4,
+ },
+ type: "function",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$3,
+ Variable$4,
+ ],
+ },
+ ClassScope$3 {
+ block: ClassDeclaration$2,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "T" => Variable$6,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$6,
+ ],
+ },
+ ClassScope$4 {
+ block: ClassDeclaration$3,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "A" => Variable$8,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$8,
+ ],
+ },
+ FunctionScope$5 {
+ block: FunctionExpression$4,
+ isStrict: true,
+ references: Array [
+ Reference$2,
+ ],
+ set: Map {
+ "arguments" => Variable$9,
+ "foo" => Variable$10,
+ "B" => Variable$11,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$9,
+ Variable$10,
+ Variable$11,
+ ],
+ },
+ ClassScope$6 {
+ block: ClassDeclaration$5,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "B" => Variable$12,
+ },
+ type: "class",
+ upper: FunctionScope$5,
+ variables: Array [
+ Variable$12,
+ ],
+ },
+ FunctionScope$7 {
+ block: FunctionExpression$6,
+ isStrict: true,
+ references: Array [
+ Reference$3,
+ ],
+ set: Map {
+ "arguments" => Variable$13,
+ "bar" => Variable$14,
+ },
+ type: "function",
+ upper: ClassScope$6,
+ variables: Array [
+ Variable$13,
+ Variable$14,
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/parameters-deco.ts b/packages/scope-manager/tests/fixtures/class/emit-metadata/parameters-deco.ts
new file mode 100644
index 000000000000..fc0eb3c0525f
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/parameters-deco.ts
@@ -0,0 +1,14 @@
+//// @emitDecoratorMetadata = true
+
+function deco(...param: any) {}
+
+class T {}
+
+@deco
+class A {
+ constructor(@deco foo: T) {}
+
+ set foo(@deco a: T) {}
+
+ foo1(@deco a: T, b: T) {}
+}
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/parameters-deco.ts.shot b/packages/scope-manager/tests/fixtures/class/emit-metadata/parameters-deco.ts.shot
new file mode 100644
index 000000000000..ac1f8b41de5e
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/parameters-deco.ts.shot
@@ -0,0 +1,344 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`class emit-metadata parameters-deco 1`] = `
+ScopeManager {
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2 {
+ defs: Array [
+ FunctionNameDefinition$1 {
+ name: Identifier<"deco">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "deco",
+ references: Array [
+ Reference$1 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ Reference$3 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ Reference$5 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ Reference$7 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$3 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$4 {
+ defs: Array [
+ ParameterDefinition$2 {
+ name: Identifier<"param">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "param",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$5 {
+ defs: Array [
+ ClassNameDefinition$3 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [
+ Reference$2 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$4 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: false,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$6 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$8 {
+ identifier: Identifier<"T">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$6 {
+ defs: Array [
+ ClassNameDefinition$4 {
+ name: Identifier<"T">,
+ node: ClassDeclaration$2,
+ },
+ ],
+ name: "T",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$7 {
+ defs: Array [
+ ClassNameDefinition$5 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$8 {
+ defs: Array [
+ ClassNameDefinition$6 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$9 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$10 {
+ defs: Array [
+ ParameterDefinition$7 {
+ name: Identifier<"foo">,
+ node: FunctionExpression$4,
+ },
+ ],
+ name: "foo",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$11 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$12 {
+ defs: Array [
+ ParameterDefinition$8 {
+ name: Identifier<"a">,
+ node: FunctionExpression$5,
+ },
+ ],
+ name: "a",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$13 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$14 {
+ defs: Array [
+ ParameterDefinition$9 {
+ name: Identifier<"a">,
+ node: FunctionExpression$6,
+ },
+ ],
+ name: "a",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$15 {
+ defs: Array [
+ ParameterDefinition$10 {
+ name: Identifier<"b">,
+ node: FunctionExpression$6,
+ },
+ ],
+ name: "b",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ ],
+ scopes: Array [
+ GlobalScope$1 {
+ block: Program$7,
+ isStrict: false,
+ references: Array [
+ Reference$1,
+ ],
+ set: Map {
+ "const" => ImplicitGlobalConstTypeVariable,
+ "deco" => Variable$2,
+ "T" => Variable$5,
+ "A" => Variable$7,
+ },
+ type: "global",
+ upper: null,
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2,
+ Variable$5,
+ Variable$7,
+ ],
+ },
+ FunctionScope$2 {
+ block: FunctionDeclaration$1,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$3,
+ "param" => Variable$4,
+ },
+ type: "function",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$3,
+ Variable$4,
+ ],
+ },
+ ClassScope$3 {
+ block: ClassDeclaration$2,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "T" => Variable$6,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$6,
+ ],
+ },
+ ClassScope$4 {
+ block: ClassDeclaration$3,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "A" => Variable$8,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$8,
+ ],
+ },
+ FunctionScope$5 {
+ block: FunctionExpression$4,
+ isStrict: true,
+ references: Array [
+ Reference$2,
+ Reference$3,
+ ],
+ set: Map {
+ "arguments" => Variable$9,
+ "foo" => Variable$10,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$9,
+ Variable$10,
+ ],
+ },
+ FunctionScope$6 {
+ block: FunctionExpression$5,
+ isStrict: true,
+ references: Array [
+ Reference$4,
+ Reference$5,
+ ],
+ set: Map {
+ "arguments" => Variable$11,
+ "a" => Variable$12,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$11,
+ Variable$12,
+ ],
+ },
+ FunctionScope$7 {
+ block: FunctionExpression$6,
+ isStrict: true,
+ references: Array [
+ Reference$6,
+ Reference$7,
+ Reference$8,
+ ],
+ set: Map {
+ "arguments" => Variable$13,
+ "a" => Variable$14,
+ "b" => Variable$15,
+ },
+ type: "function",
+ upper: ClassScope$4,
+ variables: Array [
+ Variable$13,
+ Variable$14,
+ Variable$15,
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/property-deco.ts b/packages/scope-manager/tests/fixtures/class/emit-metadata/property-deco.ts
new file mode 100644
index 000000000000..a4c17dcaa5d1
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/property-deco.ts
@@ -0,0 +1,13 @@
+//// @emitDecoratorMetadata = true
+
+function deco(...param: any) {}
+
+namespace a {
+ export class B {}
+}
+
+class A {
+ property: a.B;
+ @deco
+ propertyWithDeco: a.B;
+}
diff --git a/packages/scope-manager/tests/fixtures/class/emit-metadata/property-deco.ts.shot b/packages/scope-manager/tests/fixtures/class/emit-metadata/property-deco.ts.shot
new file mode 100644
index 000000000000..348c6009163d
--- /dev/null
+++ b/packages/scope-manager/tests/fixtures/class/emit-metadata/property-deco.ts.shot
@@ -0,0 +1,205 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`class emit-metadata property-deco 1`] = `
+ScopeManager {
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2 {
+ defs: Array [
+ FunctionNameDefinition$1 {
+ name: Identifier<"deco">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "deco",
+ references: Array [
+ Reference$2 {
+ identifier: Identifier<"deco">,
+ isRead: true,
+ isTypeReference: false,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$2,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$3 {
+ defs: Array [],
+ name: "arguments",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$4 {
+ defs: Array [
+ ParameterDefinition$2 {
+ name: Identifier<"param">,
+ node: FunctionDeclaration$1,
+ },
+ ],
+ name: "param",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: false,
+ },
+ Variable$5 {
+ defs: Array [
+ TSModuleNameDefinition$3 {
+ name: Identifier<"a">,
+ node: TSModuleDeclaration$2,
+ },
+ ],
+ name: "a",
+ references: Array [
+ Reference$1 {
+ identifier: Identifier<"a">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: false,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ Reference$3 {
+ identifier: Identifier<"a">,
+ isRead: true,
+ isTypeReference: true,
+ isValueReference: true,
+ isWrite: false,
+ resolved: Variable$5,
+ },
+ ],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$6 {
+ defs: Array [
+ ClassNameDefinition$4 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$7 {
+ defs: Array [
+ ClassNameDefinition$5 {
+ name: Identifier<"B">,
+ node: ClassDeclaration$3,
+ },
+ ],
+ name: "B",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$8 {
+ defs: Array [
+ ClassNameDefinition$6 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$4,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ Variable$9 {
+ defs: Array [
+ ClassNameDefinition$7 {
+ name: Identifier<"A">,
+ node: ClassDeclaration$4,
+ },
+ ],
+ name: "A",
+ references: Array [],
+ isValueVariable: true,
+ isTypeVariable: true,
+ },
+ ],
+ scopes: Array [
+ GlobalScope$1 {
+ block: Program$5,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "const" => ImplicitGlobalConstTypeVariable,
+ "deco" => Variable$2,
+ "a" => Variable$5,
+ "A" => Variable$8,
+ },
+ type: "global",
+ upper: null,
+ variables: Array [
+ ImplicitGlobalConstTypeVariable,
+ Variable$2,
+ Variable$5,
+ Variable$8,
+ ],
+ },
+ FunctionScope$2 {
+ block: FunctionDeclaration$1,
+ isStrict: false,
+ references: Array [],
+ set: Map {
+ "arguments" => Variable$3,
+ "param" => Variable$4,
+ },
+ type: "function",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$3,
+ Variable$4,
+ ],
+ },
+ TSModuleScope$3 {
+ block: TSModuleDeclaration$2,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "B" => Variable$6,
+ },
+ type: "tsModule",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$6,
+ ],
+ },
+ ClassScope$4 {
+ block: ClassDeclaration$3,
+ isStrict: true,
+ references: Array [],
+ set: Map {
+ "B" => Variable$7,
+ },
+ type: "class",
+ upper: TSModuleScope$3,
+ variables: Array [
+ Variable$7,
+ ],
+ },
+ ClassScope$5 {
+ block: ClassDeclaration$4,
+ isStrict: true,
+ references: Array [
+ Reference$1,
+ Reference$2,
+ Reference$3,
+ ],
+ set: Map {
+ "A" => Variable$9,
+ },
+ type: "class",
+ upper: GlobalScope$1,
+ variables: Array [
+ Variable$9,
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/shared-fixtures/CHANGELOG.md b/packages/shared-fixtures/CHANGELOG.md
index 1d199cd813b1..a5372be7f103 100644
--- a/packages/shared-fixtures/CHANGELOG.md
+++ b/packages/shared-fixtures/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.13.0...v4.14.0) (2021-01-18)
+
+**Note:** Version bump only for package @typescript-eslint/shared-fixtures
+
+
+
+
+
# [4.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.12.0...v4.13.0) (2021-01-11)
**Note:** Version bump only for package @typescript-eslint/shared-fixtures
diff --git a/packages/shared-fixtures/package.json b/packages/shared-fixtures/package.json
index ca4814529850..726da455b4c3 100644
--- a/packages/shared-fixtures/package.json
+++ b/packages/shared-fixtures/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/shared-fixtures",
- "version": "4.13.0",
+ "version": "4.14.0",
"private": true,
"scripts": {
"build": "tsc -b tsconfig.build.json",
diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md
index b79e2c221f29..e40692d8614f 100644
--- a/packages/types/CHANGELOG.md
+++ b/packages/types/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.13.0...v4.14.0) (2021-01-18)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
# [4.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.12.0...v4.13.0) (2021-01-11)
**Note:** Version bump only for package @typescript-eslint/types
diff --git a/packages/types/package.json b/packages/types/package.json
index 326f50624515..dc575b3be566 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/types",
- "version": "4.13.0",
+ "version": "4.14.0",
"description": "Types for the TypeScript-ESTree AST spec",
"keywords": [
"eslint",
diff --git a/packages/typescript-estree/CHANGELOG.md b/packages/typescript-estree/CHANGELOG.md
index d57dd5006ea7..87064eac93b7 100644
--- a/packages/typescript-estree/CHANGELOG.md
+++ b/packages/typescript-estree/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.13.0...v4.14.0) (2021-01-18)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
# [4.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.12.0...v4.13.0) (2021-01-11)
**Note:** Version bump only for package @typescript-eslint/typescript-estree
diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json
index e773e01c2400..cbfc388b5f42 100644
--- a/packages/typescript-estree/package.json
+++ b/packages/typescript-estree/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/typescript-estree",
- "version": "4.13.0",
+ "version": "4.14.0",
"description": "A parser that converts TypeScript source code into an ESTree compatible form",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -41,8 +41,8 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "4.13.0",
- "@typescript-eslint/visitor-keys": "4.13.0",
+ "@typescript-eslint/types": "4.14.0",
+ "@typescript-eslint/visitor-keys": "4.14.0",
"debug": "^4.1.1",
"globby": "^11.0.1",
"is-glob": "^4.0.1",
@@ -61,7 +61,7 @@
"@types/lodash": "*",
"@types/semver": "^7.1.0",
"@types/tmp": "^0.2.0",
- "@typescript-eslint/shared-fixtures": "4.13.0",
+ "@typescript-eslint/shared-fixtures": "4.14.0",
"glob": "*",
"jest-specific-snapshot": "*",
"make-dir": "*",
diff --git a/packages/visitor-keys/CHANGELOG.md b/packages/visitor-keys/CHANGELOG.md
index b5fc6e7eaa44..c0cbad34c318 100644
--- a/packages/visitor-keys/CHANGELOG.md
+++ b/packages/visitor-keys/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.14.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.13.0...v4.14.0) (2021-01-18)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
# [4.13.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.12.0...v4.13.0) (2021-01-11)
**Note:** Version bump only for package @typescript-eslint/visitor-keys
diff --git a/packages/visitor-keys/package.json b/packages/visitor-keys/package.json
index a317676556fb..4774308be6a3 100644
--- a/packages/visitor-keys/package.json
+++ b/packages/visitor-keys/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/visitor-keys",
- "version": "4.13.0",
+ "version": "4.14.0",
"description": "Visitor keys used to help traverse the TypeScript-ESTree AST",
"keywords": [
"eslint",
@@ -38,7 +38,7 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "4.13.0",
+ "@typescript-eslint/types": "4.14.0",
"eslint-visitor-keys": "^2.0.0"
},
"devDependencies": {
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy