Skip to content

Commit 50d51ac

Browse files
committed
Fix --fatal-deprecation adding obsolete ones
See also #2647
1 parent 20a59ee commit 50d51ac

File tree

2 files changed

+85
-3
lines changed

2 files changed

+85
-3
lines changed

lib/src/deprecation.dart

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,23 @@ enum Deprecation {
220220
);
221221

222222
/// Returns the set of all deprecations done in or before [version].
223-
static Set<Deprecation> forVersion(Version version) {
224-
var range = VersionRange(max: version, includeMax: true);
223+
static Set<Deprecation> forVersion(Version version, [Version? current]) {
224+
final sassVersion = current ??
225+
Version.parse(
226+
const bool.hasEnvironment('version')
227+
? const String.fromEnvironment('version')
228+
: '0.0.0',
229+
);
230+
231+
final deprecatedRange = VersionRange(max: version, includeMax: true);
232+
final obsoleteRange = VersionRange(max: sassVersion, includeMax: true);
233+
225234
return {
226235
for (var deprecation in Deprecation.values)
227-
if (deprecation.deprecatedIn.andThen(range.allows) ?? false)
236+
if ((deprecation.deprecatedIn.andThen(deprecatedRange.allows) ??
237+
false) &&
238+
(deprecation.obsoleteIn.andThen((v) => !obsoleteRange.allows(v)) ??
239+
true))
228240
deprecation,
229241
};
230242
}

test/deprecations_test.dart

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ library;
88
import 'package:test/test.dart';
99

1010
import 'package:sass/sass.dart';
11+
import 'package:pub_semver/pub_semver.dart';
1112

1213
void main() {
1314
// Deprecated in all version of Dart Sass
@@ -151,6 +152,75 @@ void main() {
151152
);
152153
});
153154
});
155+
156+
group('Deprecation.forVersion', () {
157+
test('includes deprecations that are not obsolete', () {
158+
final version = Version.parse('1.79.0');
159+
final sassVersion = Version.parse('1.91.0');
160+
final deprecations = Deprecation.forVersion(version, sassVersion);
161+
162+
expect(
163+
deprecations,
164+
equals({
165+
Deprecation.callString,
166+
Deprecation.elseif,
167+
Deprecation.mozDocument,
168+
Deprecation.relativeCanonical,
169+
Deprecation.newGlobal,
170+
Deprecation.colorModuleCompat,
171+
Deprecation.slashDiv,
172+
Deprecation.bogusCombinators,
173+
Deprecation.strictUnary,
174+
Deprecation.functionUnits,
175+
Deprecation.duplicateVarFlags,
176+
Deprecation.nullAlpha,
177+
Deprecation.absPercent,
178+
Deprecation.fsImporterCwd,
179+
Deprecation.cssFunctionMixin,
180+
Deprecation.mixedDecls,
181+
Deprecation.featureExists,
182+
Deprecation.color4Api,
183+
Deprecation.colorFunctions,
184+
Deprecation.legacyJsApi
185+
}),
186+
reason:
187+
'type-function not deprecated yet in 1.79.0, mixed-decls not obsolete in 1.91.0',
188+
);
189+
});
190+
191+
test('includes deprecations that are not obsolete', () {
192+
final version = Version.parse('1.79.0');
193+
final sassVersion = Version.parse('1.92.0');
194+
final deprecations = Deprecation.forVersion(version, sassVersion);
195+
196+
expect(
197+
deprecations,
198+
equals({
199+
Deprecation.callString,
200+
Deprecation.elseif,
201+
Deprecation.mozDocument,
202+
Deprecation.relativeCanonical,
203+
Deprecation.newGlobal,
204+
Deprecation.colorModuleCompat,
205+
Deprecation.slashDiv,
206+
Deprecation.bogusCombinators,
207+
Deprecation.strictUnary,
208+
Deprecation.functionUnits,
209+
Deprecation.duplicateVarFlags,
210+
Deprecation.nullAlpha,
211+
Deprecation.absPercent,
212+
Deprecation.fsImporterCwd,
213+
Deprecation.cssFunctionMixin,
214+
Deprecation.featureExists,
215+
Deprecation.color4Api,
216+
Deprecation.colorFunctions,
217+
Deprecation.legacyJsApi
218+
}),
219+
reason:
220+
'mixed-decls obsolete in 1.92.0',
221+
);
222+
});
223+
});
154224
}
155225

156226
/// Confirms that [source] will error if [deprecation] is fatal.

0 commit comments

Comments
 (0)