diff --git a/src/css/Stylesheet.ts b/src/css/Stylesheet.ts index 6254795697..200e73f582 100644 --- a/src/css/Stylesheet.ts +++ b/src/css/Stylesheet.ts @@ -25,12 +25,13 @@ class Rule { this.selectors.forEach(selector => selector.apply(node, stack)); // TODO move the logic in here? } - isUsed() { + isUsed(dev: boolean) { if (this.parent && this.parent.node.type === 'Atrule' && this.parent.node.name === 'keyframes') return true; + if (this.declarations.length === 0) return dev; return this.selectors.some(s => s.used); } - minify(code: MagicString, cascade: boolean) { + minify(code: MagicString, cascade: boolean, dev: boolean) { let c = this.node.start; let started = false; @@ -177,11 +178,11 @@ class Atrule { } } - isUsed() { + isUsed(dev: boolean) { return true; // TODO } - minify(code: MagicString, cascade: boolean) { + minify(code: MagicString, cascade: boolean, dev: boolean) { if (this.node.name === 'media') { const expressionChar = code.original[this.node.expression.start]; let c = this.node.start + (expressionChar === '(' ? 6 : 7); @@ -206,9 +207,9 @@ class Atrule { let c = this.node.block.start + 1; this.children.forEach(child => { - if (cascade || child.isUsed()) { + if (cascade || child.isUsed(dev)) { code.remove(c, child.node.start); - child.minify(code, cascade); + child.minify(code, cascade, dev); c = child.node.end; } }); @@ -257,6 +258,7 @@ export default class Stylesheet { parsed: Parsed; cascade: boolean; filename: string; + dev: boolean; hasStyles: boolean; id: string; @@ -264,11 +266,12 @@ export default class Stylesheet { children: (Rule|Atrule)[]; keyframes: Map; - constructor(source: string, parsed: Parsed, filename: string, cascade: boolean) { + constructor(source: string, parsed: Parsed, filename: string, cascade: boolean, dev: boolean) { this.source = source; this.parsed = parsed; this.cascade = cascade; this.filename = filename; + this.dev = dev; this.children = []; this.keyframes = new Map(); @@ -374,9 +377,9 @@ export default class Stylesheet { let c = 0; this.children.forEach(child => { - if (this.cascade || child.isUsed()) { + if (this.cascade || child.isUsed(this.dev)) { code.remove(c, child.node.start); - child.minify(code, this.cascade); + child.minify(code, this.cascade, this.dev); c = child.node.end; } }); diff --git a/src/index.ts b/src/index.ts index 1caf5b5abc..be62f07763 100644 --- a/src/index.ts +++ b/src/index.ts @@ -116,7 +116,7 @@ export function compile(source: string, _options: CompileOptions) { return; } - const stylesheet = new Stylesheet(source, parsed, options.filename, options.cascade !== false); + const stylesheet = new Stylesheet(source, parsed, options.filename, options.cascade !== false, options.dev); validate(parsed, source, stylesheet, options); diff --git a/test/css/samples/cascade-false-empty-rule-dev/_config.js b/test/css/samples/cascade-false-empty-rule-dev/_config.js new file mode 100644 index 0000000000..8b2e3aa341 --- /dev/null +++ b/test/css/samples/cascade-false-empty-rule-dev/_config.js @@ -0,0 +1,4 @@ +export default { + cascade: false, + dev: true +}; \ No newline at end of file diff --git a/test/css/samples/cascade-false-empty-rule-dev/expected.css b/test/css/samples/cascade-false-empty-rule-dev/expected.css new file mode 100644 index 0000000000..5e2b654711 --- /dev/null +++ b/test/css/samples/cascade-false-empty-rule-dev/expected.css @@ -0,0 +1 @@ +.foo[svelte-xyz]{} \ No newline at end of file diff --git a/test/css/samples/cascade-false-empty-rule-dev/input.html b/test/css/samples/cascade-false-empty-rule-dev/input.html new file mode 100644 index 0000000000..ac2e43dceb --- /dev/null +++ b/test/css/samples/cascade-false-empty-rule-dev/input.html @@ -0,0 +1,7 @@ +
+ + \ No newline at end of file diff --git a/test/css/samples/cascade-false-empty-rule/_config.js b/test/css/samples/cascade-false-empty-rule/_config.js new file mode 100644 index 0000000000..b37866f9b6 --- /dev/null +++ b/test/css/samples/cascade-false-empty-rule/_config.js @@ -0,0 +1,3 @@ +export default { + cascade: false +}; \ No newline at end of file diff --git a/test/css/samples/cascade-false-empty-rule/expected.css b/test/css/samples/cascade-false-empty-rule/expected.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/css/samples/cascade-false-empty-rule/input.html b/test/css/samples/cascade-false-empty-rule/input.html new file mode 100644 index 0000000000..ac2e43dceb --- /dev/null +++ b/test/css/samples/cascade-false-empty-rule/input.html @@ -0,0 +1,7 @@ +
+ + \ No newline at end of file