Skip to content

Commit 87a8e37

Browse files
committed
remove cascade option
1 parent 40e6b4f commit 87a8e37

File tree

87 files changed

+33
-268
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+33
-268
lines changed

src/css/Stylesheet.ts

+14-50
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@ class Rule {
3131
return this.selectors.some(s => s.used);
3232
}
3333

34-
minify(code: MagicString, cascade: boolean, dev: boolean) {
34+
minify(code: MagicString, dev: boolean) {
3535
let c = this.node.start;
3636
let started = false;
3737

3838
this.selectors.forEach((selector, i) => {
39-
if (cascade || selector.used) {
39+
if (selector.used) {
4040
const separator = started ? ',' : '';
4141
if ((selector.node.start - c) > separator.length) {
4242
code.overwrite(c, selector.node.start, separator);
4343
}
4444

45-
if (!cascade) selector.minify(code);
45+
selector.minify(code);
4646
c = selector.node.end;
4747

4848
started = true;
@@ -66,39 +66,12 @@ class Rule {
6666
code.remove(c, this.node.block.end - 1);
6767
}
6868

69-
transform(code: MagicString, id: string, keyframes: Map<string, string>, cascade: boolean) {
69+
transform(code: MagicString, id: string, keyframes: Map<string, string>) {
7070
if (this.parent && this.parent.node.type === 'Atrule' && this.parent.node.name === 'keyframes') return true;
7171

7272
const attr = `.${id}`;
7373

74-
if (cascade) {
75-
this.selectors.forEach(selector => {
76-
// TODO disable cascading (without :global(...)) in v2
77-
const { start, end, children } = selector.node;
78-
79-
const css = code.original;
80-
const selectorString = css.slice(start, end);
81-
82-
const firstToken = children[0];
83-
84-
let transformed;
85-
86-
if (firstToken.type === 'TypeSelector') {
87-
const insert = firstToken.end;
88-
const head = firstToken.name === '*' ? '' : css.slice(start, insert);
89-
const tail = css.slice(insert, end);
90-
91-
transformed = `${head}${attr}${tail},${attr} ${selectorString}`;
92-
} else {
93-
transformed = `${attr}${selectorString},${attr} ${selectorString}`;
94-
}
95-
96-
code.overwrite(start, end, transformed);
97-
});
98-
} else {
99-
this.selectors.forEach(selector => selector.transform(code, attr));
100-
}
101-
74+
this.selectors.forEach(selector => selector.transform(code, attr));
10275
this.declarations.forEach(declaration => declaration.transform(code, keyframes));
10376
}
10477

@@ -182,7 +155,7 @@ class Atrule {
182155
return true; // TODO
183156
}
184157

185-
minify(code: MagicString, cascade: boolean, dev: boolean) {
158+
minify(code: MagicString, dev: boolean) {
186159
if (this.node.name === 'media') {
187160
const expressionChar = code.original[this.node.expression.start];
188161
let c = this.node.start + (expressionChar === '(' ? 6 : 7);
@@ -215,9 +188,9 @@ class Atrule {
215188
let c = this.node.block.start + 1;
216189

217190
this.children.forEach(child => {
218-
if (cascade || child.isUsed(dev)) {
191+
if (child.isUsed(dev)) {
219192
code.remove(c, child.node.start);
220-
child.minify(code, cascade, dev);
193+
child.minify(code, dev);
221194
c = child.node.end;
222195
}
223196
});
@@ -226,7 +199,7 @@ class Atrule {
226199
}
227200
}
228201

229-
transform(code: MagicString, id: string, keyframes: Map<string, string>, cascade: boolean) {
202+
transform(code: MagicString, id: string, keyframes: Map<string, string>) {
230203
if (this.node.name === 'keyframes') {
231204
this.node.expression.children.forEach(({ type, name, start, end }: Node) => {
232205
if (type === 'Identifier') {
@@ -240,7 +213,7 @@ class Atrule {
240213
}
241214

242215
this.children.forEach(child => {
243-
child.transform(code, id, keyframes, cascade);
216+
child.transform(code, id, keyframes);
244217
})
245218
}
246219

@@ -264,7 +237,6 @@ const keys = {};
264237
export default class Stylesheet {
265238
source: string;
266239
parsed: Parsed;
267-
cascade: boolean;
268240
filename: string;
269241
dev: boolean;
270242

@@ -276,10 +248,9 @@ export default class Stylesheet {
276248

277249
nodesWithCssClass: Set<Node>;
278250

279-
constructor(source: string, parsed: Parsed, filename: string, cascade: boolean, dev: boolean) {
251+
constructor(source: string, parsed: Parsed, filename: string, dev: boolean) {
280252
this.source = source;
281253
this.parsed = parsed;
282-
this.cascade = cascade;
283254
this.filename = filename;
284255
this.dev = dev;
285256

@@ -356,11 +327,6 @@ export default class Stylesheet {
356327
if (parent.type === 'Element') stack.unshift(<Element>parent);
357328
}
358329

359-
if (this.cascade) {
360-
if (stack.length === 0) this.nodesWithCssClass.add(node);
361-
return;
362-
}
363-
364330
for (let i = 0; i < this.children.length; i += 1) {
365331
const child = this.children[i];
366332
child.apply(node, stack);
@@ -389,15 +355,15 @@ export default class Stylesheet {
389355

390356
if (shouldTransformSelectors) {
391357
this.children.forEach((child: (Atrule|Rule)) => {
392-
child.transform(code, this.id, this.keyframes, this.cascade);
358+
child.transform(code, this.id, this.keyframes);
393359
});
394360
}
395361

396362
let c = 0;
397363
this.children.forEach(child => {
398-
if (this.cascade || child.isUsed(this.dev)) {
364+
if (child.isUsed(this.dev)) {
399365
code.remove(c, child.node.start);
400-
child.minify(code, this.cascade, this.dev);
366+
child.minify(code, this.dev);
401367
c = child.node.end;
402368
}
403369
});
@@ -421,8 +387,6 @@ export default class Stylesheet {
421387
}
422388

423389
warnOnUnusedSelectors(onwarn: (warning: Warning) => void) {
424-
if (this.cascade) return;
425-
426390
let locator;
427391

428392
const handler = (selector: Selector) => {

src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ function compile(source: string, _options: CompileOptions) {
124124
}
125125

126126
stats.start('stylesheet');
127-
const stylesheet = new Stylesheet(source, parsed, options.filename, options.cascade !== false, options.dev);
127+
const stylesheet = new Stylesheet(source, parsed, options.filename, options.dev);
128128
stats.stop('stylesheet');
129129

130130
stats.start('validate');

test/css/samples/attribute-selector-only-name/_config.js

-3
This file was deleted.

test/css/samples/attribute-selector-unquoted/_config.js

-3
This file was deleted.

test/css/samples/basic/expected.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
div.svelte-xyz,.svelte-xyz div{color:red}
1+
div.svelte-xyz{color:red}

test/css/samples/cascade-false-empty-rule/_config.js

-3
This file was deleted.

test/css/samples/cascade-false-global-keyframes/_config.js

-3
This file was deleted.

test/css/samples/cascade-false-global/_config.js

-3
This file was deleted.

test/css/samples/cascade-false-keyframes-from-to/_config.js

-3
This file was deleted.

test/css/samples/cascade-false-keyframes/_config.js

-3
This file was deleted.

test/css/samples/cascade-false-keyframes/expected.css

-1
This file was deleted.

test/css/samples/cascade-false-keyframes/input.html

-17
This file was deleted.

test/css/samples/cascade-false-pseudo-element/_config.js

-3
This file was deleted.

test/css/samples/cascade-false-universal-selector/_config.js

-3
This file was deleted.

test/css/samples/cascade-false-universal-selector/expected.css

-1
This file was deleted.

test/css/samples/cascade-false-universal-selector/expected.html

-1
This file was deleted.

test/css/samples/cascade-false-universal-selector/input.html

-7
This file was deleted.

test/css/samples/cascade-false/_config.js

-3
This file was deleted.

test/css/samples/cascade-false/expected.css

-1
This file was deleted.

test/css/samples/cascade-false/input.html

-16
This file was deleted.

test/css/samples/combinator-child/_config.js

-3
This file was deleted.
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
div.svelte-xyz,.svelte-xyz div{--test:10}
1+
div.svelte-xyz{--test:10}

test/css/samples/descendant-selector-non-top-level-outer/_config.js

-3
This file was deleted.

test/css/samples/empty-class/_config.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
export default {
2-
cascade: false,
3-
42
warnings: [{
53
filename: "SvelteComponent.html",
64
code: `css-unused-selector`,
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
export default {
2-
cascade: false,
32
dev: true
43
};

test/css/samples/keyframes/expected.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/css/samples/keyframes/input.html

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<div class='animated'>animated</div>
2+
<div class='also-animated'>also animated</div>
23

34
<style>
45
@keyframes why {
@@ -9,4 +10,8 @@
910
.animated {
1011
animation: why 2s;
1112
}
13+
14+
.also-animated {
15+
animation: not-defined-here 2s;
16+
}
1217
</style>
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
@media only screen and (min-width: 400px){div.svelte-xyz,.svelte-xyz div{color:red}}
1+
@media only screen and (min-width: 400px){div.svelte-xyz{color:red}}
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
@media(min-width: 400px){.svelte-xyz.large-screen,.svelte-xyz .large-screen{display:block}}
1+
@media(min-width: 400px){.large-screen.svelte-xyz{display:block}}

test/css/samples/cascade-false-nested/_config.js test/css/samples/nested/_config.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
export default {
2-
cascade: false,
3-
42
data: {
53
dynamic: 'x'
64
}

test/css/samples/omit-scoping-attribute-attribute-selector-contains/_config.js

-3
This file was deleted.

test/css/samples/omit-scoping-attribute-attribute-selector-equals-case-insensitive/_config.js

-3
This file was deleted.

test/css/samples/omit-scoping-attribute-attribute-selector-equals-dynamic/_config.js

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
export default {
2-
cascade: false,
32
data: {
43
dynamic: 'whatever'
54
}

test/css/samples/omit-scoping-attribute-attribute-selector-equals/_config.js

-3
This file was deleted.

test/css/samples/omit-scoping-attribute-attribute-selector-pipe-equals/_config.js

-3
This file was deleted.

test/css/samples/omit-scoping-attribute-attribute-selector-prefix/_config.js

-3
This file was deleted.

test/css/samples/omit-scoping-attribute-attribute-selector-suffix/_config.js

-3
This file was deleted.

test/css/samples/omit-scoping-attribute-attribute-selector-word-equals/_config.js

-3
This file was deleted.

test/css/samples/omit-scoping-attribute-attribute-selector/_config.js

-3
This file was deleted.

0 commit comments

Comments
 (0)