Skip to content

Commit 3ad2c44

Browse files
authored
Fix media-feature-range-notation autofix for exact values (#8651)
1 parent 58b162d commit 3ad2c44

File tree

4 files changed

+56
-13
lines changed

4 files changed

+56
-13
lines changed

.changeset/brown-hotels-notice.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"stylelint": patch
3+
---
4+
5+
Fixed: `media-feature-range-notation` autofix for exact values

lib/rules/media-feature-range-notation/__tests__/index.mjs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,15 @@ testRule({
112112
{
113113
code: stripIndent`
114114
@media (min-width: 1px)
115-
and (max-width: 2px) {}
115+
and (max-width: 2px)
116+
and (width: 3px) {}
116117
`,
117118
fixed: stripIndent`
118119
@media (width >= 1px)
119-
and (width <= 2px) {}
120+
and (width <= 2px)
121+
and (width = 3px) {}
120122
`,
121-
description: 'two range type media features in prefix notation',
123+
description: 'three range type media features in prefix notation',
122124
warnings: [
123125
{
124126
message: messages.expected('context'),
@@ -136,6 +138,14 @@ testRule({
136138
endColumn: 23,
137139
fix: undefined,
138140
},
141+
{
142+
message: messages.expected('context'),
143+
line: 3,
144+
column: 7,
145+
endLine: 3,
146+
endColumn: 19,
147+
fix: undefined,
148+
},
139149
],
140150
},
141151
],

lib/rules/media-feature-range-notation/index.cjs

Lines changed: 19 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/rules/media-feature-range-notation/index.mjs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ const meta = {
2828
fixable: true,
2929
};
3030

31+
/** @import {TokenDelim} from '@csstools/css-tokenizer' */
32+
3133
/** @type {import('stylelint').CoreRules[ruleName]} */
3234
const rule = (primary) => {
3335
return (root, result) => {
@@ -67,10 +69,22 @@ const rule = (primary) => {
6769
* @param {import('@csstools/media-query-list-parser').MediaFeature} entry.parent
6870
*/
6971
const contextFixer = (entry) => () => {
70-
/** @type {import('@csstools/css-tokenizer').TokenDelim} */
71-
const operator = /^min-/i.test(featureName)
72-
? [TokenType.Delim, '>', -1, -1, { value: '>' }]
73-
: [TokenType.Delim, '<', -1, -1, { value: '<' }];
72+
/** @type {[TokenDelim]|[TokenDelim, TokenDelim]} */
73+
let operator;
74+
75+
if (/^min-/i.test(featureName)) {
76+
operator = [
77+
[TokenType.Delim, '>', -1, -1, { value: '>' }],
78+
[TokenType.Delim, '=', -1, -1, { value: '=' }],
79+
];
80+
} else if (/^max-/i.test(featureName)) {
81+
operator = [
82+
[TokenType.Delim, '<', -1, -1, { value: '<' }],
83+
[TokenType.Delim, '=', -1, -1, { value: '=' }],
84+
];
85+
} else {
86+
operator = [[TokenType.Delim, '=', -1, -1, { value: '=' }]];
87+
}
7488

7589
entry.parent.feature = new MediaFeatureRangeNameValue(
7690
new MediaFeatureName(
@@ -86,7 +100,7 @@ const rule = (primary) => {
86100
? entry.node.name.after
87101
: [[TokenType.Whitespace, ' ', -1, -1, undefined]],
88102
),
89-
[operator, [TokenType.Delim, '=', -1, -1, { value: '=' }]],
103+
operator,
90104
entry.node.value,
91105
);
92106

0 commit comments

Comments
 (0)