From 71f9940f1744c0424e642fe5265b5a99308e74d9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 25 Aug 2017 17:40:35 -0400 Subject: [PATCH] remove leading selectors safely - fixes #783 --- src/css/Stylesheet.ts | 6 ++- .../unused-selector-leading/_config.js | 39 +++++++++++++++++++ .../unused-selector-leading/expected.css | 1 + .../unused-selector-leading/expected.html | 1 + .../unused-selector-leading/input.html | 7 ++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 test/css/samples/unused-selector-leading/_config.js create mode 100644 test/css/samples/unused-selector-leading/expected.css create mode 100644 test/css/samples/unused-selector-leading/expected.html create mode 100644 test/css/samples/unused-selector-leading/input.html diff --git a/src/css/Stylesheet.ts b/src/css/Stylesheet.ts index d0e8612a93..81a2c841bf 100644 --- a/src/css/Stylesheet.ts +++ b/src/css/Stylesheet.ts @@ -30,15 +30,19 @@ class Rule { minify(code: MagicString, cascade: boolean) { let c = this.node.start; + let started = false; + this.selectors.forEach((selector, i) => { if (cascade || selector.used) { - const separator = i > 0 ? ',' : ''; + const separator = started ? ',' : ''; if ((selector.node.start - c) > separator.length) { code.overwrite(c, selector.node.start, separator); } if (!cascade) selector.minify(code); c = selector.node.end; + + started = true; } }); diff --git a/test/css/samples/unused-selector-leading/_config.js b/test/css/samples/unused-selector-leading/_config.js new file mode 100644 index 0000000000..a5ae65ffa2 --- /dev/null +++ b/test/css/samples/unused-selector-leading/_config.js @@ -0,0 +1,39 @@ +export default { + cascade: false, + + warnings: [ + { + filename: "SvelteComponent.html", + message: "Unused CSS selector", + loc: { + line: 4, + column: 1 + }, + pos: 34, + frame: ` + 2: + 3: \ No newline at end of file