0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-31 19:32:47 +00:00

Fix single-line detection rule. Linting.

This commit is contained in:
Trevor Buckner
2023-05-26 01:10:49 -04:00
parent e621f2d19b
commit f05e0db14b
3 changed files with 120 additions and 116 deletions

View File

@@ -4,50 +4,54 @@ const { isNumber } = require('stylelint/lib/utils/validateTypes');
const { report, ruleMessages, validateOptions } = stylelint.utils;
const ruleName = 'naturalcrit/declaration-block-multi-line-min-declarations';
const messages = ruleMessages(ruleName, {
expected: (decls) => `Rule with ${decls} declaration${decls == 1 ? '' : 's'} should be single line`,
expected : (decls)=>`Rule with ${decls} declaration${decls == 1 ? '' : 's'} should be single line`,
});
module.exports = stylelint.createPlugin(ruleName, function getPlugin(primaryOption, secondaryOptionObject, context) {
return function lint(postcssRoot, postcssResult) {
return function lint(postcssRoot, postcssResult) {
const validOptions = validateOptions(
postcssResult,
ruleName,
{
actual: primaryOption,
possible: [isNumber],
}
);
const validOptions = validateOptions(
postcssResult,
ruleName,
{
actual : primaryOption,
possible : [isNumber],
}
);
if (!validOptions) { //If the options are invalid, don't lint
return;
}
const isAutoFixing = Boolean(context.fix);
if(!validOptions) { //If the options are invalid, don't lint
return;
}
const isAutoFixing = Boolean(context.fix);
postcssRoot.walkRules(rule => { //Iterate CSS rules
postcssRoot.walkRules((rule)=>{ //Iterate CSS rules
//Apply rule only if all children are decls (no nested rules)
if (rule.nodes.length > primaryOption || !rule.nodes.every((node) => node.type === 'decl')) {
return;
}
//Apply rule only if all children are decls (no further nested rules)
if(rule.nodes.length > primaryOption || !rule.nodes.every((node)=>node.type === 'decl')) {
return;
}
if (isAutoFixing) { //We are in “fix” mode
rule.each((decl) => {
decl.raws.before = " ";
});
rule.raws.after = ' ';
} else {
report({
ruleName,
result: postcssResult,
message: messages.expected(rule.nodes.length), // Build the reported message
node: rule, // Specify the reported node
word: rule.selector, // Which exact word caused the error? This positions the error properly
});
}
});
};
//Ignore if already one line
if(!rule.nodes.some((node)=>node.raws.before.includes('\n')) && !rule.raws.after.includes('\n'))
return;
if(isAutoFixing) { //We are in “fix” mode
rule.each((decl)=>{
decl.raws.before = ' ';
});
rule.raws.after = ' ';
} else {
report({
ruleName,
result : postcssResult,
message : messages.expected(rule.nodes.length), // Build the reported message
node : rule, // Specify the reported node
word : rule.selector, // Which exact word caused the error? This positions the error properly
});
}
});
};
});
module.exports.ruleName = ruleName;