el-beeswarm
Version:
<div style="display: flex; padding: 1rem; flex-direction: column; align-items: center; justify-content: center; height: 100vh; text-align: center; display: flex;
119 lines (98 loc) • 3.1 kB
JavaScript
'use strict';
const _ = require('lodash');
/** @typedef {{
ruleName: string,
result: import('stylelint').PostcssResult,
message: string,
node: import('postcss').Node & {
positionBy(opts: { index?: number, word?: string }): { line: number, column: number }
},
index?: number,
word?: string,
line?: number
}} Violation */
/**
* Report a violation.
*
* This function accounts for `disabledRanges` attached to the result.
* That is, if the reported violation is within a disabledRange,
* it is ignored. Otherwise, it is attached to the result as a
* postcss warning.
*
* It also accounts for the rule's severity.
*
* You *must* pass *either* a node or a line number.
* @param {Violation} violation
*/
module.exports = function (violation) {
const ruleName = violation.ruleName;
const result = violation.result;
const message = violation.message;
const line = violation.line;
const node = violation.node;
const index = violation.index;
const word = violation.word;
result.stylelint = result.stylelint || {
ruleSeverities: {},
customMessages: {},
};
// In quiet mode, mere warnings are ignored
if (result.stylelint.quiet && result.stylelint.ruleSeverities[ruleName] !== 'error') {
return;
}
// If a line is not passed, use the node.positionBy method to get the
// line number that the complaint pertains to
const startLine = line || node.positionBy({ index }).line;
const { ignoreDisables, reportNeedlessDisables } = result.stylelint.config || {};
if (result.stylelint.disabledRanges && (!ignoreDisables || reportNeedlessDisables)) {
const ranges = result.stylelint.disabledRanges[ruleName] || result.stylelint.disabledRanges.all;
for (const range of ranges) {
if (
// If the violation is within a disabledRange,
// and that disabledRange's rules include this one,
// do not register a warning
range.start <= startLine &&
(range.end === undefined || range.end >= startLine) &&
(!range.rules || range.rules.includes(ruleName))
) {
if (reportNeedlessDisables) {
// Collect disabled warnings
// Used to report `needlessDisables` in subsequent processing.
const disabledWarnings =
result.stylelint.disabledWarnings || (result.stylelint.disabledWarnings = []);
disabledWarnings.push({
rule: ruleName,
line: startLine,
});
if (!ignoreDisables) {
return;
}
break;
} else {
return;
}
}
}
}
/** @type {string} */
const severity = _.get(result.stylelint, ['ruleSeverities', ruleName], 'ignore');
if (!result.stylelint.stylelintError && severity === 'error') {
result.stylelint.stylelintError = true;
}
/** @type {import('stylelint').StylelintWarningOptions} */
const warningProperties = {
severity,
rule: ruleName,
};
if (node) {
warningProperties.node = node;
}
if (index) {
warningProperties.index = index;
}
if (word) {
warningProperties.word = word;
}
const warningMessage = _.get(result.stylelint, ['customMessages', ruleName], message);
result.warn(warningMessage, warningProperties);
};