diff --git a/lib/src/embedded/importer/file.dart b/lib/src/embedded/importer/file.dart index 3e18452ff..fcbe72ce8 100644 --- a/lib/src/embedded/importer/file.dart +++ b/lib/src/embedded/importer/file.dart @@ -22,7 +22,7 @@ final class FileImporter extends ImporterBase { ..url = url.toString() ..fromImport = fromImport; var containingUrl = canonicalizeContext.containingUrlWithoutMarking; - if (containingUrl != null) { + if (containingUrl case var containingUrl?) { request.containingUrl = containingUrl.toString(); } var response = dispatcher.sendFileImportRequest(request); diff --git a/lib/src/embedded/importer/host.dart b/lib/src/embedded/importer/host.dart index 2f2702fb1..4d68a5e10 100644 --- a/lib/src/embedded/importer/host.dart +++ b/lib/src/embedded/importer/host.dart @@ -36,7 +36,7 @@ final class HostImporter extends ImporterBase { ..url = url.toString() ..fromImport = fromImport; var containingUrl = canonicalizeContext.containingUrlWithoutMarking; - if (containingUrl != null) { + if (containingUrl case var containingUrl?) { request.containingUrl = containingUrl.toString(); } var response = dispatcher.sendCanonicalizeRequest(request); diff --git a/lib/src/importer/async.dart b/lib/src/importer/async.dart index 00d29993a..d777d84f5 100644 --- a/lib/src/importer/async.dart +++ b/lib/src/importer/async.dart @@ -62,6 +62,9 @@ abstract class AsyncImporter { /// /// Subclasses should only access this from within calls to [canonicalize]. /// Outside of that context, its value is undefined and subject to change. + /// + /// @nodoc + @internal @protected @nonVirtual CanonicalizeContext get canonicalizeContext => utils.canonicalizeContext; diff --git a/lib/src/importer/canonicalize_context.dart b/lib/src/importer/canonicalize_context.dart index f40a79229..05a3b3ea2 100644 --- a/lib/src/importer/canonicalize_context.dart +++ b/lib/src/importer/canonicalize_context.dart @@ -4,9 +4,13 @@ import 'package:meta/meta.dart'; -class CanonicalizeContext { +/// Contextual information used by importers' `canonicalize` method. +@internal +final class CanonicalizeContext { + /// Whether the Sass compiler is currently evaluating an `@import` rule. final bool fromImport; + /// The URL of the stylesheet that contains the current load. Uri? get containingUrl { _wasContainingUrlAccessed = true; return _containingUrl; @@ -14,11 +18,17 @@ class CanonicalizeContext { final Uri? _containingUrl; + /// Returns the same value as [containingUrl], but doesn't mark it accessed. Uri? get containingUrlWithoutMarking => _containingUrl; + /// Whether [containingUrl] has been accessed. + /// + /// This is used to determine whether canonicalize result is cacheable. + /// + /// @nodoc @internal bool get wasContainingUrlAccessed => _wasContainingUrlAccessed; - bool _wasContainingUrlAccessed = false; + var _wasContainingUrlAccessed = false; CanonicalizeContext(this._containingUrl, this.fromImport); }