checker.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. 'use strict';
  2. const { resolve } = require('path');
  3. const stylelint = require('stylelint');
  4. const stylelintConfigPrettier = require('./index');
  5. function tryRequire(mod) {
  6. try {
  7. return require(mod);
  8. } catch (error) {
  9. return null;
  10. }
  11. }
  12. const getConfigForFile = tryRequire('stylelint/lib/getConfigForFile');
  13. const { hasOwnProperty } = Object.prototype;
  14. async function getConfig(linter, resolvedPath) {
  15. if (linter.getConfigForFile) {
  16. return await linter.getConfigForFile(resolvedPath);
  17. }
  18. if (getConfigForFile) {
  19. return await getConfigForFile(linter, resolvedPath);
  20. }
  21. throw new Error(`Could not get config for file: ${resolvedPath}`);
  22. }
  23. async function check(path) {
  24. const resolvedPath = resolve(process.cwd(), path || '');
  25. const linter = stylelint.createLinter();
  26. const config = await getConfig(linter, resolvedPath);
  27. const prettierRules = stylelintConfigPrettier.rules;
  28. const configRules = config.config.rules;
  29. const conflictingRules = [];
  30. function isEmpty(value) {
  31. return value === null || (Array.isArray(value) && value.length === 0);
  32. }
  33. Object.keys(prettierRules).forEach((rule) => {
  34. if (
  35. hasOwnProperty.call(configRules, rule) &&
  36. !isEmpty(configRules[rule]) &&
  37. configRules[rule][0] !== prettierRules[rule]
  38. ) {
  39. conflictingRules.push(rule);
  40. }
  41. });
  42. return conflictingRules.length ? conflictingRules : null;
  43. }
  44. exports.check = check;