Skip to content

Commit 75be9b3

Browse files
allow control tokens in padding
1 parent f56c35d commit 75be9b3

File tree

5 files changed

+19
-8
lines changed

5 files changed

+19
-8
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@primer/stylelint-config": minor
3+
---
4+
5+
Allow functional size tokens (e.g. `--control-medium-paddingInline-condensed`) in the `primer/spacing` rule. Also add `unset` to the list of ignored keyword values.

__tests__/__fixtures__/good/example.pcss

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
/* stylelint-disable primer/spacing */
2-
31
/* CSS for Button */
42

53
/* temporary, pre primitives release */
@@ -165,7 +163,7 @@
165163
& .Button-content {
166164
flex: 1 1 auto;
167165
align-self: stretch;
168-
padding-block: calc(var(--control-medium-paddingBlock) - 2px);
166+
padding-block: calc(var(--control-medium-paddingBlock) - 2px); /* stylelint-disable-line primer/spacing */
169167
}
170168

171169
& .Button-label {
@@ -177,7 +175,7 @@
177175
min-height: var(--control-small-size);
178176

179177
& .Button-content {
180-
padding-block: calc(var(--control-small-paddingBlock) - 2px);
178+
padding-block: calc(var(--control-small-paddingBlock) - 2px); /* stylelint-disable-line primer/spacing */
181179
}
182180
}
183181

@@ -187,7 +185,7 @@
187185
padding-inline: var(--control-large-paddingInline-spacious);
188186

189187
& .Button-content {
190-
padding-block: calc(var(--control-large-paddingBlock) - 2px);
188+
padding-block: calc(var(--control-large-paddingBlock) - 2px); /* stylelint-disable-line primer/spacing */
191189
}
192190
}
193191
}

__tests__/spacing.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ testRule({
1919
code: '.x { padding: var(--base-size-4); }',
2020
description: 'CSS > One variable is valid.',
2121
},
22+
{
23+
code: '.x { padding: var(--control-medium-paddingInline-condensed); }',
24+
description: 'CSS > Functional size variable (control token) is valid.',
25+
},
2226
{
2327
code: '.x { padding-bottom: var(--base-size-4); }',
2428
description: 'CSS > Works on property partial match.',

plugins/lib/utils.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ import {createRequire} from 'node:module'
22

33
const require = createRequire(import.meta.url)
44

5-
export function primitivesVariables(type) {
5+
export function primitivesVariables(type, options = {}) {
66
const variables = []
77

88
const files = []
99
switch (type) {
1010
case 'spacing':
1111
files.push('base/size/size.json')
12+
if (options.includeFunctional) {
13+
files.push('functional/size/size.json')
14+
}
1215
break
1316
case 'border':
1417
files.push('functional/size/border.json')

plugins/spacing.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const propList = ['padding', 'margin', 'top', 'right', 'bottom', 'left']
2525
const valueList = ['${']
2626

2727
const sizes = primitivesVariables('spacing')
28+
const allowedSizeVars = primitivesVariables('spacing', {includeFunctional: true})
2829

2930
// Add +-1px to each value
3031
for (const size of sizes) {
@@ -59,7 +60,7 @@ const ruleFunction = primary => {
5960
}
6061

6162
// Exact values to ignore.
62-
if (['*', '+', '-', '/', '0', 'auto', 'inherit', 'initial'].includes(node.value)) {
63+
if (['*', '+', '-', '/', '0', 'auto', 'inherit', 'initial', 'unset'].includes(node.value)) {
6364
return
6465
}
6566

@@ -76,7 +77,7 @@ const ruleFunction = primary => {
7677

7778
// If the variable is found in the value, skip it.
7879
if (
79-
sizes.some(variable =>
80+
allowedSizeVars.some(variable =>
8081
new RegExp(`${variable['name'].replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`).test(node.value),
8182
)
8283
) {

0 commit comments

Comments
 (0)