From eeaa9ccdc03a2d939bc3686b30d5258ea312d32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Wed, 2 Jul 2025 13:48:10 -0700 Subject: [PATCH 1/5] Tests for fix to crash when mixin @import and @use --- spec/directives/import/nested.hrx | 99 ++++++++++++++++++++++++++++-- spec/directives/use/error/load.hrx | 18 ++++++ 2 files changed, 113 insertions(+), 4 deletions(-) diff --git a/spec/directives/import/nested.hrx b/spec/directives/import/nested.hrx index b6baf321b..658abe36b 100644 --- a/spec/directives/import/nested.hrx +++ b/spec/directives/import/nested.hrx @@ -211,10 +211,10 @@ More info and automated migrator: https://sass-lang.com/d/import /* Y */ <===> with_comment/_b.scss -@import 'a' +@import 'a'; <===> with_comment/_c.scss -@import 'a' +@import 'a'; <===> with_comment/output.css /* Y */ @@ -246,7 +246,7 @@ DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be remo More info and automated migrator: https://sass-lang.com/d/import , -1 | @import 'a' +1 | @import 'a'; | ^^^ ' _b.scss 1:9 @import @@ -257,8 +257,99 @@ DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be remo More info and automated migrator: https://sass-lang.com/d/import , -1 | @import 'a' +1 | @import 'a'; | ^^^ ' _c.scss 1:9 @import input.scss 2:9 root stylesheet + +<===> +================================================================================ +<===> top_level_include_declaration/README.md +These are regression tests for https://github.com/sass/dart-sass/issues/2588. + +<===> +================================================================================ +<===> top_level_include_declaration/without_use/input.scss +.a { + @import 'upstream'; +} + +<===> top_level_include_declaration/without_use/_upstream.scss +@mixin a { b: c } +@include a; + +<===> top_level_include_declaration/without_use/output.css +.a { + b: c; +} + +<===> top_level_include_declaration/without_use/warning +DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. +More info and automated migrator: https://sass-lang.com/d/import + , +2 | @import 'upstream'; + | ^^^^^^^^^^ + ' + input.scss 2:11 root stylesheet + +<===> +================================================================================ +<===> top_level_include_declaration/with_use/input.scss +.a { + @import 'upstream'; +} + +<===> top_level_include_declaration/with_use/_upstream.scss +@use 'other'; +@mixin a { b: c } +@include a; + +<===> top_level_include_declaration/with_use/other.scss +// Intentionally empty. + +<===> top_level_include_declaration/with_use/output.css +.a { + b: c; +} + +<===> top_level_include_declaration/with_use/warning +DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. +More info and automated migrator: https://sass-lang.com/d/import + , +2 | @import 'upstream'; + | ^^^^^^^^^^ + ' + input.scss 2:11 root stylesheet + +<===> +================================================================================ +<===> top_level_include_declaration/with_use/two_levels_deep/input.scss +.a { + @import 'upstream1'; +} + +<===> top_level_include_declaration/with_use/two_levels_deep/_upstream1.scss +@import 'upstream2'; + +<===> top_level_include_declaration/with_use/two_levels_deep/_upstream2.scss +@use 'other'; +@mixin a { b: c } +@include a; + +<===> top_level_include_declaration/with_use/two_levels_deep/other.scss +// Intentionally empty. + +<===> top_level_include_declaration/with_use/two_levels_deep/output.css +.a { + b: c; +} + +<===> top_level_include_declaration/with_use/two_levels_deep/warning +DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. +More info and automated migrator: https://sass-lang.com/d/import + , +2 | @import 'upstream'; + | ^^^^^^^^^^ + ' + input.scss 2:11 root stylesheet diff --git a/spec/directives/use/error/load.hrx b/spec/directives/use/error/load.hrx index d454ab282..16a94cf23 100644 --- a/spec/directives/use/error/load.hrx +++ b/spec/directives/use/error/load.hrx @@ -328,3 +328,21 @@ Error: There's already a module with namespace "other". | ^^^^^^^^^^^^^^^^^^^^^^ new @use ' input.scss 2:1 root stylesheet + +<===> +================================================================================ +<===> top_level_include_declaration/input.scss +@use "upstream"; +@include upstream.a; + +<===> top_level_include_declaration/_upstream.scss +@mixin a { b: c } + +<===> top_level_include_declaration/error +Error: Declarations may only be used within style rules. + , +1 | @mixin a { b: c } + | ^^^^^ + ' + _upstream.scss 1:12 a() + input.scss 2:1 root stylesheet From 708229bc7faebd56d083cc1834be311bf4914e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Wed, 2 Jul 2025 13:53:54 -0700 Subject: [PATCH 2/5] fix lint issues --- spec/directives/import/nested.hrx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/directives/import/nested.hrx b/spec/directives/import/nested.hrx index 658abe36b..8f0a6af27 100644 --- a/spec/directives/import/nested.hrx +++ b/spec/directives/import/nested.hrx @@ -324,28 +324,28 @@ More info and automated migrator: https://sass-lang.com/d/import <===> ================================================================================ -<===> top_level_include_declaration/with_use/two_levels_deep/input.scss +<===> top_level_include_declaration/with_use_two_levels_deep/input.scss .a { @import 'upstream1'; } -<===> top_level_include_declaration/with_use/two_levels_deep/_upstream1.scss +<===> top_level_include_declaration/with_use_two_levels_deep/_upstream1.scss @import 'upstream2'; -<===> top_level_include_declaration/with_use/two_levels_deep/_upstream2.scss +<===> top_level_include_declaration/with_use_two_levels_deep/_upstream2.scss @use 'other'; @mixin a { b: c } @include a; -<===> top_level_include_declaration/with_use/two_levels_deep/other.scss +<===> top_level_include_declaration/with_use_two_levels_deep/other.scss // Intentionally empty. -<===> top_level_include_declaration/with_use/two_levels_deep/output.css +<===> top_level_include_declaration/with_use_two_levels_deep/output.css .a { b: c; } -<===> top_level_include_declaration/with_use/two_levels_deep/warning +<===> top_level_include_declaration/with_use_two_levels_deep/warning DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. More info and automated migrator: https://sass-lang.com/d/import , From 2954f583231e2dbc2504d858e1699b0aedaf7d47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Wed, 2 Jul 2025 14:22:20 -0700 Subject: [PATCH 3/5] fix tests --- spec/directives/import/nested.hrx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/spec/directives/import/nested.hrx b/spec/directives/import/nested.hrx index 8f0a6af27..5bc564976 100644 --- a/spec/directives/import/nested.hrx +++ b/spec/directives/import/nested.hrx @@ -349,7 +349,16 @@ More info and automated migrator: https://sass-lang.com/d/import DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. More info and automated migrator: https://sass-lang.com/d/import , -2 | @import 'upstream'; - | ^^^^^^^^^^ +2 | @import 'upstream1'; + | ^^^^^^^^^^^ ' input.scss 2:11 root stylesheet + +DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. +More info and automated migrator: https://sass-lang.com/d/import + , +1 | @import 'upstream2'; + | ^^^^^^^^^^^ + ' + _upstream1.scss 1:9 @import + input.scss 2:11 root stylesheet From ae122bf0c59fa37c42af8fdcf850d6a77a7ac00a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Wed, 16 Jul 2025 17:43:28 -0700 Subject: [PATCH 4/5] align with feedback --- README.md | 2 +- spec/directives/import/nested.hrx | 24 ++++++++++++------------ spec/directives/use/error/load.hrx | 25 ++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index f56ea1c95..07945a8e7 100644 --- a/README.md +++ b/README.md @@ -277,7 +277,7 @@ X. Exit testing. [implementation-specific expectations]: #implementation-specific-expectations -Any option can also be applied to all future occurences of that type of failure +Any option can also be applied to all future occurrences of that type of failure by adding `!` after it. For example, if you want to mark *all* failing specs as `:todo` for the current implementation you'd type `I!`. diff --git a/spec/directives/import/nested.hrx b/spec/directives/import/nested.hrx index 5bc564976..ca2bcf787 100644 --- a/spec/directives/import/nested.hrx +++ b/spec/directives/import/nested.hrx @@ -276,12 +276,12 @@ These are regression tests for https://github.com/sass/dart-sass/issues/2588. } <===> top_level_include_declaration/without_use/_upstream.scss -@mixin a { b: c } +@mixin b { c: d } @include a; <===> top_level_include_declaration/without_use/output.css .a { - b: c; + c: d; } <===> top_level_include_declaration/without_use/warning @@ -297,20 +297,20 @@ More info and automated migrator: https://sass-lang.com/d/import ================================================================================ <===> top_level_include_declaration/with_use/input.scss .a { - @import 'upstream'; + @import 'midstream'; } -<===> top_level_include_declaration/with_use/_upstream.scss -@use 'other'; -@mixin a { b: c } -@include a; +<===> top_level_include_declaration/with_use/_midstream.scss +@use 'upstream'; +@mixin b { c: d } +@include b; -<===> top_level_include_declaration/with_use/other.scss +<===> top_level_include_declaration/with_use/_other.scss // Intentionally empty. <===> top_level_include_declaration/with_use/output.css .a { - b: c; + c: d; } <===> top_level_include_declaration/with_use/warning @@ -334,15 +334,15 @@ More info and automated migrator: https://sass-lang.com/d/import <===> top_level_include_declaration/with_use_two_levels_deep/_upstream2.scss @use 'other'; -@mixin a { b: c } -@include a; +@mixin b { c: d } +@include b; <===> top_level_include_declaration/with_use_two_levels_deep/other.scss // Intentionally empty. <===> top_level_include_declaration/with_use_two_levels_deep/output.css .a { - b: c; + c: d; } <===> top_level_include_declaration/with_use_two_levels_deep/warning diff --git a/spec/directives/use/error/load.hrx b/spec/directives/use/error/load.hrx index 16a94cf23..90a90773d 100644 --- a/spec/directives/use/error/load.hrx +++ b/spec/directives/use/error/load.hrx @@ -331,14 +331,14 @@ Error: There's already a module with namespace "other". <===> ================================================================================ -<===> top_level_include_declaration/input.scss +<===> top_level_include_declaration/upstream_mixin/input.scss @use "upstream"; @include upstream.a; -<===> top_level_include_declaration/_upstream.scss +<===> top_level_include_declaration/upstream_mixin/_upstream.scss @mixin a { b: c } -<===> top_level_include_declaration/error +<===> top_level_include_declaration/upstream_mixin/error Error: Declarations may only be used within style rules. , 1 | @mixin a { b: c } @@ -346,3 +346,22 @@ Error: Declarations may only be used within style rules. ' _upstream.scss 1:12 a() input.scss 2:1 root stylesheet + +<===> +================================================================================ +<===> top_level_include_declaration/input_mixin/input.scss +@use 'upstream'; +@mixin a { b: c } +@include a; + +<===> top_level_include_declaration/input_mixin/_upstream.scss +// Intentionally empty. + +<===> top_level_include_declaration/input_mixin/error +Error: Declarations may only be used within style rules. + , +2 | @mixin a { b: c } + | ^^^^^ + ' + input.scss 2:12 a() + input.scss 3:1 root stylesheet From 86699559dd05604c00ecee3e7c060dd5ac82ccb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Wed, 16 Jul 2025 18:21:05 -0700 Subject: [PATCH 5/5] fix tests --- .../meta/load_css/error/load.hrx | 20 ++++++ spec/core_functions/meta/load_css/extend.hrx | 61 +++++++++++++++++++ spec/directives/import/nested.hrx | 38 +++++++----- 3 files changed, 103 insertions(+), 16 deletions(-) diff --git a/spec/core_functions/meta/load_css/error/load.hrx b/spec/core_functions/meta/load_css/error/load.hrx index c4f7fcaa1..37be4229e 100644 --- a/spec/core_functions/meta/load_css/error/load.hrx +++ b/spec/core_functions/meta/load_css/error/load.hrx @@ -34,3 +34,23 @@ Error: Module loop: input.scss is already being loaded. ' _other.scss 2:1 load-css() input.scss 2:1 root stylesheet + +<===> +================================================================================ +<===> top_level_include_declaration/input.scss +@use "sass:meta"; +@include meta.load-css("upstream"); + +<===> top_level_include_declaration/_upstream.scss +@mixin a { b: c } +@include a; + +<===> top_level_include_declaration/error +Error: Declarations may only be used within style rules. + , +1 | @mixin a { b: c } + | ^^^^^ + ' + _upstream.scss 1:12 a() + _upstream.scss 2:1 load-css() + input.scss 2:1 root stylesheet diff --git a/spec/core_functions/meta/load_css/extend.hrx b/spec/core_functions/meta/load_css/extend.hrx index 1cbddd0e1..b04889a63 100644 --- a/spec/core_functions/meta/load_css/extend.hrx +++ b/spec/core_functions/meta/load_css/extend.hrx @@ -104,3 +104,64 @@ a { .target, .extender { a: b; } + +<===> +================================================================================ +<===> nested/README.md +These are regression tests for https://github.com/sass/dart-sass/issues/2588. + +<===> +================================================================================ +<===> nested/without_use/input.scss +@use 'sass:meta'; +.a { + @include meta.load-css('upstream'); +} + +<===> nested/without_use/_upstream.scss +@mixin b { c: d } +@include b; + +<===> nested/without_use/output.css +.a { + c: d; +} + +<===> nested/without_use/warning +DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. +More info and automated migrator: https://sass-lang.com/d/import + , +2 | @import 'upstream'; + | ^^^^^^^^^^ + ' + input.scss 2:11 root stylesheet + +<===> +================================================================================ +<===> nested/with_use/input.scss +@use 'sass:meta'; +.a { + @include meta.load-css('midstream'); +} + +<===> nested/with_use/_midstream.scss +@use 'upstream'; +@mixin b { c: d } +@include b; + +<===> nested/with_use/_upstream.scss +// Intentionally empty. + +<===> nested/with_use/output.css +.a { + c: d; +} + +<===> nested/with_use/warning +DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. +More info and automated migrator: https://sass-lang.com/d/import + , +2 | @import 'upstream'; + | ^^^^^^^^^^ + ' + input.scss 2:11 root stylesheet diff --git a/spec/directives/import/nested.hrx b/spec/directives/import/nested.hrx index ca2bcf787..57dcb71e3 100644 --- a/spec/directives/import/nested.hrx +++ b/spec/directives/import/nested.hrx @@ -277,7 +277,7 @@ These are regression tests for https://github.com/sass/dart-sass/issues/2588. <===> top_level_include_declaration/without_use/_upstream.scss @mixin b { c: d } -@include a; +@include b; <===> top_level_include_declaration/without_use/output.css .a { @@ -305,7 +305,7 @@ More info and automated migrator: https://sass-lang.com/d/import @mixin b { c: d } @include b; -<===> top_level_include_declaration/with_use/_other.scss +<===> top_level_include_declaration/with_use/_upstream.scss // Intentionally empty. <===> top_level_include_declaration/with_use/output.css @@ -315,10 +315,12 @@ More info and automated migrator: https://sass-lang.com/d/import <===> top_level_include_declaration/with_use/warning DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. + More info and automated migrator: https://sass-lang.com/d/import + , -2 | @import 'upstream'; - | ^^^^^^^^^^ +2 | @import 'midstream'; + | ^^^^^^^^^^^ ' input.scss 2:11 root stylesheet @@ -326,18 +328,18 @@ More info and automated migrator: https://sass-lang.com/d/import ================================================================================ <===> top_level_include_declaration/with_use_two_levels_deep/input.scss .a { - @import 'upstream1'; + @import 'midstream1'; } -<===> top_level_include_declaration/with_use_two_levels_deep/_upstream1.scss -@import 'upstream2'; +<===> top_level_include_declaration/with_use_two_levels_deep/_midstream1.scss +@import 'midstream2'; -<===> top_level_include_declaration/with_use_two_levels_deep/_upstream2.scss -@use 'other'; +<===> top_level_include_declaration/with_use_two_levels_deep/_midstream2.scss +@use 'upstream'; @mixin b { c: d } @include b; -<===> top_level_include_declaration/with_use_two_levels_deep/other.scss +<===> top_level_include_declaration/with_use_two_levels_deep/_upstream.scss // Intentionally empty. <===> top_level_include_declaration/with_use_two_levels_deep/output.css @@ -347,18 +349,22 @@ More info and automated migrator: https://sass-lang.com/d/import <===> top_level_include_declaration/with_use_two_levels_deep/warning DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. + More info and automated migrator: https://sass-lang.com/d/import + , -2 | @import 'upstream1'; - | ^^^^^^^^^^^ +2 | @import 'midstream1'; + | ^^^^^^^^^^^^ ' input.scss 2:11 root stylesheet DEPRECATION WARNING [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. + More info and automated migrator: https://sass-lang.com/d/import + , -1 | @import 'upstream2'; - | ^^^^^^^^^^^ +1 | @import 'midstream2'; + | ^^^^^^^^^^^^ ' - _upstream1.scss 1:9 @import - input.scss 2:11 root stylesheet + _midstream1.scss 1:9 @import + input.scss 2:11 root stylesheet