Remove space before ; delimiter in SCSS if() function (#19384)
Co-authored-by: fisker <lionkay@gmail.com>
This commit is contained in:
1 parent
a42e063d5c
commit
45f6a5ff0f
6 files changed
+119
No files matched your search
@@ -0,0 +1,13 @@
|
|||||||
|
#### Remove space before `;` delimiter in SCSS `if()` function (#19384 by @kovsu)
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```scss
|
||||||
|
// Input
|
||||||
|
$value: if(sass($x): 1 ; else: 2);
|
||||||
|
|
||||||
|
// Prettier stable
|
||||||
|
$value: if(sass($x): 1 ; else: 2);
|
||||||
|
|
||||||
|
// Prettier main
|
||||||
|
$value: if(sass($x): 1; else: 2);
|
||||||
|
```
|
||||||
@@ -209,6 +209,39 @@ function massageAstNode(original, cloned, parent) {
|
|||||||
value: original.groups.map((node) => node.value).join(""),
|
value: original.groups.map((node) => node.value).join(""),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
original.type === "value-func" &&
|
||||||
|
original.value === "if" &&
|
||||||
|
original.group.type === "value-paren_group" &&
|
||||||
|
original.group.groups.length === 1 &&
|
||||||
|
original.group.groups[0].type === "value-comma_group"
|
||||||
|
) {
|
||||||
|
const originalGroups = original.group.groups[0].groups;
|
||||||
|
const clonedGroups = cloned.group.groups[0].groups;
|
||||||
|
|
||||||
|
// `if(sass(true): 10px ; else: 15px)`
|
||||||
|
// ^
|
||||||
|
for (let index = originalGroups.length - 1; index >= 0; index--) {
|
||||||
|
const group = originalGroups[index];
|
||||||
|
|
||||||
|
if (
|
||||||
|
group.type === "value-word" &&
|
||||||
|
typeof group.value === "string" &&
|
||||||
|
group.value.endsWith(";")
|
||||||
|
) {
|
||||||
|
if (group.value === ";") {
|
||||||
|
const previousGroup = originalGroups[index - 1];
|
||||||
|
if (previousGroup?.type === "value-number") {
|
||||||
|
clonedGroups.splice(index - 1, 2, { type: "#node-placeholder" });
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
clonedGroups[index] = { type: "#node-placeholder" };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
massageAstNode.ignoredProperties = ignoredProperties;
|
massageAstNode.ignoredProperties = ignoredProperties;
|
||||||
|
|||||||
@@ -140,6 +140,22 @@ function printCommaSeparatedValueGroup(path, options, print) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't print a space before the `;` branch delimiter in the SCSS `if()`
|
||||||
|
// function (i.e. `if(condition: value; else: value)`)
|
||||||
|
if (
|
||||||
|
options.parser === "scss" &&
|
||||||
|
iNextNode.type === "value-word" &&
|
||||||
|
iNextNode.value === ";" &&
|
||||||
|
path.match(
|
||||||
|
undefined,
|
||||||
|
(node, key) => key === "groups" && node.type === "value-paren_group",
|
||||||
|
(node, key) =>
|
||||||
|
key === "group" && node.type === "value-func" && node.value === "if",
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// We should keep spaces between words in a embedded JS expression
|
// We should keep spaces between words in a embedded JS expression
|
||||||
// examples:
|
// examples:
|
||||||
// styled.div` font-size: var(--font-size-h${({ level }) => level}); `;
|
// styled.div` font-size: var(--font-size-h${({ level }) => level}); `;
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
$a: if(sass($x): 1; else: white);
|
||||||
|
$a: if(sass($x): 1 ; else: white);
|
||||||
|
$b: if(sass($x): map.get($view, background); else: white);
|
||||||
|
$c: if(sass($x): map.get($view, background) ; else: white);
|
||||||
|
|
||||||
|
@debug if(sass(true): 10px; else: 15px);
|
||||||
|
@debug if(sass(true): 10px ; else: 15px);
|
||||||
|
@debug if(sass(meta.variable-defined($var)): $var);
|
||||||
|
|
||||||
|
@mixin foo($isDark, $view) {
|
||||||
|
.bar {
|
||||||
|
background-color: if(sass($isDark): map.get($view, background) ; else: white);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||||
|
|
||||||
|
exports[`19355.scss format 1`] = `
|
||||||
|
====================================options=====================================
|
||||||
|
parsers: ["scss"]
|
||||||
|
printWidth: 80 (default) |
|
||||||
|
=====================================input======================================
|
||||||
|
$a: if(sass($x): 1; else: white);
|
||||||
|
$a: if(sass($x): 1 ; else: white);
|
||||||
|
$b: if(sass($x): map.get($view, background); else: white);
|
||||||
|
$c: if(sass($x): map.get($view, background) ; else: white);
|
||||||
|
|
||||||
|
@debug if(sass(true): 10px; else: 15px);
|
||||||
|
@debug if(sass(true): 10px ; else: 15px);
|
||||||
|
@debug if(sass(meta.variable-defined($var)): $var);
|
||||||
|
|
||||||
|
@mixin foo($isDark, $view) {
|
||||||
|
.bar {
|
||||||
|
background-color: if(sass($isDark): map.get($view, background) ; else: white);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
=====================================output=====================================
|
||||||
|
$a: if(sass($x): 1; else: white);
|
||||||
|
$a: if(sass($x): 1; else: white);
|
||||||
|
$b: if(sass($x): map.get($view, background); else: white);
|
||||||
|
$c: if(sass($x): map.get($view, background); else: white);
|
||||||
|
|
||||||
|
@debug if(sass(true): 10px; else: 15px);
|
||||||
|
@debug if(sass(true): 10px; else: 15px);
|
||||||
|
@debug if(sass(meta.variable-defined($var)): $var);
|
||||||
|
|
||||||
|
@mixin foo($isDark, $view) {
|
||||||
|
.bar {
|
||||||
|
background-color: if(
|
||||||
|
sass($isDark): map.get($view, background); else: white
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
`;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
runFormatTest(import.meta, ["scss"]);
|
||||||
Reference in new issue
Block a user