mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-31 15:12:39 +00:00
Set up Stylelint and add custom plugins
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
const stylelint = require('stylelint');
|
||||
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 a single line`,
|
||||
});
|
||||
|
||||
|
||||
module.exports = stylelint.createPlugin(ruleName, function getPlugin(primaryOption, secondaryOptionObject, context) {
|
||||
return function lint(postcssRoot, postcssResult) {
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
module.exports.messages = messages;
|
||||
Reference in New Issue
Block a user