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 {
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
}))
};
}

@ -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
});
}
});

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

@ -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
});

@ -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
});

@ -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
});

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

@ -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;
}

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

@ -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, []);
},
};

@ -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
}
]);
}

@ -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
}
]);
}

@ -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
}
]);
}

@ -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
}
]);
}

@ -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, []);
},
};

Loading…
Cancel
Save