You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.1 KiB
79 lines
2.1 KiB
'use strict'; |
|
|
|
const _ = require('lodash'); |
|
const validateOptions = require('./utils/validateOptions'); |
|
|
|
/** |
|
* @typedef {import('stylelint').PostcssResult} PostcssResult |
|
* @typedef {import('stylelint').DisableOptions} DisableOptions |
|
* @typedef {import('stylelint').DisablePropertyName} DisablePropertyName |
|
* @typedef {import('stylelint').StylelintPostcssResult} StylelintPostcssResult |
|
*/ |
|
|
|
/** |
|
* Validates that the stylelint config for `result` has a valid disable field |
|
* named `field`, and returns the result in normalized form as well as a |
|
* `StylelintPostcssResult` for convenience. |
|
* |
|
* Returns `null` if no disables should be reported, and automatically reports |
|
* an invalid configuration. If this returns non-`null`, it guarantees that |
|
* `result._postcssResult` is defined as well. |
|
* |
|
* @param {PostcssResult | undefined} result |
|
* @param {DisablePropertyName} field |
|
* @return {[boolean, Required<DisableOptions>, StylelintPostcssResult] | null} |
|
*/ |
|
module.exports = function (result, field) { |
|
// Files with `CssSyntaxError`s don't have `_postcssResult`s. |
|
if (!result) return null; |
|
|
|
const stylelintResult = result.stylelint; |
|
|
|
// Files with linting errors may not have configs associated with them. |
|
if (!stylelintResult.config) return null; |
|
|
|
const rawSettings = stylelintResult.config[field]; |
|
|
|
/** @type {boolean} */ |
|
let enabled; |
|
/** @type {DisableOptions} */ |
|
let options; |
|
|
|
if (Array.isArray(rawSettings)) { |
|
enabled = rawSettings[0]; |
|
options = rawSettings[1] || {}; |
|
} else { |
|
enabled = rawSettings || false; |
|
options = {}; |
|
} |
|
|
|
const validOptions = validateOptions( |
|
result, |
|
field, |
|
{ |
|
actual: enabled, |
|
possible: [true, false], |
|
}, |
|
{ |
|
actual: options, |
|
possible: { |
|
except: [_.isString, _.isRegExp], |
|
}, |
|
}, |
|
); |
|
|
|
if (!validOptions) return null; |
|
|
|
// If the check is disabled with no exceptions, there's no reason to run |
|
// it at all. |
|
if (!enabled && !options.except) return null; |
|
|
|
return [ |
|
enabled, |
|
{ |
|
except: options.except || [], |
|
severity: options.severity || stylelintResult.config.defaultSeverity || 'error', |
|
}, |
|
stylelintResult, |
|
]; |
|
};
|
|
|