From 88fb26d19f3cc631d540645f467df3b3a86501fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Tue, 21 Jun 2022 17:09:43 -0700 Subject: [PATCH 1/7] Repro dart-sass#1716 --- spec/directives/forward/with.hrx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/spec/directives/forward/with.hrx b/spec/directives/forward/with.hrx index 1a71571b40..82e959a698 100644 --- a/spec/directives/forward/with.hrx +++ b/spec/directives/forward/with.hrx @@ -656,3 +656,24 @@ b { midstream1: overridden 1; midstream2: overridden 2; } + +<===> +================================================================================ +<===> use/multiple/same_file/input.scss +@use 'module' with ( + $whatever1: 'foo', +); + +<===> use/multiple/same_file/module/list/_variables.scss + +<===> use/multiple/same_file/module/list/list-item.scss +@forward './variables'; + +<===> use/multiple/same_file/module/list/list.scss +@forward './variables'; + +<===> use/multiple/same_file/module/_index.scss +@forward './list/list'; +@forward './list/list-item'; + +<===> use/multiple/same_file/output.css From d0a9638be753afa98fb063c9334134bbc5c69299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Tue, 21 Jun 2022 17:18:59 -0700 Subject: [PATCH 2/7] additional case with passing but similar case --- spec/directives/forward/with.hrx | 49 +++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/spec/directives/forward/with.hrx b/spec/directives/forward/with.hrx index 82e959a698..b596b4ee8c 100644 --- a/spec/directives/forward/with.hrx +++ b/spec/directives/forward/with.hrx @@ -657,6 +657,47 @@ b { midstream2: overridden 2; } +<===> +================================================================================ +<===> use/multiple/same_file_works/input.scss +@use 'module' with ( + $list-variable: 'foo', + // $other: 'baz', <- uncommenting this is OK + // $whatever: 'bar', <- uncommenting this causes the module loaded twice err +); + +<===> use/multiple/same_file_works/module/_index.scss +@forward './list/list'; +@forward './list/list-item'; + +<===> use/multiple/same_file_works/module/list/_variables.scss +$list-variable: default !default; +$other: default !default; + +<===> use/multiple/same_file_works/module/list/list-item.scss +@forward './variables'; +@use './variables' as *; + +.list { + content: #{$list-variable}; +} + +<===> use/multiple/same_file_works/module/list/list.scss +@forward './variables'; +@use './variables' as *; + +.list-item { + content: #{$list-variable}; +} + +<===> use/multiple/same_file_works/output.css +.list-item { + content: foo; +} +.list { + content: foo; +} + <===> ================================================================================ <===> use/multiple/same_file/input.scss @@ -664,6 +705,10 @@ b { $whatever1: 'foo', ); +<===> use/multiple/same_file/module/_index.scss +@forward './list/list'; +@forward './list/list-item'; + <===> use/multiple/same_file/module/list/_variables.scss <===> use/multiple/same_file/module/list/list-item.scss @@ -672,8 +717,4 @@ b { <===> use/multiple/same_file/module/list/list.scss @forward './variables'; -<===> use/multiple/same_file/module/_index.scss -@forward './list/list'; -@forward './list/list-item'; - <===> use/multiple/same_file/output.css From 75eb8a062e471ec3febf68a6061cce09c4a89d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Wed, 13 Jul 2022 17:05:50 -0700 Subject: [PATCH 3/7] move tests from @forward to @use, make more generic too --- spec/directives/forward/with.hrx | 62 ----------------- spec/directives/use/error/with.hrx | 106 +++++++++++++++++++++++++++++ spec/directives/use/with.hrx | 106 +++++++++++++++++++++++++++++ 3 files changed, 212 insertions(+), 62 deletions(-) diff --git a/spec/directives/forward/with.hrx b/spec/directives/forward/with.hrx index b596b4ee8c..1a71571b40 100644 --- a/spec/directives/forward/with.hrx +++ b/spec/directives/forward/with.hrx @@ -656,65 +656,3 @@ b { midstream1: overridden 1; midstream2: overridden 2; } - -<===> -================================================================================ -<===> use/multiple/same_file_works/input.scss -@use 'module' with ( - $list-variable: 'foo', - // $other: 'baz', <- uncommenting this is OK - // $whatever: 'bar', <- uncommenting this causes the module loaded twice err -); - -<===> use/multiple/same_file_works/module/_index.scss -@forward './list/list'; -@forward './list/list-item'; - -<===> use/multiple/same_file_works/module/list/_variables.scss -$list-variable: default !default; -$other: default !default; - -<===> use/multiple/same_file_works/module/list/list-item.scss -@forward './variables'; -@use './variables' as *; - -.list { - content: #{$list-variable}; -} - -<===> use/multiple/same_file_works/module/list/list.scss -@forward './variables'; -@use './variables' as *; - -.list-item { - content: #{$list-variable}; -} - -<===> use/multiple/same_file_works/output.css -.list-item { - content: foo; -} -.list { - content: foo; -} - -<===> -================================================================================ -<===> use/multiple/same_file/input.scss -@use 'module' with ( - $whatever1: 'foo', -); - -<===> use/multiple/same_file/module/_index.scss -@forward './list/list'; -@forward './list/list-item'; - -<===> use/multiple/same_file/module/list/_variables.scss - -<===> use/multiple/same_file/module/list/list-item.scss -@forward './variables'; - -<===> use/multiple/same_file/module/list/list.scss -@forward './variables'; - -<===> use/multiple/same_file/output.css diff --git a/spec/directives/use/error/with.hrx b/spec/directives/use/error/with.hrx index 6775cf8bce..1e2ffd1c81 100644 --- a/spec/directives/use/error/with.hrx +++ b/spec/directives/use/error/with.hrx @@ -351,3 +351,109 @@ Error: This variable was not declared with !default in the @used module. | ^^^^^ ' input.scss 1:19 root stylesheet + +<===> +================================================================================ +<===> unused_distributed_vars/README.md +A module may load different sets of variables across multiple files triggering +validation of re-using the same module configuration multiple times. + +These tests verify the configuration is reused by opaque ID across multiple +source files preventing unexpected behaviors when variables are declared on +separate files with validations that occur when a module is used more than once. + + +<===> +================================================================================ +<===> unused_distributed_vars/single_use/input.scss +@use 'module' with ( + $foo: 'foo', + $bar: 'bar', + $baz: 'baz', +); + +<===> unused_distributed_vars/single_use/module/_index.scss +@forward './foo/foo'; +@forward './bar/bar'; + +<===> unused_distributed_vars/single_use/module/foo/_variables.scss +$foo: default !default; + +<===> unused_distributed_vars/single_use/module/foo/foo.scss +@forward './variables'; +@use './variables' as *; + +.foo { + content: #{$foo}; +} + +<===> unused_distributed_vars/single_use/module/bar/_variables.scss +$bar: default !default; + +<===> unused_distributed_vars/single_use/module/bar/bar.scss +@forward './variables'; +@use './variables' as *; + +.bar { + content: #{$bar}; +} + +<===> unused_distributed_vars/single_use/error +Error: This variable was not declared with !default in the @used module. + , +4 | $baz: 'baz', + | ^^^^^^^^^^^ + ' + input.scss 4:3 root stylesheet + +<===> +================================================================================ +<===> unused_distributed_vars/multi_use/input.scss +@use 'module' with ( + $foo: 'foo', + $bar: 'bar', + $baz: 'baz', +); + +<===> unused_distributed_vars/multi_use/module/_index.scss +@forward './foo/foo1'; +@forward './foo/foo2'; +@forward './bar/bar'; + +<===> unused_distributed_vars/multi_use/module/foo/_variables.scss +$foo: default !default; + +<===> unused_distributed_vars/multi_use/module/foo/foo1.scss +@forward './variables'; +@use './variables' as *; + +.foo1 { + content: #{$foo}; +} + +<===> unused_distributed_vars/multi_use/module/foo/foo2.scss +@forward './variables'; +@use './variables' as *; + +.foo2 { + content: #{$foo}; +} + +<===> unused_distributed_vars/multi_use/module/bar/_variables.scss +$bar: default !default; + +<===> unused_distributed_vars/multi_use/module/bar/bar.scss +@forward './variables'; +@use './variables' as *; + +.bar { + content: #{$bar}; +} + +<===> unused_distributed_vars/multi_use/error +Error: This variable was not declared with !default in the @used module. + , +4 | $baz: 'baz', + | ^^^^^^^^^^^ + ' + input.scss 4:3 root stylesheet diff --git a/spec/directives/use/with.hrx b/spec/directives/use/with.hrx index 3e0bed5791..8043f845d2 100644 --- a/spec/directives/use/with.hrx +++ b/spec/directives/use/with.hrx @@ -581,3 +581,109 @@ b { midstream1: overridden 1; midstream2: overridden 2; } + +<===> +================================================================================ +<===> distributed_vars/README.md +A module may load different sets of variables across multiple files triggering +validation of re-using the same module configuration multiple times. + +These tests verify the configuration is reused by opaque ID across multiple +source files preventing unexpected behaviors when variables are declared on +separate files with validations that occur when a module is used more than once. + +<===> +================================================================================ +<===> distributed_vars/single_use/input.scss +@use 'module' with ( + $foo: 'foo', + $bar: 'bar', +); + +<===> distributed_vars/single_use/module/_index.scss +@forward './foo/foo'; +@forward './bar/bar'; + +<===> distributed_vars/single_use/module/foo/_variables.scss +$foo: default !default; + +<===> distributed_vars/single_use/module/foo/foo.scss +@forward './variables'; +@use './variables' as *; + +.foo { + content: #{$foo}; +} + +<===> distributed_vars/single_use/module/bar/_variables.scss +$bar: default !default; + +<===> distributed_vars/single_use/module/bar/bar.scss +@forward './variables'; +@use './variables' as *; + +.bar { + content: #{$bar}; +} + +<===> distributed_vars/single_use/output.css +.foo { + content: foo; +} +.bar { + content: bar; +} + +<===> +================================================================================ +<===> distributed_vars/repeated/input.scss +@use 'module' with ( + $foo: 'foo', + $bar: 'bar', +); + +<===> distributed_vars/repeated/module/_index.scss +@forward './foo/foo1'; +@forward './foo/foo2'; +@forward './bar/bar'; + +<===> distributed_vars/repeated/module/foo/_variables.scss +$foo: default !default; + +<===> distributed_vars/repeated/module/foo/foo1.scss +@forward './variables'; +@use './variables' as *; + +.foo1 { + content: #{$foo}; +} + +<===> distributed_vars/repeated/module/foo/foo2.scss +@forward './variables'; +@use './variables' as *; + +.foo2 { + content: #{$foo}; +} + +<===> distributed_vars/repeated/module/bar/_variables.scss +$bar: default !default; + +<===> distributed_vars/repeated/module/bar/bar.scss +@forward './variables'; +@use './variables' as *; + +.bar { + content: #{$bar}; +} + +<===> distributed_vars/repeated/output.css +.foo1 { + content: foo; +} +.foo2 { + content: foo; +} +.bar { + content: bar; +} From 357fc324c3da4be5ecf4c94c06d14b5bf48db2a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Wed, 13 Jul 2022 19:11:54 -0700 Subject: [PATCH 4/7] empty commit From 2f2e6ca7635ac0f7d80ce0872fda19aeb2db23b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Fri, 15 Jul 2022 12:12:03 -0700 Subject: [PATCH 5/7] use single-leter names for irrelevant placeholders --- spec/directives/use/error/with.hrx | 90 +++++++++++++++--------------- spec/directives/use/with.hrx | 84 ++++++++++++++-------------- 2 files changed, 87 insertions(+), 87 deletions(-) diff --git a/spec/directives/use/error/with.hrx b/spec/directives/use/error/with.hrx index 1e2ffd1c81..513181c4ab 100644 --- a/spec/directives/use/error/with.hrx +++ b/spec/directives/use/error/with.hrx @@ -354,7 +354,7 @@ Error: This variable was not declared with !default in the @used module. <===> ================================================================================ -<===> unused_distributed_vars/README.md +<===> missing_distributed_vars/README.md A module may load different sets of variables across multiple files triggering validation of re-using the same module configuration multiple times. @@ -365,95 +365,95 @@ separate files with validations that occur when a module is used more than once. <===> ================================================================================ -<===> unused_distributed_vars/single_use/input.scss +<===> missing_distributed_vars/single_use/input.scss @use 'module' with ( - $foo: 'foo', - $bar: 'bar', - $baz: 'baz', + $a: 'a', + $b: 'b', + $missing: 'c', ); -<===> unused_distributed_vars/single_use/module/_index.scss -@forward './foo/foo'; -@forward './bar/bar'; +<===> missing_distributed_vars/single_use/module/_index.scss +@forward './a/a'; +@forward './b/b'; -<===> unused_distributed_vars/single_use/module/foo/_variables.scss -$foo: default !default; +<===> missing_distributed_vars/single_use/module/a/_variables.scss +$a: default !default; -<===> unused_distributed_vars/single_use/module/foo/foo.scss +<===> missing_distributed_vars/single_use/module/a/a.scss @forward './variables'; @use './variables' as *; -.foo { - content: #{$foo}; +.a { + content: #{$a}; } -<===> unused_distributed_vars/single_use/module/bar/_variables.scss -$bar: default !default; +<===> missing_distributed_vars/single_use/module/b/_variables.scss +$b: default !default; -<===> unused_distributed_vars/single_use/module/bar/bar.scss +<===> missing_distributed_vars/single_use/module/b/b.scss @forward './variables'; @use './variables' as *; -.bar { - content: #{$bar}; +.b { + content: #{$b}; } -<===> unused_distributed_vars/single_use/error +<===> missing_distributed_vars/single_use/error Error: This variable was not declared with !default in the @used module. , -4 | $baz: 'baz', - | ^^^^^^^^^^^ +4 | $missing: 'c', + | ^^^^^^^^^^^^^ ' input.scss 4:3 root stylesheet <===> ================================================================================ -<===> unused_distributed_vars/multi_use/input.scss +<===> missing_distributed_vars/multi_use/input.scss @use 'module' with ( - $foo: 'foo', - $bar: 'bar', - $baz: 'baz', + $a: 'a', + $b: 'b', + $missing: 'c', ); -<===> unused_distributed_vars/multi_use/module/_index.scss -@forward './foo/foo1'; -@forward './foo/foo2'; -@forward './bar/bar'; +<===> missing_distributed_vars/multi_use/module/_index.scss +@forward './a/a1'; +@forward './a/a2'; +@forward './b/b'; -<===> unused_distributed_vars/multi_use/module/foo/_variables.scss -$foo: default !default; +<===> missing_distributed_vars/multi_use/module/a/_variables.scss +$a: default !default; -<===> unused_distributed_vars/multi_use/module/foo/foo1.scss +<===> missing_distributed_vars/multi_use/module/a/a1.scss @forward './variables'; @use './variables' as *; -.foo1 { - content: #{$foo}; +.a1 { + content: #{$a}; } -<===> unused_distributed_vars/multi_use/module/foo/foo2.scss +<===> missing_distributed_vars/multi_use/module/a/a2.scss @forward './variables'; @use './variables' as *; -.foo2 { - content: #{$foo}; +.a2 { + content: #{$a}; } -<===> unused_distributed_vars/multi_use/module/bar/_variables.scss -$bar: default !default; +<===> missing_distributed_vars/multi_use/module/b/_variables.scss +$b: default !default; -<===> unused_distributed_vars/multi_use/module/bar/bar.scss +<===> missing_distributed_vars/multi_use/module/b/b.scss @forward './variables'; @use './variables' as *; -.bar { - content: #{$bar}; +.b { + content: #{$b}; } -<===> unused_distributed_vars/multi_use/error +<===> missing_distributed_vars/multi_use/error Error: This variable was not declared with !default in the @used module. , -4 | $baz: 'baz', - | ^^^^^^^^^^^ +4 | $missing: 'c', + | ^^^^^^^^^^^^^ ' input.scss 4:3 root stylesheet diff --git a/spec/directives/use/with.hrx b/spec/directives/use/with.hrx index 8043f845d2..80547bf85e 100644 --- a/spec/directives/use/with.hrx +++ b/spec/directives/use/with.hrx @@ -596,94 +596,94 @@ separate files with validations that occur when a module is used more than once. ================================================================================ <===> distributed_vars/single_use/input.scss @use 'module' with ( - $foo: 'foo', - $bar: 'bar', + $a: 'a', + $b: 'b', ); <===> distributed_vars/single_use/module/_index.scss -@forward './foo/foo'; -@forward './bar/bar'; +@forward './a/a'; +@forward './b/b'; -<===> distributed_vars/single_use/module/foo/_variables.scss -$foo: default !default; +<===> distributed_vars/single_use/module/a/_variables.scss +$a: default !default; -<===> distributed_vars/single_use/module/foo/foo.scss +<===> distributed_vars/single_use/module/a/a.scss @forward './variables'; @use './variables' as *; -.foo { - content: #{$foo}; +.a { + content: #{$a}; } -<===> distributed_vars/single_use/module/bar/_variables.scss -$bar: default !default; +<===> distributed_vars/single_use/module/b/_variables.scss +$b: default !default; -<===> distributed_vars/single_use/module/bar/bar.scss +<===> distributed_vars/single_use/module/b/b.scss @forward './variables'; @use './variables' as *; -.bar { - content: #{$bar}; +.b { + content: #{$b}; } <===> distributed_vars/single_use/output.css -.foo { - content: foo; +.a { + content: a; } -.bar { - content: bar; +.b { + content: b; } <===> ================================================================================ <===> distributed_vars/repeated/input.scss @use 'module' with ( - $foo: 'foo', - $bar: 'bar', + $a: 'a', + $b: 'b', ); <===> distributed_vars/repeated/module/_index.scss -@forward './foo/foo1'; -@forward './foo/foo2'; -@forward './bar/bar'; +@forward './a/a1'; +@forward './a/a2'; +@forward './b/b'; -<===> distributed_vars/repeated/module/foo/_variables.scss -$foo: default !default; +<===> distributed_vars/repeated/module/a/_variables.scss +$a: default !default; -<===> distributed_vars/repeated/module/foo/foo1.scss +<===> distributed_vars/repeated/module/a/a1.scss @forward './variables'; @use './variables' as *; -.foo1 { - content: #{$foo}; +.a1 { + content: #{$a}; } -<===> distributed_vars/repeated/module/foo/foo2.scss +<===> distributed_vars/repeated/module/a/a2.scss @forward './variables'; @use './variables' as *; -.foo2 { - content: #{$foo}; +.a2 { + content: #{$a}; } -<===> distributed_vars/repeated/module/bar/_variables.scss -$bar: default !default; +<===> distributed_vars/repeated/module/b/_variables.scss +$b: default !default; -<===> distributed_vars/repeated/module/bar/bar.scss +<===> distributed_vars/repeated/module/b/b.scss @forward './variables'; @use './variables' as *; -.bar { - content: #{$bar}; +.b { + content: #{$b}; } <===> distributed_vars/repeated/output.css -.foo1 { - content: foo; +.a1 { + content: a; } -.foo2 { - content: foo; +.a2 { + content: a; } -.bar { - content: bar; +.b { + content: b; } From 71922fee6c142f23be12df1ddd3797c84e4632a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Mon, 18 Jul 2022 12:06:36 -0700 Subject: [PATCH 6/7] make sure forwarding twice still breaks --- spec/directives/use/error/with.hrx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/spec/directives/use/error/with.hrx b/spec/directives/use/error/with.hrx index 513181c4ab..534d1a6ffe 100644 --- a/spec/directives/use/error/with.hrx +++ b/spec/directives/use/error/with.hrx @@ -352,6 +352,30 @@ Error: This variable was not declared with !default in the @used module. ' input.scss 1:19 root stylesheet +<===> +================================================================================ +<===> through_forward_twice/with/input.scss +@use "used" with ($a: input a); + +<===> through_forward_twice/with/_used.scss +@forward "forwarded" with ($a: used a 1); +@forward "forwarded" with ($a: used a 2); + +<===> through_forward_twice/with/_forwarded.scss +$a: forwarded a !default; +$b: forwarded b !default; + +<===> through_forward_twice/with/error +Error: This module was already loaded, so it can't be configured using "with". + , +1 | @forward "forwarded" with ($a: used a 1); + | ======================================== original load +2 | @forward "forwarded" with ($a: used a 2); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ new load + ' + _used.scss 2:1 @use + input.scss 1:1 root stylesheet + <===> ================================================================================ <===> missing_distributed_vars/README.md From 43ca5657f523fccdc1c347dbc9ec90730cd2867e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Israel=20Ortiz=20Garc=C3=ADa?= Date: Tue, 19 Jul 2022 18:21:52 -0700 Subject: [PATCH 7/7] fix @forward with new opaqueID inheritance logic expectations --- spec/directives/use/error/with.hrx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/directives/use/error/with.hrx b/spec/directives/use/error/with.hrx index 534d1a6ffe..3a5898f213 100644 --- a/spec/directives/use/error/with.hrx +++ b/spec/directives/use/error/with.hrx @@ -358,8 +358,8 @@ Error: This variable was not declared with !default in the @used module. @use "used" with ($a: input a); <===> through_forward_twice/with/_used.scss -@forward "forwarded" with ($a: used a 1); -@forward "forwarded" with ($a: used a 2); +@forward "forwarded" with ($a: used a 1 !default); +@forward "forwarded" with ($a: used a 2 !default); <===> through_forward_twice/with/_forwarded.scss $a: forwarded a !default; @@ -368,10 +368,10 @@ $b: forwarded b !default; <===> through_forward_twice/with/error Error: This module was already loaded, so it can't be configured using "with". , -1 | @forward "forwarded" with ($a: used a 1); - | ======================================== original load -2 | @forward "forwarded" with ($a: used a 2); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ new load +1 | @forward "forwarded" with ($a: used a 1 !default); + | ================================================= original load +2 | @forward "forwarded" with ($a: used a 2 !default); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ new load ' _used.scss 2:1 @use input.scss 1:1 root stylesheet