Skip to content

Commit

Permalink
at-risk: add inset-area (#1434)
Browse files Browse the repository at this point in the history
  • Loading branch information
romainmenke committed Jul 14, 2024
1 parent d233755 commit aec4b26
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 20 deletions.
4 changes: 4 additions & 0 deletions plugins-stylelint/at-risk/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

### Unreleased (minor)

- Add a warning for `inset-area`

### 1.0.0

_March 5, 2024_
Expand Down
96 changes: 76 additions & 20 deletions plugins-stylelint/at-risk/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,24 @@ const messages = stylelint.utils.ruleMessages(ruleName, {
rejectedNestingDeclOrder: () => {
return 'Declarations after nested rules or at-rules are currently re-ordered but might not be in the future. Place all declarations before any nested rules or at-rules to prevent future compat issues.';
},
rejectedAtRiskPropertyReplacement: (atRisk, replacement) => {
return `The '${atRisk}' property is being replaced with '${replacement}'.`;
},
rejectedAtRiskPropertyRemoval: (atRisk) => {
return `The '${atRisk}' property is being removed.`;
},
});

const atRiskProperties = {
replacements: [
[
'inset-area',
'position-area',
],
],
removals: [],
};

const meta = {
url: 'https://github.com/csstools/postcss-plugins/blob/main/plugins-stylelint/at-risk',
fixable: true,
Expand All @@ -22,32 +38,72 @@ const ruleFunction = (primaryOption) => {
// Nested Declarations after Rules/At-Rules
{
postcssRoot.walkDecls((decl) => {
let prev = decl.prev();

while (prev && prev.type === 'comment') {
prev = prev.prev();
}

if (!prev) {
return;
}

if (prev?.type !== 'decl') {
stylelint.utils.report({
message: messages.rejectedNestingDeclOrder(),
node: decl,
index: 0,
endIndex: 5,
result: postcssResult,
ruleName,
});
}
checkNestingDeclOrder(decl, postcssResult);

checkAtRiskProperties(decl, postcssResult);
});
}

};
};

function checkNestingDeclOrder(decl, postcssResult) {
let prev = decl.prev();

while (prev && prev.type === 'comment') {
prev = prev.prev();
}

if (!prev) {
return;
}

if (prev?.type !== 'decl') {
stylelint.utils.report({
message: messages.rejectedNestingDeclOrder(),
node: decl,
index: 0,
endIndex: decl.prop.length,
result: postcssResult,
ruleName,
});
}
}

function checkAtRiskProperties(decl, postcssResult) {
const lowerCaseProp = decl.prop.toLowerCase();

atRiskProperties.replacements.forEach(([atRisk, replacement]) => {
if (lowerCaseProp !== atRisk) {
return;
}

stylelint.utils.report({
message: messages.rejectedAtRiskPropertyReplacement(atRisk, replacement),
node: decl,
index: 0,
endIndex: decl.prop.length,
result: postcssResult,
ruleName,
});
});

atRiskProperties.removals.forEach((atRisk) => {
if (lowerCaseProp !== atRisk) {
return;
}

stylelint.utils.report({
message: messages.rejectedAtRiskPropertyRemoval(atRisk),
node: decl,
index: 0,
endIndex: decl.prop.length,
result: postcssResult,
ruleName,
});
});
}

ruleFunction.ruleName = ruleName;
ruleFunction.messages = messages;
ruleFunction.meta = meta;
Expand Down
11 changes: 11 additions & 0 deletions plugins-stylelint/at-risk/index.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ testRule({
code: 'div { color: cyan; & { color: purple } }',
description: 'decl before rule',
},
{
code: 'div { position-area: inherit; }',
},
],

reject: [
Expand Down Expand Up @@ -43,6 +46,14 @@ testRule({
endLine: 1,
endColumn: 40,
},
{
code: 'div { inset-area: inherit; }',
message: rule.messages.rejectedAtRiskPropertyReplacement('inset-area', 'position-area'),
line: 1,
column: 7,
endLine: 1,
endColumn: 17,
},
],
});

Expand Down

0 comments on commit aec4b26

Please sign in to comment.