Skip to content

Commit 99b018d

Browse files
authored
Fix media-feature-range-notation false positives for multiple queries and except: exact-value (#8832)
1 parent b0fa564 commit 99b018d

File tree

4 files changed

+57
-10
lines changed

4 files changed

+57
-10
lines changed

.changeset/brown-olives-sort.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` false positives for multiple queries and `except: exact-value`

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,14 @@ testRule({
336336
{
337337
code: '@media (color) {}',
338338
},
339+
{
340+
code: '@media (width = 1px) {} @media (width = 2px) {}',
341+
description: 'multiple media queries',
342+
},
343+
{
344+
code: '@media (width = 1px), (width = 2px) {}',
345+
description: 'multiple features',
346+
},
339347
],
340348
reject: [
341349
{
@@ -360,5 +368,35 @@ testRule({
360368
endLine: 1,
361369
endColumn: 20,
362370
},
371+
{
372+
code: '@media (width: 1px), (width: 2px) {}',
373+
fixed: '@media (width = 1px), (width = 2px) {}',
374+
fix: {
375+
range: [13, 14],
376+
text: ' =',
377+
},
378+
message: messages.expected('context'),
379+
warnings: [
380+
{
381+
message: messages.expected('context'),
382+
line: 1,
383+
column: 8,
384+
endLine: 1,
385+
endColumn: 20,
386+
fix: {
387+
range: [13, 14],
388+
text: ' =',
389+
},
390+
},
391+
{
392+
message: messages.expected('context'),
393+
line: 1,
394+
column: 22,
395+
endLine: 1,
396+
endColumn: 34,
397+
fix: undefined,
398+
},
399+
],
400+
},
363401
],
364402
});

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

Lines changed: 7 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: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ const rule = (primary, secondaryOptions) => {
7373

7474
if (!rangeTypeMediaFeatureNames.has(unprefixedMediaFeature)) return;
7575

76+
let expected = primary;
77+
7678
if (exceptExactValue) {
7779
const isMediaFeatureRangeWithExactOperator =
7880
(isMediaFeatureRangeNameValue(node) || isMediaFeatureRangeValueName(node)) &&
@@ -83,15 +85,15 @@ const rule = (primary, secondaryOptions) => {
8385
isMediaFeaturePlain(node) && featureName.length === unprefixedMediaFeature.length;
8486

8587
if (isMediaFeatureRangeWithExactOperator || isMediaFeaturePlainUnprefixed) {
86-
primary = primary === 'prefix' ? 'context' : 'prefix';
88+
expected = primary === 'prefix' ? 'context' : 'prefix';
8789
}
8890
}
8991

9092
// Expected plain notation and received plain notation
91-
if (primary === 'prefix' && isMediaFeaturePlain(node)) return;
93+
if (expected === 'prefix' && isMediaFeaturePlain(node)) return;
9294

9395
// Expected range notation and received range notation
94-
if (primary === 'context' && isMediaFeatureRange(node)) return;
96+
if (expected === 'context' && isMediaFeatureRange(node)) return;
9597

9698
/**
9799
* @param {object} entry
@@ -142,14 +144,14 @@ const rule = (primary, secondaryOptions) => {
142144
};
143145

144146
const hasFix =
145-
primary === 'context' && isMediaFeaturePlain(node) && isMediaFeature(parent);
147+
expected === 'context' && isMediaFeaturePlain(node) && isMediaFeature(parent);
146148
const fix = hasFix ? contextFixer({ node, parent }) : undefined;
147149
const [startIndex, endIndex] = sourceIndices(node);
148150
const atRuleIndex = atRuleParamIndex(atRule);
149151

150152
report({
151153
message: messages.expected,
152-
messageArgs: [primary],
154+
messageArgs: [expected],
153155
node: atRule,
154156
index: atRuleIndex + startIndex - 1,
155157
endIndex: atRuleIndex + endIndex + 1 + 1,

0 commit comments

Comments
 (0)