stylelint-sassdoc
Version:
stylelint plugin to check scss files for a valid sassdoc documentation Credits to https://github.com/anneangersbach
62 lines (56 loc) • 1.94 kB
JavaScript
const stylelint = require('stylelint');
const ruleName = 'sassdoc/atReturn';
const { checkCommentsForReturn } = require('../../utils');
const messages = stylelint.utils.ruleMessages(ruleName, {
expected: (results) => `SassDoc: Expected exactly {1} @return with {type} but found {${results.length}}.`,
expectedType: 'SassDoc: @return must have a type.',
});
module.exports = stylelint.createPlugin(ruleName, (actual) => (root, result) => {
const validOptions = stylelint.utils.validateOptions(result, ruleName, {
actual,
});
if (!validOptions) {
return;
}
// walk all functions
root.walkAtRules('function', (atRule) => {
let results = [];
// stop if it's a private function
if (atRule.parent !== root || atRule.params[0] === '_') {
return;
}
// read comments for @return
results = checkCommentsForReturn(atRule);
// found no return
if (results.length < 1) {
stylelint.utils.report({
message: messages.expected(results),
node: atRule,
result,
ruleName,
});
}
// found more than 1 return
results.forEach((returnComment) => {
if (results.length > 1) {
stylelint.utils.report({
message: messages.expected,
node: returnComment.node,
result,
ruleName,
});
}
// found a return without type
if (!returnComment.hasType) {
stylelint.utils.report({
message: messages.expectedType,
node: returnComment.node,
result,
ruleName,
});
}
});
});
});
module.exports.ruleName = ruleName;
module.exports.messages = messages;