From 2431780851df713d73b98bac4299623f905b5cc0 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Mon, 28 Jan 2019 21:29:45 -0500 Subject: [PATCH] tweak stats.vars properties --- src/Stats.ts | 10 +++--- src/compile/Component.ts | 31 ++++++++--------- src/compile/nodes/EventHandler.ts | 2 +- src/compile/nodes/shared/Expression.ts | 11 ++++--- .../render-dom/wrappers/Element/index.ts | 4 +-- .../wrappers/InlineComponent/index.ts | 4 +-- src/compile/render-dom/wrappers/Window.ts | 2 +- src/interfaces.ts | 9 +++-- test/stats/samples/implicit-action/_config.js | 5 +++ test/stats/samples/implicit-action/input.html | 1 + test/stats/samples/implicit/_config.js | 13 +------- test/stats/samples/imports/_config.js | 24 +++++++------- test/stats/samples/props/_config.js | 32 +++++++++--------- .../stats/samples/store-referenced/_config.js | 16 ++++----- .../samples/store-unreferenced/_config.js | 16 ++++----- .../samples/template-references/_config.js | 33 +------------------ 16 files changed, 89 insertions(+), 124 deletions(-) create mode 100644 test/stats/samples/implicit-action/_config.js create mode 100644 test/stats/samples/implicit-action/input.html diff --git a/src/Stats.ts b/src/Stats.ts index 92b3f25f2a..bec51d5a2d 100644 --- a/src/Stats.ts +++ b/src/Stats.ts @@ -99,15 +99,15 @@ export default class Stats { return { timings, warnings: this.warnings, - vars: component.vars.filter(variable => variable.kind !== 'global').map(variable => ({ + vars: component.vars.filter(variable => !variable.global && !variable.implicit).map(variable => ({ name: variable.name, - kind: variable.kind, - import_name: variable.import_name || null, export_name: variable.export_name || null, - source: variable.source || null, + injected: variable.injected || false, module: variable.module || false, mutated: variable.mutated || false, - referenced: variable.referenced || false + reassigned: variable.reassigned || false, + referenced: variable.referenced || false, + writable: variable.writable || false })) }; } diff --git a/src/compile/Component.ts b/src/compile/Component.ts index a5b2325a19..e4fe24fd68 100644 --- a/src/compile/Component.ts +++ b/src/compile/Component.ts @@ -158,16 +158,19 @@ export default class Component { } else if (name[0] === '$') { this.add_var({ name, - kind: 'injected', + injected: true, referenced: true, - mutated: true + mutated: true, + writable: true }); + + this.add_reference(name.slice(1)); } else if (!this.ast.instance) { this.add_var({ name, export_name: name, - kind: 'implicit', - mutated: true, + implicit: true, + mutated: false, referenced: true, writable: true }); @@ -403,17 +406,8 @@ export default class Component { }); } - const import_name = specifier.imported - ? specifier.imported.name - : specifier.type === 'ImportDefaultSpecifier' - ? 'default' - : '*'; - this.add_var({ name: specifier.local.name, - kind: 'import', - import_name, - source: node.source.value, module: is_module, hoistable: true }); @@ -546,7 +540,6 @@ export default class Component { this.add_var({ name, - kind, module: true, hoistable: true }); @@ -591,7 +584,6 @@ export default class Component { this.add_var({ name, - kind, initialised: instance_scope.initialised_declarations.has(name), writable: kind === 'var' || kind === 'let' }); @@ -606,13 +598,16 @@ export default class Component { if (name[0] === '$') { this.add_var({ name, - kind: 'injected', - mutated: true + injected: true, + mutated: true, + writable: true }); + + this.add_reference(name.slice(1)); } else { this.add_var({ name, - kind: 'global' + global: true }); } }); diff --git a/src/compile/nodes/EventHandler.ts b/src/compile/nodes/EventHandler.ts index aa56b2653b..797442893e 100644 --- a/src/compile/nodes/EventHandler.ts +++ b/src/compile/nodes/EventHandler.ts @@ -44,7 +44,7 @@ export default class EventHandler extends Node { component.add_var({ name, - kind: 'injected', + injected: true, referenced: true }); diff --git a/src/compile/nodes/shared/Expression.ts b/src/compile/nodes/shared/Expression.ts index 9fc6bf1707..eea1235e42 100644 --- a/src/compile/nodes/shared/Expression.ts +++ b/src/compile/nodes/shared/Expression.ts @@ -195,7 +195,10 @@ export default class Expression { if (this.template_scope.is_let(name)) return true; const variable = this.component.var_lookup.get(name); - return variable && variable.mutated; + if (!variable) return false; + + if (variable.mutated || variable.reassigned) return true; // dynamic internal state + if (!variable.module && variable.writable && variable.export_name) return true; // writable props }); } @@ -378,7 +381,7 @@ export default class Expression { component.add_var({ name, - kind: 'injected', + injected: true, hoistable: true, referenced: true }); @@ -391,7 +394,7 @@ export default class Expression { component.add_var({ name, - kind: 'injected', + injected: true, referenced: true }); } @@ -403,7 +406,7 @@ export default class Expression { component.add_var({ name, - kind: 'injected', + injected: true, referenced: true }); diff --git a/src/compile/render-dom/wrappers/Element/index.ts b/src/compile/render-dom/wrappers/Element/index.ts index 53049d3b38..78ede56473 100644 --- a/src/compile/render-dom/wrappers/Element/index.ts +++ b/src/compile/render-dom/wrappers/Element/index.ts @@ -408,7 +408,7 @@ export default class ElementWrapper extends Wrapper { renderer.component.add_var({ name: handler, - kind: 'injected', + injected: true, referenced: true }); @@ -513,7 +513,7 @@ export default class ElementWrapper extends Wrapper { renderer.component.add_var({ name, - kind: 'injected', + injected: true, referenced: true }); diff --git a/src/compile/render-dom/wrappers/InlineComponent/index.ts b/src/compile/render-dom/wrappers/InlineComponent/index.ts index 309db4a329..7e2503025a 100644 --- a/src/compile/render-dom/wrappers/InlineComponent/index.ts +++ b/src/compile/render-dom/wrappers/InlineComponent/index.ts @@ -241,7 +241,7 @@ export default class InlineComponentWrapper extends Wrapper { component.add_var({ name: fn, - kind: 'injected', + injected: true, referenced: true }); @@ -276,7 +276,7 @@ export default class InlineComponentWrapper extends Wrapper { component.add_var({ name, - kind: 'injected', + injected: true, referenced: true }); diff --git a/src/compile/render-dom/wrappers/Window.ts b/src/compile/render-dom/wrappers/Window.ts index 9828af4a55..16995b23ea 100644 --- a/src/compile/render-dom/wrappers/Window.ts +++ b/src/compile/render-dom/wrappers/Window.ts @@ -120,7 +120,7 @@ export default class WindowWrapper extends Wrapper { component.add_var({ name: handler_name, - kind: 'injected', + injected: true, referenced: true }); diff --git a/src/interfaces.ts b/src/interfaces.ts index 22ec26aa09..a14cc1a58a 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -81,14 +81,17 @@ export interface AppendTarget { export interface Var { name: string; - kind: 'let' | 'var' | 'const' | 'class' | 'function' | 'import' | 'injected' | 'global' | 'implicit'; - import_name?: '*' | 'default' | string; // the `foo` in `import { foo as bar }` export_name?: string; // the `bar` in `export { foo as bar }` - source?: string; + injected?: boolean; module?: boolean; mutated?: boolean; + reassigned?: boolean; referenced?: boolean; writable?: boolean; + + // used internally, but not exposed + global?: boolean; + implicit?: boolean; initialised?: boolean; hoistable?: boolean; } \ No newline at end of file diff --git a/test/stats/samples/implicit-action/_config.js b/test/stats/samples/implicit-action/_config.js new file mode 100644 index 0000000000..71c255d54b --- /dev/null +++ b/test/stats/samples/implicit-action/_config.js @@ -0,0 +1,5 @@ +export default { + test(assert, stats) { + assert.deepEqual(stats.vars, []); + }, +}; diff --git a/test/stats/samples/implicit-action/input.html b/test/stats/samples/implicit-action/input.html new file mode 100644 index 0000000000..466495d255 --- /dev/null +++ b/test/stats/samples/implicit-action/input.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/test/stats/samples/implicit/_config.js b/test/stats/samples/implicit/_config.js index df9f74e47e..71c255d54b 100644 --- a/test/stats/samples/implicit/_config.js +++ b/test/stats/samples/implicit/_config.js @@ -1,16 +1,5 @@ export default { test(assert, stats) { - assert.deepEqual(stats.vars, [ - { - name: 'foo', - kind: 'implicit', - import_name: null, - export_name: 'foo', - source: null, - referenced: true, - module: false, - mutated: true - } - ]); + assert.deepEqual(stats.vars, []); }, }; diff --git a/test/stats/samples/imports/_config.js b/test/stats/samples/imports/_config.js index 1ba28a806d..287c5837ad 100644 --- a/test/stats/samples/imports/_config.js +++ b/test/stats/samples/imports/_config.js @@ -3,33 +3,33 @@ export default { assert.deepEqual(stats.vars, [ { name: 'x', - kind: 'import', - import_name: 'default', export_name: null, - source: 'x', + injected: false, module: false, mutated: false, - referenced: false + reassigned: false, + referenced: false, + writable: false }, { name: 'y', - kind: 'import', - import_name: 'y', export_name: null, - source: 'y', + injected: false, module: false, mutated: false, - referenced: false + reassigned: false, + referenced: false, + writable: false }, { name: 'z', - kind: 'import', - import_name: '*', export_name: null, - source: 'z', + injected: false, module: false, mutated: false, - referenced: false + reassigned: false, + referenced: false, + writable: false } ]); } diff --git a/test/stats/samples/props/_config.js b/test/stats/samples/props/_config.js index 3a9f73856f..e966c7fcfb 100644 --- a/test/stats/samples/props/_config.js +++ b/test/stats/samples/props/_config.js @@ -3,43 +3,43 @@ export default { assert.deepEqual(stats.vars, [ { name: 'name', - kind: 'let', - import_name: null, export_name: 'name', - source: null, + injected: false, module: false, mutated: true, - referenced: true + reassigned: false, + referenced: true, + writable: true }, { name: 'cats', - kind: 'let', - import_name: null, export_name: 'cats', - source: null, + injected: false, module: false, mutated: true, - referenced: true + reassigned: false, + referenced: true, + writable: true }, { name: 'foo', - kind: 'let', - import_name: null, export_name: null, - source: null, + injected: false, module: false, mutated: false, - referenced: false + reassigned: false, + referenced: false, + writable: true }, { name: 'bar', - kind: 'let', - import_name: null, export_name: null, - source: null, + injected: false, module: false, mutated: true, - referenced: true + reassigned: false, + referenced: true, + writable: true } ]); } diff --git a/test/stats/samples/store-referenced/_config.js b/test/stats/samples/store-referenced/_config.js index 828d227ab8..ecb958df1e 100644 --- a/test/stats/samples/store-referenced/_config.js +++ b/test/stats/samples/store-referenced/_config.js @@ -3,23 +3,23 @@ export default { assert.deepEqual(stats.vars, [ { name: 'foo', - kind: 'let', - import_name: null, export_name: null, - source: null, + injected: false, module: false, mutated: false, - referenced: false + reassigned: false, + referenced: true, + writable: true }, { name: '$foo', - kind: 'injected', - import_name: null, export_name: null, - source: null, + injected: true, module: false, mutated: true, - referenced: true + reassigned: false, + referenced: true, + writable: true } ]); } diff --git a/test/stats/samples/store-unreferenced/_config.js b/test/stats/samples/store-unreferenced/_config.js index 52280c13d2..9ea5784f92 100644 --- a/test/stats/samples/store-unreferenced/_config.js +++ b/test/stats/samples/store-unreferenced/_config.js @@ -3,23 +3,23 @@ export default { assert.deepEqual(stats.vars, [ { name: 'foo', - kind: 'let', - import_name: null, export_name: null, - source: null, + injected: false, module: false, mutated: false, - referenced: false + reassigned: false, + referenced: true, + writable: true }, { name: '$foo', - kind: 'injected', - import_name: null, export_name: null, - source: null, + injected: true, module: false, mutated: true, - referenced: false + reassigned: false, + referenced: false, + writable: true } ]); } diff --git a/test/stats/samples/template-references/_config.js b/test/stats/samples/template-references/_config.js index f98a40f972..71c255d54b 100644 --- a/test/stats/samples/template-references/_config.js +++ b/test/stats/samples/template-references/_config.js @@ -1,36 +1,5 @@ export default { test(assert, stats) { - assert.deepEqual(stats.vars, [ - { - name: 'foo', - kind: 'injected', - import_name: null, - export_name: 'foo', - source: null, - referenced: true, - module: false, - mutated: true - }, - { - name: 'Bar', - kind: 'injected', - import_name: null, - export_name: 'Bar', - source: null, - referenced: true, - module: false, - mutated: true - }, - { - name: 'baz', - kind: 'injected', - import_name: null, - export_name: 'baz', - source: null, - referenced: true, - module: false, - mutated: true - } - ]); + assert.deepEqual(stats.vars, []); }, };