invalidScopeDisables.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. 'use strict';
  2. /** @typedef {import('stylelint').RangeType} RangeType */
  3. /** @typedef {import('stylelint').StylelintDisableOptionsReport} StylelintDisableOptionsReport */
  4. /**
  5. * @param {import('stylelint').StylelintResult[]} results
  6. * @returns {StylelintDisableOptionsReport}
  7. */
  8. module.exports = function (results) {
  9. /** @type {StylelintDisableOptionsReport} */
  10. const report = [];
  11. results.forEach((result) => {
  12. // File with `CssSyntaxError` have not `_postcssResult`
  13. if (!result._postcssResult) {
  14. return;
  15. }
  16. if (!result._postcssResult.stylelint.config) {
  17. // Linting error
  18. return;
  19. }
  20. const configRules = result._postcssResult.stylelint.config.rules || {};
  21. const usedRules = new Set(Object.keys(configRules));
  22. usedRules.add('all');
  23. /** @type {import('stylelint').StylelintDisableReportEntry} */
  24. const sourceReport = { source: result.source, ranges: [] };
  25. const rangeData = result._postcssResult.stylelint.disabledRanges;
  26. const disabledRules = Object.keys(rangeData);
  27. disabledRules.forEach((rule) => {
  28. if (usedRules.has(rule)) {
  29. return;
  30. }
  31. rangeData[rule].forEach((range) => {
  32. if (!range.strictStart && !range.strictEnd) {
  33. return;
  34. }
  35. sourceReport.ranges.push({
  36. rule,
  37. start: range.start,
  38. end: range.end,
  39. unusedRule: rule,
  40. });
  41. });
  42. });
  43. if (sourceReport.ranges.length > 0) {
  44. report.push(sourceReport);
  45. }
  46. });
  47. return report;
  48. };