From aefc9a48e5368c28238a4910760097fb67e6c4ea Mon Sep 17 00:00:00 2001 From: Boyen Vaesen Date: Wed, 17 Jun 2020 03:26:28 +0200 Subject: [PATCH] Fix: [Sass] Unexpectedly add extra space after function when passing arbitrary arguments (#8567) Co-authored-by: Boyen Vaesen --- changelog_unreleased/css/pr-8567.md | 22 +++ src/language-css/printer-postcss.js | 4 + .../scss/__snapshots__/jsfmt.spec.js.snap | 149 ++++++++++++++++++ tests/scss/scss/arbitrary-arguments.scss | 31 ++++ 4 files changed, 206 insertions(+) create mode 100644 changelog_unreleased/css/pr-8567.md create mode 100644 tests/scss/scss/arbitrary-arguments.scss diff --git a/changelog_unreleased/css/pr-8567.md b/changelog_unreleased/css/pr-8567.md new file mode 100644 index 000000000..3860e4169 --- /dev/null +++ b/changelog_unreleased/css/pr-8567.md @@ -0,0 +1,22 @@ +#### Fix: [Sass] Unexpectedly add extra space after function when passing arbitrary arguments ([#8567](https://github.com/prettier/prettier/pull/8567) by [@boyenn](https://github.com/boyenn)) + + +```css +/* Input */ +body { + test: function($list...); + test: function(return-list($list)...); +} + +/* Prettier stable */ +body { + test: function($list...); + test: function(return-list($list) ...); +} + +/* Prettier master */ +body { + test: function($list...); + test: function(return-list($list)...); +} +``` diff --git a/src/language-css/printer-postcss.js b/src/language-css/printer-postcss.js index 6335eedaa..d0ff8f786 100644 --- a/src/language-css/printer-postcss.js +++ b/src/language-css/printer-postcss.js @@ -777,6 +777,10 @@ function genericPrint(path, options, print) { continue; } + // allow function(returns-list($list)...) + if (iNextNode && iNextNode.value === "...") { + continue; + } // Be default all values go through `line` parts.push(line); diff --git a/tests/scss/scss/__snapshots__/jsfmt.spec.js.snap b/tests/scss/scss/__snapshots__/jsfmt.spec.js.snap index 3060d638c..e2388dddc 100644 --- a/tests/scss/scss/__snapshots__/jsfmt.spec.js.snap +++ b/tests/scss/scss/__snapshots__/jsfmt.spec.js.snap @@ -1,5 +1,154 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`arbitrary-arguments.scss - {"trailingComma":"none"} format 1`] = ` +====================================options===================================== +parsers: ["scss"] +printWidth: 80 +trailingComma: "none" + | printWidth +=====================================input====================================== +body { + test: foo(return-list($list)...); +} +body { + test: foo(bar($list)...); +} +body { + test: foo($list...); +} +@mixin syntax-colors($args...) { + @debug meta.keywords($args); + // (string: #080, comment: #800, variable: $60b) + + @each $name, $color in meta.keywords($args) { + pre span.stx-#{$name} { + color: $color; + } + } +} +$form-selectors: "input.name", "input.address", "input.zip" !default; +@include order(150px, $form-selectors...); +@mixin linear-gradient($direction, $gradients...) { + background-color: nth($gradients, 1); + background-image: linear-gradient($direction, $gradients...); +} +$parameters: ( + 'c': 'kittens', + 'a': true, + 'b': 42 +); +$value: dummy($parameters...); + +=====================================output===================================== +body { + test: foo(return-list($list)...); +} +body { + test: foo(bar($list)...); +} +body { + test: foo($list...); +} +@mixin syntax-colors($args...) { + @debug meta.keywords($args); + // (string: #080, comment: #800, variable: $60b) + + @each $name, $color in meta.keywords($args) { + pre span.stx-#{$name} { + color: $color; + } + } +} +$form-selectors: "input.name", "input.address", "input.zip" !default; +@include order(150px, $form-selectors...); +@mixin linear-gradient($direction, $gradients...) { + background-color: nth($gradients, 1); + background-image: linear-gradient($direction, $gradients...); +} +$parameters: ( + "c": "kittens", + "a": true, + "b": 42 +); +$value: dummy($parameters...); + +================================================================================ +`; + +exports[`arbitrary-arguments.scss format 1`] = ` +====================================options===================================== +parsers: ["scss"] +printWidth: 80 + | printWidth +=====================================input====================================== +body { + test: foo(return-list($list)...); +} +body { + test: foo(bar($list)...); +} +body { + test: foo($list...); +} +@mixin syntax-colors($args...) { + @debug meta.keywords($args); + // (string: #080, comment: #800, variable: $60b) + + @each $name, $color in meta.keywords($args) { + pre span.stx-#{$name} { + color: $color; + } + } +} +$form-selectors: "input.name", "input.address", "input.zip" !default; +@include order(150px, $form-selectors...); +@mixin linear-gradient($direction, $gradients...) { + background-color: nth($gradients, 1); + background-image: linear-gradient($direction, $gradients...); +} +$parameters: ( + 'c': 'kittens', + 'a': true, + 'b': 42 +); +$value: dummy($parameters...); + +=====================================output===================================== +body { + test: foo(return-list($list)...); +} +body { + test: foo(bar($list)...); +} +body { + test: foo($list...); +} +@mixin syntax-colors($args...) { + @debug meta.keywords($args); + // (string: #080, comment: #800, variable: $60b) + + @each $name, $color in meta.keywords($args) { + pre span.stx-#{$name} { + color: $color; + } + } +} +$form-selectors: "input.name", "input.address", "input.zip" !default; +@include order(150px, $form-selectors...); +@mixin linear-gradient($direction, $gradients...) { + background-color: nth($gradients, 1); + background-image: linear-gradient($direction, $gradients...); +} +$parameters: ( + "c": "kittens", + "a": true, + "b": 42, +); +$value: dummy($parameters...); + +================================================================================ +`; + exports[`comments.scss - {"trailingComma":"none"} format 1`] = ` ====================================options===================================== parsers: ["scss"] diff --git a/tests/scss/scss/arbitrary-arguments.scss b/tests/scss/scss/arbitrary-arguments.scss new file mode 100644 index 000000000..b290d5a6c --- /dev/null +++ b/tests/scss/scss/arbitrary-arguments.scss @@ -0,0 +1,31 @@ +body { + test: foo(return-list($list)...); +} +body { + test: foo(bar($list)...); +} +body { + test: foo($list...); +} +@mixin syntax-colors($args...) { + @debug meta.keywords($args); + // (string: #080, comment: #800, variable: $60b) + + @each $name, $color in meta.keywords($args) { + pre span.stx-#{$name} { + color: $color; + } + } +} +$form-selectors: "input.name", "input.address", "input.zip" !default; +@include order(150px, $form-selectors...); +@mixin linear-gradient($direction, $gradients...) { + background-color: nth($gradients, 1); + background-image: linear-gradient($direction, $gradients...); +} +$parameters: ( + 'c': 'kittens', + 'a': true, + 'b': 42 +); +$value: dummy($parameters...);