0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-01 17:22:42 +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

@@ -3,65 +3,65 @@ const stylelint = require('stylelint');
const { report, ruleMessages, validateOptions } = stylelint.utils;
const ruleName = 'naturalcrit/align-colons';
const messages = ruleMessages(ruleName, {
expected: (rule) => `Expected colons aligned within rule "${rule}"`,
expected : (rule)=>`Expected colons aligned within rule "${rule}"`,
});
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: [
true,
false
]
}
);
const validOptions = validateOptions(
postcssResult,
ruleName,
{
actual : primaryOption,
possible : [
true,
false
]
}
);
if (!validOptions) { //If the options are invalid, don't lint
return;
}
const isAutoFixing = Boolean(context.fix);
postcssRoot.walkRules(rule => { //Iterate CSS rules
if(!validOptions) { //If the options are invalid, don't lint
return;
}
const isAutoFixing = Boolean(context.fix);
postcssRoot.walkRules((rule)=>{ //Iterate CSS rules
let maxColonPos = 0;
let misaligned = false;
rule.each(declaration => {
let maxColonPos = 0;
let misaligned = false;
rule.each((declaration)=>{
if(declaration.type != "decl")
return;
if(declaration.type != 'decl')
return;
let colonPos = declaration.prop.length + declaration.raws.between.indexOf(":");
if (maxColonPos > 0 && colonPos != maxColonPos) {
misaligned = true;
}
maxColonPos = Math.max(maxColonPos, colonPos);
});
const colonPos = declaration.prop.length + declaration.raws.between.indexOf(':');
if(maxColonPos > 0 && colonPos != maxColonPos) {
misaligned = true;
}
maxColonPos = Math.max(maxColonPos, colonPos);
});
if(misaligned) {
if (isAutoFixing) { //We are in “fix” mode
rule.each(declaration => {
if(declaration.type != "decl")
return;
if(misaligned) {
if(isAutoFixing) { //We are in “fix” mode
rule.each((declaration)=>{
if(declaration.type != 'decl')
return;
declaration.raws.between = " ".repeat(maxColonPos - declaration.prop.length) + ":" + declaration.raws.between.split(":")[1];
})
} else { //We are in “report only” mode
report({
ruleName,
result: postcssResult,
message: messages.expected(rule.selector), // Build the reported message
node: rule, // Specify the reported node
word: rule.selector, // Which exact word caused the error? This positions the error properly
});
}
}
});
};
declaration.raws.between = `${' '.repeat(maxColonPos - declaration.prop.length)}:${declaration.raws.between.split(':')[1]}`;
});
} else { //We are in “report only” mode
report({
ruleName,
result : postcssResult,
message : messages.expected(rule.selector), // 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;