Skip to content

Commit 8eb27a7

Browse files
committed
Add support for @if and @else
1 parent ad741fa commit 8eb27a7

File tree

11 files changed

+952
-5
lines changed

11 files changed

+952
-5
lines changed

pkg/sass-parser/lib/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ export {
105105
DeclarationRaws,
106106
} from './src/statement/declaration';
107107
export {EachRule, EachRuleProps, EachRuleRaws} from './src/statement/each-rule';
108+
export {ElseRule, ElseRuleProps, ElseRuleRaws} from './src/statement/else-rule';
108109
export {
109110
ErrorRule,
110111
ErrorRuleProps,
@@ -128,6 +129,7 @@ export {
128129
GenericAtRuleProps,
129130
GenericAtRuleRaws,
130131
} from './src/statement/generic-at-rule';
132+
export {IfRule, IfRuleProps, IfRuleRaws} from './src/statement/if-rule';
131133
export {
132134
MixinRule,
133135
MixinRuleProps,

pkg/sass-parser/lib/src/sass-internal.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,20 @@ declare namespace SassInternal {
166166
readonly parameters: ParameterList;
167167
}
168168

169+
class IfRule extends Statement {
170+
readonly clauses: IfClause[];
171+
readonly lastClause: ElseClause | null;
172+
}
173+
174+
class IfClause {
175+
readonly expression: Expression;
176+
readonly children: Statement[];
177+
}
178+
179+
class ElseClause {
180+
readonly children: Statement[];
181+
}
182+
169183
class IncludeRule extends Statement {
170184
readonly namespace: string | null;
171185
readonly name: string;
@@ -329,6 +343,9 @@ export type ExtendRule = SassInternal.ExtendRule;
329343
export type ForRule = SassInternal.ForRule;
330344
export type ForwardRule = SassInternal.ForwardRule;
331345
export type FunctionRule = SassInternal.FunctionRule;
346+
export type IfRule = SassInternal.IfRule;
347+
export type IfClause = SassInternal.IfClause;
348+
export type ElseClause = SassInternal.ElseClause;
332349
export type IncludeRule = SassInternal.IncludeRule;
333350
export type LoudComment = SassInternal.LoudComment;
334351
export type MediaRule = SassInternal.MediaRule;
@@ -363,6 +380,7 @@ export interface StatementVisitorObject<T> {
363380
visitForRule(node: ForRule): T;
364381
visitForwardRule(node: ForwardRule): T;
365382
visitFunctionRule(node: FunctionRule): T;
383+
visitIfRule(node: IfRule): T;
366384
visitIncludeRule(node: IncludeRule): T;
367385
visitLoudComment(node: LoudComment): T;
368386
visitMediaRule(node: MediaRule): T;
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`an @else rule toJSON with an expression 1`] = `
4+
{
5+
"elseCondition": <bar>,
6+
"inputs": [
7+
{
8+
"css": "@if foo {} @else if bar {}",
9+
"hasBOM": false,
10+
"id": "<input css _____>",
11+
},
12+
],
13+
"name": "else",
14+
"nodes": [],
15+
"params": "if bar",
16+
"raws": {},
17+
"sassType": "else-rule",
18+
"source": <1:1-1:27 in 0>,
19+
"type": "atrule",
20+
}
21+
`;
22+
23+
exports[`an @else rule toJSON with no expression 1`] = `
24+
{
25+
"inputs": [
26+
{
27+
"css": "@if foo {} @else {}",
28+
"hasBOM": false,
29+
"id": "<input css _____>",
30+
},
31+
],
32+
"name": "else",
33+
"nodes": [],
34+
"params": "",
35+
"raws": {},
36+
"sassType": "else-rule",
37+
"source": <1:1-1:20 in 0>,
38+
"type": "atrule",
39+
}
40+
`;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`an @if rule toJSON 1`] = `
4+
{
5+
"ifCondition": <foo>,
6+
"inputs": [
7+
{
8+
"css": "@if foo {}",
9+
"hasBOM": false,
10+
"id": "<input css _____>",
11+
},
12+
],
13+
"name": "if",
14+
"nodes": [],
15+
"params": "foo",
16+
"raws": {},
17+
"sassType": "if-rule",
18+
"source": <1:1-1:11 in 0>,
19+
"type": "atrule",
20+
}
21+
`;

0 commit comments

Comments
 (0)