1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 'use strict';
- /** @typedef {import('stylelint').LintResult} LintResult */
- /** @typedef {LintResult['parseErrors'][0]} ParseError */
- /** @typedef {LintResult['warnings'][0]} Warning */
- /** @typedef {Warning['severity']} Severity */
- /**
- * Preprocess warnings in a given lint result.
- * Note that this function has a side-effect.
- *
- * @param {LintResult} result
- * @returns {LintResult}
- */
- module.exports = function preprocessWarnings(result) {
- for (const error of result.parseErrors || []) {
- result.warnings.push(parseErrorToWarning(error));
- }
- for (const warning of result.warnings) {
- warning.severity = normalizeSeverity(warning);
- }
- result.warnings.sort(byLocationOrder);
- return result;
- };
- /**
- * @param {ParseError} error
- * @returns {Warning}
- */
- function parseErrorToWarning(error) {
- return {
- line: error.line,
- column: error.column,
- rule: error.stylelintType,
- severity: 'error',
- text: `${error.text} (${error.stylelintType})`,
- };
- }
- /**
- * @param {Warning} warning
- * @returns {Severity}
- */
- function normalizeSeverity(warning) {
- // NOTE: Plugins may add a warning without severity, for example,
- // by directly using the PostCSS `Result#warn()` API.
- return warning.severity || 'error';
- }
- /**
- * @param {Warning} a
- * @param {Warning} b
- * @returns {number}
- */
- function byLocationOrder(a, b) {
- // positionless first
- if (!a.line && b.line) return -1;
- // positionless first
- if (a.line && !b.line) return 1;
- if (a.line < b.line) return -1;
- if (a.line > b.line) return 1;
- if (a.column < b.column) return -1;
- if (a.column > b.column) return 1;
- return 0;
- }
|