tweak stats.vars properties

pull/2011/head
Richard Harris 7 years ago
parent fc331708dd
commit 2431780851

@ -99,15 +99,15 @@ export default class Stats {
return { return {
timings, timings,
warnings: this.warnings, 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, name: variable.name,
kind: variable.kind,
import_name: variable.import_name || null,
export_name: variable.export_name || null, export_name: variable.export_name || null,
source: variable.source || null, injected: variable.injected || false,
module: variable.module || false, module: variable.module || false,
mutated: variable.mutated || false, mutated: variable.mutated || false,
referenced: variable.referenced || false reassigned: variable.reassigned || false,
referenced: variable.referenced || false,
writable: variable.writable || false
})) }))
}; };
} }

@ -158,16 +158,19 @@ export default class Component {
} else if (name[0] === '$') { } else if (name[0] === '$') {
this.add_var({ this.add_var({
name, name,
kind: 'injected', injected: true,
referenced: true, referenced: true,
mutated: true mutated: true,
writable: true
}); });
this.add_reference(name.slice(1));
} else if (!this.ast.instance) { } else if (!this.ast.instance) {
this.add_var({ this.add_var({
name, name,
export_name: name, export_name: name,
kind: 'implicit', implicit: true,
mutated: true, mutated: false,
referenced: true, referenced: true,
writable: 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({ this.add_var({
name: specifier.local.name, name: specifier.local.name,
kind: 'import',
import_name,
source: node.source.value,
module: is_module, module: is_module,
hoistable: true hoistable: true
}); });
@ -546,7 +540,6 @@ export default class Component {
this.add_var({ this.add_var({
name, name,
kind,
module: true, module: true,
hoistable: true hoistable: true
}); });
@ -591,7 +584,6 @@ export default class Component {
this.add_var({ this.add_var({
name, name,
kind,
initialised: instance_scope.initialised_declarations.has(name), initialised: instance_scope.initialised_declarations.has(name),
writable: kind === 'var' || kind === 'let' writable: kind === 'var' || kind === 'let'
}); });
@ -606,13 +598,16 @@ export default class Component {
if (name[0] === '$') { if (name[0] === '$') {
this.add_var({ this.add_var({
name, name,
kind: 'injected', injected: true,
mutated: true mutated: true,
writable: true
}); });
this.add_reference(name.slice(1));
} else { } else {
this.add_var({ this.add_var({
name, name,
kind: 'global' global: true
}); });
} }
}); });

@ -44,7 +44,7 @@ export default class EventHandler extends Node {
component.add_var({ component.add_var({
name, name,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });

@ -195,7 +195,10 @@ export default class Expression {
if (this.template_scope.is_let(name)) return true; if (this.template_scope.is_let(name)) return true;
const variable = this.component.var_lookup.get(name); 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({ component.add_var({
name, name,
kind: 'injected', injected: true,
hoistable: true, hoistable: true,
referenced: true referenced: true
}); });
@ -391,7 +394,7 @@ export default class Expression {
component.add_var({ component.add_var({
name, name,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });
} }
@ -403,7 +406,7 @@ export default class Expression {
component.add_var({ component.add_var({
name, name,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });

@ -408,7 +408,7 @@ export default class ElementWrapper extends Wrapper {
renderer.component.add_var({ renderer.component.add_var({
name: handler, name: handler,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });
@ -513,7 +513,7 @@ export default class ElementWrapper extends Wrapper {
renderer.component.add_var({ renderer.component.add_var({
name, name,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });

@ -241,7 +241,7 @@ export default class InlineComponentWrapper extends Wrapper {
component.add_var({ component.add_var({
name: fn, name: fn,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });
@ -276,7 +276,7 @@ export default class InlineComponentWrapper extends Wrapper {
component.add_var({ component.add_var({
name, name,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });

@ -120,7 +120,7 @@ export default class WindowWrapper extends Wrapper {
component.add_var({ component.add_var({
name: handler_name, name: handler_name,
kind: 'injected', injected: true,
referenced: true referenced: true
}); });

@ -81,14 +81,17 @@ export interface AppendTarget {
export interface Var { export interface Var {
name: string; 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 }` export_name?: string; // the `bar` in `export { foo as bar }`
source?: string; injected?: boolean;
module?: boolean; module?: boolean;
mutated?: boolean; mutated?: boolean;
reassigned?: boolean;
referenced?: boolean; referenced?: boolean;
writable?: boolean; writable?: boolean;
// used internally, but not exposed
global?: boolean;
implicit?: boolean;
initialised?: boolean; initialised?: boolean;
hoistable?: boolean; hoistable?: boolean;
} }

@ -0,0 +1,5 @@
export default {
test(assert, stats) {
assert.deepEqual(stats.vars, []);
},
};

@ -1,16 +1,5 @@
export default { export default {
test(assert, stats) { test(assert, stats) {
assert.deepEqual(stats.vars, [ assert.deepEqual(stats.vars, []);
{
name: 'foo',
kind: 'implicit',
import_name: null,
export_name: 'foo',
source: null,
referenced: true,
module: false,
mutated: true
}
]);
}, },
}; };

@ -3,33 +3,33 @@ export default {
assert.deepEqual(stats.vars, [ assert.deepEqual(stats.vars, [
{ {
name: 'x', name: 'x',
kind: 'import',
import_name: 'default',
export_name: null, export_name: null,
source: 'x', injected: false,
module: false, module: false,
mutated: false, mutated: false,
referenced: false reassigned: false,
referenced: false,
writable: false
}, },
{ {
name: 'y', name: 'y',
kind: 'import',
import_name: 'y',
export_name: null, export_name: null,
source: 'y', injected: false,
module: false, module: false,
mutated: false, mutated: false,
referenced: false reassigned: false,
referenced: false,
writable: false
}, },
{ {
name: 'z', name: 'z',
kind: 'import',
import_name: '*',
export_name: null, export_name: null,
source: 'z', injected: false,
module: false, module: false,
mutated: false, mutated: false,
referenced: false reassigned: false,
referenced: false,
writable: false
} }
]); ]);
} }

@ -3,43 +3,43 @@ export default {
assert.deepEqual(stats.vars, [ assert.deepEqual(stats.vars, [
{ {
name: 'name', name: 'name',
kind: 'let',
import_name: null,
export_name: 'name', export_name: 'name',
source: null, injected: false,
module: false, module: false,
mutated: true, mutated: true,
referenced: true reassigned: false,
referenced: true,
writable: true
}, },
{ {
name: 'cats', name: 'cats',
kind: 'let',
import_name: null,
export_name: 'cats', export_name: 'cats',
source: null, injected: false,
module: false, module: false,
mutated: true, mutated: true,
referenced: true reassigned: false,
referenced: true,
writable: true
}, },
{ {
name: 'foo', name: 'foo',
kind: 'let',
import_name: null,
export_name: null, export_name: null,
source: null, injected: false,
module: false, module: false,
mutated: false, mutated: false,
referenced: false reassigned: false,
referenced: false,
writable: true
}, },
{ {
name: 'bar', name: 'bar',
kind: 'let',
import_name: null,
export_name: null, export_name: null,
source: null, injected: false,
module: false, module: false,
mutated: true, mutated: true,
referenced: true reassigned: false,
referenced: true,
writable: true
} }
]); ]);
} }

@ -3,23 +3,23 @@ export default {
assert.deepEqual(stats.vars, [ assert.deepEqual(stats.vars, [
{ {
name: 'foo', name: 'foo',
kind: 'let',
import_name: null,
export_name: null, export_name: null,
source: null, injected: false,
module: false, module: false,
mutated: false, mutated: false,
referenced: false reassigned: false,
referenced: true,
writable: true
}, },
{ {
name: '$foo', name: '$foo',
kind: 'injected',
import_name: null,
export_name: null, export_name: null,
source: null, injected: true,
module: false, module: false,
mutated: true, mutated: true,
referenced: true reassigned: false,
referenced: true,
writable: true
} }
]); ]);
} }

@ -3,23 +3,23 @@ export default {
assert.deepEqual(stats.vars, [ assert.deepEqual(stats.vars, [
{ {
name: 'foo', name: 'foo',
kind: 'let',
import_name: null,
export_name: null, export_name: null,
source: null, injected: false,
module: false, module: false,
mutated: false, mutated: false,
referenced: false reassigned: false,
referenced: true,
writable: true
}, },
{ {
name: '$foo', name: '$foo',
kind: 'injected',
import_name: null,
export_name: null, export_name: null,
source: null, injected: true,
module: false, module: false,
mutated: true, mutated: true,
referenced: false reassigned: false,
referenced: false,
writable: true
} }
]); ]);
} }

@ -1,36 +1,5 @@
export default { export default {
test(assert, stats) { test(assert, stats) {
assert.deepEqual(stats.vars, [ 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
}
]);
}, },
}; };

Loading…
Cancel
Save