From 7053ea3bfd726cbe880b4062072cf840d36705d5 Mon Sep 17 00:00:00 2001 From: Maxime LUCE Date: Sun, 11 Apr 2021 20:10:06 +0200 Subject: [PATCH] feat: add compilation variables report option --- src/compiler/compile/Component.ts | 47 +++++++++++++++++++++---------- src/compiler/compile/index.ts | 1 + src/compiler/interfaces.ts | 1 + 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/compiler/compile/Component.ts b/src/compiler/compile/Component.ts index 155b64778b..e3738a8dba 100644 --- a/src/compiler/compile/Component.ts +++ b/src/compiler/compile/Component.ts @@ -183,9 +183,12 @@ export default class Component { this.stylesheet.warn_on_unused_selectors(this); } - add_var(variable: Var) { + add_var(variable: Var, add_to_lookup = true) { this.vars.push(variable); - this.var_lookup.set(variable.name, variable); + + if (add_to_lookup) { + this.var_lookup.set(variable.name, variable); + } } add_reference(name: string) { @@ -216,6 +219,10 @@ export default class Component { variable.subscribable = true; } } else { + if (this.compile_options.varsReport === 'full') { + this.add_var({ name, referenced: true }, false); + } + this.used_names.add(name); } } @@ -340,19 +347,7 @@ export default class Component { css, ast: this.original_ast, warnings: this.warnings, - vars: this.vars - .filter(v => !v.global && !v.internal) - .map(v => ({ - name: v.name, - export_name: v.export_name || null, - injected: v.injected || false, - module: v.module || false, - mutated: v.mutated || false, - reassigned: v.reassigned || false, - referenced: v.referenced || false, - writable: v.writable || false, - referenced_from_script: v.referenced_from_script || false - })), + vars: this.get_vars_report(), stats: this.stats.render() }; } @@ -402,6 +397,28 @@ export default class Component { }; } + get_vars_report(): Var[] { + const { compile_options, vars } = this; + + const vars_report = compile_options.varsReport === false + ? [] + : compile_options.varsReport === 'full' + ? vars + : vars.filter(v => !v.global && !v.internal); + + return vars_report.map(v => ({ + name: v.name, + export_name: v.export_name || null, + injected: v.injected || false, + module: v.module || false, + mutated: v.mutated || false, + reassigned: v.reassigned || false, + referenced: v.referenced || false, + writable: v.writable || false, + referenced_from_script: v.referenced_from_script || false + })); + } + error( pos: { start: number; diff --git a/src/compiler/compile/index.ts b/src/compiler/compile/index.ts index c9b594dbe3..e40ff37e92 100644 --- a/src/compiler/compile/index.ts +++ b/src/compiler/compile/index.ts @@ -14,6 +14,7 @@ const valid_options = [ 'filename', 'sourcemap', 'generate', + 'varsReport', 'outputFilename', 'cssOutputFilename', 'sveltePath', diff --git a/src/compiler/interfaces.ts b/src/compiler/interfaces.ts index a34f932a93..ce585b5b78 100644 --- a/src/compiler/interfaces.ts +++ b/src/compiler/interfaces.ts @@ -116,6 +116,7 @@ export interface CompileOptions { name?: string; filename?: string; generate?: 'dom' | 'ssr' | false; + varsReport?: 'full' | 'strict' | false; sourcemap?: object | string; outputFilename?: string;