Skip to content

Commit 60d440a

Browse files
authored
Emit all warnings in the evaluator (#2396)
1 parent 01b2a5b commit 60d440a

Some content is hidden

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

43 files changed

+340
-396
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 1.80.3
2+
3+
* Improve consistency of how warnings are emitted by different parts of the
4+
compiler. This should result in minimal user-visible changes, but different
5+
types of warnings should now respond more reliably to flags like `--quiet`,
6+
`--verbose`, and `--silence-deprecation`.
7+
18
## 1.80.2
29

310
* Fix a bug where deprecation warnings were incorrectly emitted for the

bin/sass.dart

+6-6
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ Future<void> main(List<String> args) async {
4444
return;
4545
}
4646

47+
// Eagerly check these so that we fail here and don't hang in watch mode.
48+
options.silenceDeprecations;
49+
options.futureDeprecations;
50+
options.fatalDeprecations;
51+
4752
var graph = StylesheetGraph(ImportCache(
4853
importers: [...options.pkgImporters, FilesystemImporter.noLoadPath],
49-
loadPaths: options.loadPaths,
50-
logger: ImportCache.wrapLogger(
51-
options.logger,
52-
options.silenceDeprecations,
53-
options.fatalDeprecations,
54-
options.futureDeprecations)));
54+
loadPaths: options.loadPaths));
5555
if (options.watch) {
5656
await watch(options, graph);
5757
return;

lib/sass.dart

-12
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,6 @@ CompileResult compileToResult(String path,
120120
logger: logger,
121121
importCache: ImportCache(
122122
importers: importers,
123-
logger: ImportCache.wrapLogger(logger, silenceDeprecations,
124-
fatalDeprecations, futureDeprecations,
125-
color: color),
126123
loadPaths: loadPaths,
127124
packageConfig: packageConfig),
128125
functions: functions,
@@ -224,9 +221,6 @@ CompileResult compileStringToResult(String source,
224221
logger: logger,
225222
importCache: ImportCache(
226223
importers: importers,
227-
logger: ImportCache.wrapLogger(logger, silenceDeprecations,
228-
fatalDeprecations, futureDeprecations,
229-
color: color),
230224
packageConfig: packageConfig,
231225
loadPaths: loadPaths),
232226
functions: functions,
@@ -265,9 +259,6 @@ Future<CompileResult> compileToResultAsync(String path,
265259
logger: logger,
266260
importCache: AsyncImportCache(
267261
importers: importers,
268-
logger: AsyncImportCache.wrapLogger(logger, silenceDeprecations,
269-
fatalDeprecations, futureDeprecations,
270-
color: color),
271262
loadPaths: loadPaths,
272263
packageConfig: packageConfig),
273264
functions: functions,
@@ -310,9 +301,6 @@ Future<CompileResult> compileStringToResultAsync(String source,
310301
logger: logger,
311302
importCache: AsyncImportCache(
312303
importers: importers,
313-
logger: AsyncImportCache.wrapLogger(logger, silenceDeprecations,
314-
fatalDeprecations, futureDeprecations,
315-
color: color),
316304
packageConfig: packageConfig,
317305
loadPaths: loadPaths),
318306
functions: functions,

lib/src/ast/css/media_query.dart

+2-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// https://opensource.org/licenses/MIT.
44

55
import '../../interpolation_map.dart';
6-
import '../../logger.dart';
76
import '../../parse/media_query.dart';
87
import '../../utils.dart';
98

@@ -44,9 +43,8 @@ final class CssMediaQuery {
4443
///
4544
/// Throws a [SassFormatException] if parsing fails.
4645
static List<CssMediaQuery> parseList(String contents,
47-
{Object? url, Logger? logger, InterpolationMap? interpolationMap}) =>
48-
MediaQueryParser(contents,
49-
url: url, logger: logger, interpolationMap: interpolationMap)
46+
{Object? url, InterpolationMap? interpolationMap}) =>
47+
MediaQueryParser(contents, url: url, interpolationMap: interpolationMap)
5048
.parse();
5149

5250
/// Creates a media query specifies a type and, optionally, conditions.

lib/src/ast/sass/argument_declaration.dart

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import 'package:source_span/source_span.dart';
66

77
import '../../exception.dart';
8-
import '../../logger.dart';
98
import '../../parse/scss.dart';
109
import '../../util/character.dart';
1110
import '../../util/span.dart';
@@ -71,9 +70,8 @@ final class ArgumentDeclaration implements SassNode {
7170
/// If passed, [url] is the name of the file from which [contents] comes.
7271
///
7372
/// Throws a [SassFormatException] if parsing fails.
74-
factory ArgumentDeclaration.parse(String contents,
75-
{Object? url, Logger? logger}) =>
76-
ScssParser(contents, url: url, logger: logger).parseArgumentDeclaration();
73+
factory ArgumentDeclaration.parse(String contents, {Object? url}) =>
74+
ScssParser(contents, url: url).parseArgumentDeclaration();
7775

7876
/// Throws a [SassScriptException] if [positional] and [names] aren't valid
7977
/// for this argument declaration.

lib/src/ast/sass/at_root_query.dart

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'package:collection/collection.dart';
77

88
import '../../exception.dart';
99
import '../../interpolation_map.dart';
10-
import '../../logger.dart';
1110
import '../../parse/at_root_query.dart';
1211
import '../css.dart';
1312

@@ -58,8 +57,8 @@ final class AtRootQuery {
5857
///
5958
/// Throws a [SassFormatException] if parsing fails.
6059
factory AtRootQuery.parse(String contents,
61-
{Object? url, Logger? logger, InterpolationMap? interpolationMap}) =>
62-
AtRootQueryParser(contents, url: url, logger: logger).parse();
60+
{Object? url, InterpolationMap? interpolationMap}) =>
61+
AtRootQueryParser(contents, url: url).parse();
6362

6463
/// Returns whether `this` excludes [node].
6564
///

lib/src/ast/sass/expression.dart

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import 'package:meta/meta.dart';
66

77
import '../../exception.dart';
8-
import '../../logger.dart';
98
import '../../parse/scss.dart';
109
import '../../visitor/interface/expression.dart';
1110
import '../../visitor/is_calculation_safe.dart';
@@ -50,6 +49,6 @@ abstract class Expression implements SassNode {
5049
/// If passed, [url] is the name of the file from which [contents] comes.
5150
///
5251
/// Throws a [SassFormatException] if parsing fails.
53-
factory Expression.parse(String contents, {Object? url, Logger? logger}) =>
54-
ScssParser(contents, url: url, logger: logger).parseExpression();
52+
factory Expression.parse(String contents, {Object? url}) =>
53+
ScssParser(contents, url: url).parseExpression().$1;
5554
}

lib/src/ast/sass/statement/stylesheet.dart

+29-16
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import 'dart:collection';
77
import 'package:meta/meta.dart';
88
import 'package:source_span/source_span.dart';
99

10+
import '../../../deprecation.dart';
1011
import '../../../exception.dart';
11-
import '../../../logger.dart';
1212
import '../../../parse/css.dart';
1313
import '../../../parse/sass.dart';
1414
import '../../../parse/scss.dart';
@@ -46,16 +46,25 @@ final class Stylesheet extends ParentStatement<List<Statement>> {
4646
List<ForwardRule> get forwards => UnmodifiableListView(_forwards);
4747
final _forwards = <ForwardRule>[];
4848

49+
/// List of warnings discovered while parsing this stylesheet, to be emitted
50+
/// during evaluation once we have a proper logger to use.
51+
///
52+
/// @nodoc
53+
@internal
54+
final List<ParseTimeWarning> parseTimeWarnings;
55+
4956
Stylesheet(Iterable<Statement> children, FileSpan span)
50-
: this.internal(children, span);
57+
: this.internal(children, span, []);
5158

5259
/// A separate internal constructor that allows [plainCss] to be set.
5360
///
5461
/// @nodoc
5562
@internal
5663
Stylesheet.internal(Iterable<Statement> children, this.span,
64+
List<ParseTimeWarning> parseTimeWarnings,
5765
{this.plainCss = false})
58-
: super(List.unmodifiable(children)) {
66+
: parseTimeWarnings = UnmodifiableListView(parseTimeWarnings),
67+
super(List.unmodifiable(children)) {
5968
loop:
6069
for (var child in this.children) {
6170
switch (child) {
@@ -81,16 +90,15 @@ final class Stylesheet extends ParentStatement<List<Statement>> {
8190
/// If passed, [url] is the name of the file from which [contents] comes.
8291
///
8392
/// Throws a [SassFormatException] if parsing fails.
84-
factory Stylesheet.parse(String contents, Syntax syntax,
85-
{Object? url, Logger? logger}) {
93+
factory Stylesheet.parse(String contents, Syntax syntax, {Object? url}) {
8694
try {
8795
switch (syntax) {
8896
case Syntax.sass:
89-
return Stylesheet.parseSass(contents, url: url, logger: logger);
97+
return Stylesheet.parseSass(contents, url: url);
9098
case Syntax.scss:
91-
return Stylesheet.parseScss(contents, url: url, logger: logger);
99+
return Stylesheet.parseScss(contents, url: url);
92100
case Syntax.css:
93-
return Stylesheet.parseCss(contents, url: url, logger: logger);
101+
return Stylesheet.parseCss(contents, url: url);
94102
}
95103
} on SassException catch (error, stackTrace) {
96104
var url = error.span.sourceUrl;
@@ -106,28 +114,33 @@ final class Stylesheet extends ParentStatement<List<Statement>> {
106114
/// If passed, [url] is the name of the file from which [contents] comes.
107115
///
108116
/// Throws a [SassFormatException] if parsing fails.
109-
factory Stylesheet.parseSass(String contents,
110-
{Object? url, Logger? logger}) =>
111-
SassParser(contents, url: url, logger: logger).parse();
117+
factory Stylesheet.parseSass(String contents, {Object? url}) =>
118+
SassParser(contents, url: url).parse();
112119

113120
/// Parses an SCSS stylesheet from [contents].
114121
///
115122
/// If passed, [url] is the name of the file from which [contents] comes.
116123
///
117124
/// Throws a [SassFormatException] if parsing fails.
118-
factory Stylesheet.parseScss(String contents,
119-
{Object? url, Logger? logger}) =>
120-
ScssParser(contents, url: url, logger: logger).parse();
125+
factory Stylesheet.parseScss(String contents, {Object? url}) =>
126+
ScssParser(contents, url: url).parse();
121127

122128
/// Parses a plain CSS stylesheet from [contents].
123129
///
124130
/// If passed, [url] is the name of the file from which [contents] comes.
125131
///
126132
/// Throws a [SassFormatException] if parsing fails.
127-
factory Stylesheet.parseCss(String contents, {Object? url, Logger? logger}) =>
128-
CssParser(contents, url: url, logger: logger).parse();
133+
factory Stylesheet.parseCss(String contents, {Object? url}) =>
134+
CssParser(contents, url: url).parse();
129135

130136
T accept<T>(StatementVisitor<T> visitor) => visitor.visitStylesheet(this);
131137

132138
String toString() => children.join(" ");
133139
}
140+
141+
/// Record type for a warning discovered while parsing a stylesheet.
142+
typedef ParseTimeWarning = ({
143+
Deprecation? deprecation,
144+
FileSpan span,
145+
String message
146+
});

lib/src/ast/sass/statement/use_rule.dart

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:meta/meta.dart';
66
import 'package:source_span/source_span.dart';
77

88
import '../../../exception.dart';
9-
import '../../../logger.dart';
109
import '../../../parse/scss.dart';
1110
import '../../../util/span.dart';
1211
import '../../../visitor/interface/statement.dart';
@@ -56,8 +55,8 @@ final class UseRule extends Statement implements SassDependency {
5655
///
5756
/// @nodoc
5857
@internal
59-
factory UseRule.parse(String contents, {Object? url, Logger? logger}) =>
60-
ScssParser(contents, url: url, logger: logger).parseUseRule();
58+
factory UseRule.parse(String contents, {Object? url}) =>
59+
ScssParser(contents, url: url).parseUseRule().$1;
6160

6261
T accept<T>(StatementVisitor<T> visitor) => visitor.visitUseRule(this);
6362

lib/src/ast/sass/statement/variable_declaration.dart

+2-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:meta/meta.dart';
66
import 'package:source_span/source_span.dart';
77

88
import '../../../exception.dart';
9-
import '../../../logger.dart';
109
import '../../../parse/scss.dart';
1110
import '../../../utils.dart';
1211
import '../../../util/span.dart';
@@ -81,9 +80,8 @@ final class VariableDeclaration extends Statement implements SassDeclaration {
8180
///
8281
/// @nodoc
8382
@internal
84-
factory VariableDeclaration.parse(String contents,
85-
{Object? url, Logger? logger}) =>
86-
ScssParser(contents, url: url, logger: logger).parseVariableDeclaration();
83+
factory VariableDeclaration.parse(String contents, {Object? url}) =>
84+
ScssParser(contents, url: url).parseVariableDeclaration().$1;
8785

8886
T accept<T>(StatementVisitor<T> visitor) =>
8987
visitor.visitVariableDeclaration(this);

lib/src/ast/selector/complex.dart

+2-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:meta/meta.dart';
66
import 'package:source_span/source_span.dart';
77

88
import '../../extend/functions.dart';
9-
import '../../logger.dart';
109
import '../../parse/selector.dart';
1110
import '../../utils.dart';
1211
import '../../visitor/interface/selector.dart';
@@ -88,9 +87,8 @@ final class ComplexSelector extends Selector {
8887
///
8988
/// Throws a [SassFormatException] if parsing fails.
9089
factory ComplexSelector.parse(String contents,
91-
{Object? url, Logger? logger, bool allowParent = true}) =>
92-
SelectorParser(contents,
93-
url: url, logger: logger, allowParent: allowParent)
90+
{Object? url, bool allowParent = true}) =>
91+
SelectorParser(contents, url: url, allowParent: allowParent)
9492
.parseComplexSelector();
9593

9694
T accept<T>(SelectorVisitor<T> visitor) => visitor.visitComplexSelector(this);

lib/src/ast/selector/compound.dart

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import 'package:meta/meta.dart';
66

77
import '../../extend/functions.dart';
8-
import '../../logger.dart';
98
import '../../parse/selector.dart';
109
import '../../utils.dart';
1110
import '../../visitor/interface/selector.dart';
@@ -69,9 +68,8 @@ final class CompoundSelector extends Selector {
6968
///
7069
/// Throws a [SassFormatException] if parsing fails.
7170
factory CompoundSelector.parse(String contents,
72-
{Object? url, Logger? logger, bool allowParent = true}) =>
73-
SelectorParser(contents,
74-
url: url, logger: logger, allowParent: allowParent)
71+
{Object? url, bool allowParent = true}) =>
72+
SelectorParser(contents, url: url, allowParent: allowParent)
7573
.parseCompoundSelector();
7674

7775
T accept<T>(SelectorVisitor<T> visitor) =>

lib/src/ast/selector/list.dart

-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'package:meta/meta.dart';
77
import '../../exception.dart';
88
import '../../extend/functions.dart';
99
import '../../interpolation_map.dart';
10-
import '../../logger.dart';
1110
import '../../parse/selector.dart';
1211
import '../../utils.dart';
1312
import '../../util/iterable.dart';
@@ -68,13 +67,11 @@ final class SelectorList extends Selector {
6867
/// Throws a [SassFormatException] if parsing fails.
6968
factory SelectorList.parse(String contents,
7069
{Object? url,
71-
Logger? logger,
7270
InterpolationMap? interpolationMap,
7371
bool allowParent = true,
7472
bool plainCss = false}) =>
7573
SelectorParser(contents,
7674
url: url,
77-
logger: logger,
7875
interpolationMap: interpolationMap,
7976
allowParent: allowParent,
8077
plainCss: plainCss)

lib/src/ast/selector/simple.dart

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import 'package:meta/meta.dart';
66

77
import '../../exception.dart';
8-
import '../../logger.dart';
98
import '../../parse/selector.dart';
109
import '../selector.dart';
1110

@@ -54,9 +53,8 @@ abstract base class SimpleSelector extends Selector {
5453
///
5554
/// Throws a [SassFormatException] if parsing fails.
5655
factory SimpleSelector.parse(String contents,
57-
{Object? url, Logger? logger, bool allowParent = true}) =>
58-
SelectorParser(contents,
59-
url: url, logger: logger, allowParent: allowParent)
56+
{Object? url, bool allowParent = true}) =>
57+
SelectorParser(contents, url: url, allowParent: allowParent)
6058
.parseSimpleSelector();
6159

6260
/// Returns a new [SimpleSelector] based on `this`, as though it had been

lib/src/async_compile.dart

+3-4
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ Future<CompileResult> compileAsync(String path,
5858
Stylesheet? stylesheet;
5959
if (nodeImporter == null &&
6060
(syntax == null || syntax == Syntax.forPath(path))) {
61-
importCache ??= AsyncImportCache.none(logger: logger);
61+
importCache ??= AsyncImportCache.none();
6262
stylesheet = (await importCache.importCanonical(
6363
FilesystemImporter.cwd, p.toUri(canonicalize(path)),
6464
originalUrl: p.toUri(path)))!;
6565
} else {
6666
stylesheet = Stylesheet.parse(
6767
readFile(path), syntax ?? Syntax.forPath(path),
68-
url: p.toUri(path), logger: logger);
68+
url: p.toUri(path));
6969
}
7070

7171
var result = await _compileStylesheet(
@@ -120,8 +120,7 @@ Future<CompileResult> compileStringAsync(String source,
120120
limitRepetition: !verbose)
121121
..validate();
122122

123-
var stylesheet =
124-
Stylesheet.parse(source, syntax ?? Syntax.scss, url: url, logger: logger);
123+
var stylesheet = Stylesheet.parse(source, syntax ?? Syntax.scss, url: url);
125124

126125
var result = await _compileStylesheet(
127126
stylesheet,

0 commit comments

Comments
 (0)