Skip to content

Commit d9e854a

Browse files
committed
Add support for silent comments
1 parent cf918bc commit d9e854a

File tree

9 files changed

+753
-3
lines changed

9 files changed

+753
-3
lines changed

lib/src/js/parser.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ void _updateAstPrototypes() {
5757
var file = SourceFile.fromString('');
5858
getJSClass(file).defineMethod('getText',
5959
(SourceFile self, int start, [int? end]) => self.getText(start, end));
60+
getJSClass(file)
61+
.defineGetter('codeUnits', (SourceFile self) => self.codeUnits);
6062
var interpolation = Interpolation(const [], bogusSpan);
6163
getJSClass(interpolation)
6264
.defineGetter('asPlain', (Interpolation self) => self.asPlain);

pkg/sass-parser/lib/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ export {
5757
} from './src/statement/generic-at-rule';
5858
export {Root, RootProps, RootRaws} from './src/statement/root';
5959
export {Rule, RuleProps, RuleRaws} from './src/statement/rule';
60+
export {
61+
SassComment,
62+
SassCommentProps,
63+
SassCommentRaws,
64+
} from './src/statement/sass-comment';
6065
export {
6166
AnyStatement,
6267
AtRule,

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export interface SourceFile {
2020
/** Node-only extension that we use to avoid re-creating inputs. */
2121
_postcssInput?: postcss.Input;
2222

23+
readonly codeUnits: number[];
24+
2325
getText(start: number, end?: number): string;
2426
}
2527

@@ -109,6 +111,10 @@ declare namespace SassInternal {
109111
readonly query: Interpolation;
110112
}
111113

114+
class SilentComment extends Statement {
115+
readonly text: string;
116+
}
117+
112118
class Stylesheet extends ParentStatement<Statement[]> {}
113119

114120
class StyleRule extends ParentStatement<Statement[]> {
@@ -153,6 +159,7 @@ export type ExtendRule = SassInternal.ExtendRule;
153159
export type ForRule = SassInternal.ForRule;
154160
export type LoudComment = SassInternal.LoudComment;
155161
export type MediaRule = SassInternal.MediaRule;
162+
export type SilentComment = SassInternal.SilentComment;
156163
export type Stylesheet = SassInternal.Stylesheet;
157164
export type StyleRule = SassInternal.StyleRule;
158165
export type Interpolation = SassInternal.Interpolation;
@@ -170,6 +177,7 @@ export interface StatementVisitorObject<T> {
170177
visitForRule(node: ForRule): T;
171178
visitLoudComment(node: LoudComment): T;
172179
visitMediaRule(node: MediaRule): T;
180+
visitSilentComment(node: SilentComment): T;
173181
visitStyleRule(node: StyleRule): T;
174182
}
175183

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`a Sass-style comment toJSON 1`] = `
4+
{
5+
"inputs": [
6+
{
7+
"css": "// foo",
8+
"hasBOM": false,
9+
"id": "<input css _____>",
10+
},
11+
],
12+
"raws": {
13+
"before": "",
14+
"beforeLines": [
15+
"",
16+
],
17+
"left": " ",
18+
},
19+
"sassType": "sass-comment",
20+
"source": <1:1-1:7 in 0>,
21+
"text": "foo",
22+
"type": "comment",
23+
}
24+
`;

pkg/sass-parser/lib/src/statement/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {LazySource} from '../lazy-source';
99
import {Node, NodeProps} from '../node';
1010
import * as sassInternal from '../sass-internal';
1111
import {CssComment, CssCommentProps} from './css-comment';
12+
import {SassComment, SassCommentChildProps} from './sass-comment';
1213
import {GenericAtRule, GenericAtRuleProps} from './generic-at-rule';
1314
import {DebugRule, DebugRuleProps} from './debug-rule';
1415
import {EachRule, EachRuleProps} from './each-rule';
@@ -45,7 +46,8 @@ export type StatementType =
4546
| 'debug-rule'
4647
| 'each-rule'
4748
| 'for-rule'
48-
| 'error-rule';
49+
| 'error-rule'
50+
| 'sass-comment';
4951

5052
/**
5153
* All Sass statements that are also at-rules.
@@ -59,7 +61,7 @@ export type AtRule = DebugRule | EachRule | ErrorRule | ForRule | GenericAtRule;
5961
*
6062
* @category Statement
6163
*/
62-
export type Comment = CssComment;
64+
export type Comment = CssComment | SassComment;
6365

6466
/**
6567
* All Sass statements that are valid children of other statements.
@@ -85,7 +87,8 @@ export type ChildProps =
8587
| ErrorRuleProps
8688
| ForRuleProps
8789
| GenericAtRuleProps
88-
| RuleProps;
90+
| RuleProps
91+
| SassCommentChildProps;
8992

9093
/**
9194
* The Sass eqivalent of PostCSS's `ContainerProps`.
@@ -158,6 +161,7 @@ const visitor = sassInternal.createStatementVisitor<Statement>({
158161
appendInternalChildren(rule, inner.children);
159162
return rule;
160163
},
164+
visitSilentComment: inner => new SassComment(undefined, inner),
161165
visitStyleRule: inner => new Rule(undefined, inner),
162166
});
163167

@@ -271,6 +275,8 @@ export function normalize(
271275
result.push(new ErrorRule(node));
272276
} else if ('text' in node || 'textInterpolation' in node) {
273277
result.push(new CssComment(node as CssCommentProps));
278+
} else if ('silentText' in node) {
279+
result.push(new SassComment(node));
274280
} else {
275281
result.push(...postcssNormalizeAndConvertToSass(self, node, sample));
276282
}

0 commit comments

Comments
 (0)