@master/eslint-plugin-css 2.0.0-rc.3 → 2.0.0-rc.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +1 -1
  2. package/dist/create-rule.cjs +8 -0
  3. package/dist/create-rule.d.ts +3 -0
  4. package/dist/create-rule.mjs +6 -0
  5. package/dist/functions/filter-collision-classes.cjs +9 -0
  6. package/dist/functions/filter-collision-classes.d.ts +3 -0
  7. package/dist/functions/filter-collision-classes.mjs +11 -0
  8. package/dist/functions/filter-collision-classes.worker.cjs +35 -0
  9. package/dist/functions/filter-collision-classes.worker.d.ts +1 -0
  10. package/dist/functions/filter-collision-classes.worker.mjs +33 -0
  11. package/dist/functions/get-css.cjs +19 -0
  12. package/dist/functions/get-css.d.ts +1 -0
  13. package/dist/functions/get-css.mjs +17 -0
  14. package/dist/functions/reorder-valid-classes.cjs +9 -0
  15. package/dist/functions/reorder-valid-classes.d.ts +3 -0
  16. package/dist/functions/reorder-valid-classes.mjs +11 -0
  17. package/dist/functions/reorder-valid-classes.worker.cjs +13 -0
  18. package/dist/functions/reorder-valid-classes.worker.d.ts +1 -0
  19. package/dist/functions/reorder-valid-classes.worker.mjs +11 -0
  20. package/dist/functions/validate.cjs +9 -0
  21. package/dist/functions/validate.d.ts +3 -0
  22. package/dist/functions/validate.mjs +11 -0
  23. package/dist/functions/validate.worker.cjs +15 -0
  24. package/dist/functions/validate.worker.d.ts +5 -0
  25. package/dist/functions/validate.worker.mjs +13 -0
  26. package/dist/index.cjs +39 -0
  27. package/dist/index.d.ts +61 -1
  28. package/dist/index.mjs +37 -1
  29. package/dist/plugin.cjs +18 -0
  30. package/dist/plugin.d.ts +10 -2
  31. package/dist/plugin.mjs +16 -1
  32. package/dist/rules/class-collision.cjs +68 -0
  33. package/dist/rules/class-collision.d.ts +1 -2
  34. package/dist/rules/class-collision.mjs +66 -1
  35. package/dist/rules/class-order.cjs +174 -0
  36. package/dist/rules/class-order.d.ts +1 -2
  37. package/dist/rules/class-order.mjs +172 -1
  38. package/dist/rules/class-validation.cjs +70 -0
  39. package/dist/rules/class-validation.d.ts +1 -2
  40. package/dist/rules/class-validation.mjs +68 -1
  41. package/dist/settings-schema.cjs +35 -0
  42. package/dist/settings-schema.d.ts +3 -0
  43. package/dist/settings-schema.mjs +33 -0
  44. package/dist/settings.cjs +16 -0
  45. package/dist/settings.d.ts +10 -2
  46. package/dist/settings.mjs +14 -1
  47. package/dist/utils/define-visitors.cjs +92 -0
  48. package/dist/utils/define-visitors.d.ts +6 -4
  49. package/dist/utils/define-visitors.mjs +90 -1
  50. package/dist/utils/extract-classnames-from-value.cjs +34 -0
  51. package/dist/utils/extract-classnames-from-value.mjs +32 -1
  52. package/dist/utils/extract-range-from-node.cjs +18 -0
  53. package/dist/utils/extract-range-from-node.mjs +16 -1
  54. package/dist/utils/extract-value-from-node.cjs +23 -0
  55. package/dist/utils/extract-value-from-node.mjs +21 -1
  56. package/dist/utils/find-loc.cjs +40 -0
  57. package/dist/utils/find-loc.mjs +38 -1
  58. package/dist/utils/get-template-element-body.cjs +12 -0
  59. package/dist/utils/get-template-element-body.mjs +10 -1
  60. package/dist/utils/get-template-element-prefix.cjs +11 -0
  61. package/dist/utils/get-template-element-prefix.mjs +9 -1
  62. package/dist/utils/get-template-element-suffix.cjs +10 -0
  63. package/dist/utils/get-template-element-suffix.mjs +8 -1
  64. package/dist/utils/parse-node-recursive.cjs +130 -0
  65. package/dist/utils/parse-node-recursive.d.ts +2 -2
  66. package/dist/utils/parse-node-recursive.mjs +128 -1
  67. package/dist/utils/resolve-context.cjs +13 -0
  68. package/dist/utils/resolve-context.d.ts +9 -2
  69. package/dist/utils/resolve-context.mjs +11 -1
  70. package/package.json +1 -1
  71. package/dist/configs/config.d.ts +0 -13
  72. package/dist/configs/config.js +0 -1
  73. package/dist/configs/config.mjs +0 -1
  74. package/dist/configs/flat.d.ts +0 -16
  75. package/dist/configs/flat.js +0 -1
  76. package/dist/configs/flat.mjs +0 -1
  77. package/dist/configs/recommended.d.ts +0 -14
  78. package/dist/configs/recommended.js +0 -1
  79. package/dist/configs/recommended.mjs +0 -1
  80. package/dist/index.js +0 -1
  81. package/dist/plugin.js +0 -1
  82. package/dist/rules/class-collision.js +0 -1
  83. package/dist/rules/class-order.js +0 -1
  84. package/dist/rules/class-validation.js +0 -1
  85. package/dist/settings.js +0 -1
  86. package/dist/utils/are-declarations-equal.d.ts +0 -1
  87. package/dist/utils/are-declarations-equal.js +0 -1
  88. package/dist/utils/are-declarations-equal.mjs +0 -1
  89. package/dist/utils/define-visitors.js +0 -1
  90. package/dist/utils/extract-classnames-from-value.js +0 -1
  91. package/dist/utils/extract-range-from-node.js +0 -1
  92. package/dist/utils/extract-value-from-node.js +0 -1
  93. package/dist/utils/find-loc.js +0 -1
  94. package/dist/utils/get-mastercss.d.ts +0 -2
  95. package/dist/utils/get-mastercss.js +0 -1
  96. package/dist/utils/get-mastercss.mjs +0 -1
  97. package/dist/utils/get-template-element-body.js +0 -1
  98. package/dist/utils/get-template-element-prefix.js +0 -1
  99. package/dist/utils/get-template-element-suffix.js +0 -1
  100. package/dist/utils/parse-node-recursive.js +0 -1
  101. package/dist/utils/reorder-valid-classes-action.d.ts +0 -3
  102. package/dist/utils/reorder-valid-classes-action.js +0 -1
  103. package/dist/utils/reorder-valid-classes-action.mjs +0 -1
  104. package/dist/utils/resolve-context.js +0 -1
  105. package/dist/utils/valid-rules-action.d.ts +0 -3
  106. package/dist/utils/valid-rules-action.js +0 -1
  107. package/dist/utils/valid-rules-action.mjs +0 -1
  108. package/dist/utils/validate-action.d.ts +0 -3
  109. package/dist/utils/validate-action.js +0 -1
  110. package/dist/utils/validate-action.mjs +0 -1
  111. package/dist/utils/workers/reorder-valid-classes.d.ts +0 -2
  112. package/dist/utils/workers/reorder-valid-classes.js +0 -1
  113. package/dist/utils/workers/reorder-valid-classes.mjs +0 -1
  114. package/dist/utils/workers/valid-rules.d.ts +0 -2
  115. package/dist/utils/workers/valid-rules.js +0 -1
  116. package/dist/utils/workers/valid-rules.mjs +0 -1
  117. package/dist/utils/workers/validate.d.ts +0 -5
  118. package/dist/utils/workers/validate.js +0 -1
  119. package/dist/utils/workers/validate.mjs +0 -1
package/README.md CHANGED
@@ -41,7 +41,7 @@
41
41
  <img alt="Follow @mastercorg" src="https://img.shields.io/static/v1?label=%20&message=twitter&color=f6f7f8&logo=twitter&style=for-the-badge">
42
42
  </picture>
43
43
  </a>
44
- <a aria-label="Github Actions" href="https://github.com/1aron/repo/actions/workflows/release.yml">
44
+ <a aria-label="Github Actions" href="https://github.com/master-co/css/actions/workflows/release.yml">
45
45
  <picture>
46
46
  <source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/github/actions/workflow/status/master-co/css/release.yml?branch=rc&label=%20&message=twitter&color=212022&logo=githubactions&style=for-the-badge">
47
47
  <source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/github/actions/workflow/status/master-co/css/release.yml?branch=rc&label=%20&message=twitter&color=f6f7f8&logo=githubactions&style=for-the-badge&logoColor=%23000">
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var css = require('@master/css');
4
+ var utils = require('@typescript-eslint/utils');
5
+
6
+ var createRule = utils.ESLintUtils.RuleCreator((name)=>new URL(`/docs/code-linting#${name}`, css.OFFICIAL_URL).href);
7
+
8
+ module.exports = createRule;
@@ -0,0 +1,3 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ declare const _default: <Options extends readonly unknown[], MessageIds extends string>({ name, meta, ...rule }: Readonly<ESLintUtils.RuleWithMetaAndName<Options, MessageIds>>) => ESLintUtils.RuleModule<MessageIds, Options, ESLintUtils.RuleListener>;
3
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { OFFICIAL_URL } from '@master/css';
2
+ import { ESLintUtils } from '@typescript-eslint/utils';
3
+
4
+ var createRule = ESLintUtils.RuleCreator((name)=>new URL(`/docs/code-linting#${name}`, OFFICIAL_URL).href);
5
+
6
+ export { createRule as default };
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var synckit = require('synckit');
4
+ var filterCollisionClasses_worker = require('./filter-collision-classes.worker.cjs');
5
+ var path = require('path');
6
+
7
+ var filterCollisionClasses = process.env.NODE_ENV === 'test' ? filterCollisionClasses_worker : synckit.createSyncFn(path.join(__dirname, 'filter-collision-classes.worker.cjs'));
8
+
9
+ module.exports = filterCollisionClasses;
@@ -0,0 +1,3 @@
1
+ import runFilterCollisionClasses from './filter-collision-classes.worker';
2
+ declare const _default: typeof runFilterCollisionClasses;
3
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import __url_for_shim from 'url';
2
+ import __path_for_shim from 'path';
3
+ const __filename = __url_for_shim.fileURLToPath(import.meta.url);
4
+ const __dirname = __path_for_shim.dirname(__filename);
5
+ import { createSyncFn } from 'synckit';
6
+ import runFilterCollisionClasses from './filter-collision-classes.worker.mjs';
7
+ import { join } from 'path';
8
+ var filterCollisionClasses = process.env.NODE_ENV === 'test' ? runFilterCollisionClasses : createSyncFn(join(__dirname, 'filter-collision-classes.worker.cjs'));
9
+ export {
10
+ filterCollisionClasses as default
11
+ };
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var synckit = require('synckit');
4
+ var getCss = require('./get-css.cjs');
5
+ var cssValidator = require('@master/css-validator');
6
+ var css = require('@master/css');
7
+
8
+ function runFilterCollisionClasses(classNames, config) {
9
+ const currentCSS = getCss(config);
10
+ const validRules = classNames.map((eachClassName)=>cssValidator.generateValidRules(eachClassName, {
11
+ css: currentCSS
12
+ })[0]).filter(Boolean);
13
+ const collisionClassesRecord = {};
14
+ for(let i = 0; i < classNames.length; i++){
15
+ const className = classNames[i];
16
+ const rule = validRules.find((eachValidRule)=>eachValidRule.className === className);
17
+ const collisionClasses = [];
18
+ if (rule) {
19
+ for(let j = 0; j < classNames.length; j++){
20
+ const compareClassName = classNames[j];
21
+ const compareRule = validRules.find((eachValidRule)=>eachValidRule.className === compareClassName);
22
+ if (i !== j && compareRule && css.areRulesDuplicated(rule, compareRule) && css.areRuleStatesEqual(rule, compareRule)) {
23
+ collisionClasses.push(compareClassName);
24
+ }
25
+ }
26
+ if (collisionClasses.length > 0) {
27
+ collisionClassesRecord[className] = collisionClasses;
28
+ }
29
+ }
30
+ }
31
+ return collisionClassesRecord;
32
+ }
33
+ synckit.runAsWorker(runFilterCollisionClasses);
34
+
35
+ module.exports = runFilterCollisionClasses;
@@ -0,0 +1 @@
1
+ export default function runFilterCollisionClasses(classNames: string[], config: string | object): Record<string, string[]>;
@@ -0,0 +1,33 @@
1
+ import { runAsWorker } from 'synckit';
2
+ import getCSS from './get-css.mjs';
3
+ import { generateValidRules } from '@master/css-validator';
4
+ import { areRulesDuplicated, areRuleStatesEqual } from '@master/css';
5
+
6
+ function runFilterCollisionClasses(classNames, config) {
7
+ const currentCSS = getCSS(config);
8
+ const validRules = classNames.map((eachClassName)=>generateValidRules(eachClassName, {
9
+ css: currentCSS
10
+ })[0]).filter(Boolean);
11
+ const collisionClassesRecord = {};
12
+ for(let i = 0; i < classNames.length; i++){
13
+ const className = classNames[i];
14
+ const rule = validRules.find((eachValidRule)=>eachValidRule.className === className);
15
+ const collisionClasses = [];
16
+ if (rule) {
17
+ for(let j = 0; j < classNames.length; j++){
18
+ const compareClassName = classNames[j];
19
+ const compareRule = validRules.find((eachValidRule)=>eachValidRule.className === compareClassName);
20
+ if (i !== j && compareRule && areRulesDuplicated(rule, compareRule) && areRuleStatesEqual(rule, compareRule)) {
21
+ collisionClasses.push(compareClassName);
22
+ }
23
+ }
24
+ if (collisionClasses.length > 0) {
25
+ collisionClassesRecord[className] = collisionClasses;
26
+ }
27
+ }
28
+ }
29
+ return collisionClassesRecord;
30
+ }
31
+ runAsWorker(runFilterCollisionClasses);
32
+
33
+ export { runFilterCollisionClasses as default };
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var css = require('@master/css');
4
+ var exploreConfig = require('@master/css-explore-config');
5
+
6
+ let currentCSS;
7
+ let currentConfig;
8
+ function getCSS(config) {
9
+ if (!currentCSS || currentConfig !== config) {
10
+ currentCSS = new css.MasterCSS(typeof config === 'object' ? config : exploreConfig({
11
+ name: config,
12
+ found: undefined
13
+ }));
14
+ currentConfig = config;
15
+ }
16
+ return currentCSS;
17
+ }
18
+
19
+ module.exports = getCSS;
@@ -0,0 +1 @@
1
+ export default function getCSS(config: any): any;
@@ -0,0 +1,17 @@
1
+ import { MasterCSS } from '@master/css';
2
+ import exploreConfig from '@master/css-explore-config';
3
+
4
+ let currentCSS;
5
+ let currentConfig;
6
+ function getCSS(config) {
7
+ if (!currentCSS || currentConfig !== config) {
8
+ currentCSS = new MasterCSS(typeof config === 'object' ? config : exploreConfig({
9
+ name: config,
10
+ found: undefined
11
+ }));
12
+ currentConfig = config;
13
+ }
14
+ return currentCSS;
15
+ }
16
+
17
+ export { getCSS as default };
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var synckit = require('synckit');
4
+ var reorderValidClasses_worker = require('./reorder-valid-classes.worker.cjs');
5
+ var path = require('path');
6
+
7
+ var reorderValidClasses = process.env.NODE_ENV === 'test' ? reorderValidClasses_worker : synckit.createSyncFn(path.join(__dirname, 'reorder-valid-classes.worker.cjs'));
8
+
9
+ module.exports = reorderValidClasses;
@@ -0,0 +1,3 @@
1
+ import runReorderValidClasses from './reorder-valid-classes.worker';
2
+ declare const _default: typeof runReorderValidClasses;
3
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import __url_for_shim from 'url';
2
+ import __path_for_shim from 'path';
3
+ const __filename = __url_for_shim.fileURLToPath(import.meta.url);
4
+ const __dirname = __path_for_shim.dirname(__filename);
5
+ import { createSyncFn } from 'synckit';
6
+ import runReorderValidClasses from './reorder-valid-classes.worker.mjs';
7
+ import { join } from 'path';
8
+ var reorderValidClasses = process.env.NODE_ENV === 'test' ? runReorderValidClasses : createSyncFn(join(__dirname, 'reorder-valid-classes.worker.cjs'));
9
+ export {
10
+ reorderValidClasses as default
11
+ };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var css = require('@master/css');
4
+ var synckit = require('synckit');
5
+ var getCss = require('./get-css.cjs');
6
+
7
+ function runReorderValidClasses(classNames, config) {
8
+ const currentCSS = getCss(config);
9
+ return css.reorderForReadableClasses(classNames, currentCSS).filter((eachOrderedClassName)=>classNames.includes(eachOrderedClassName));
10
+ }
11
+ synckit.runAsWorker(runReorderValidClasses);
12
+
13
+ module.exports = runReorderValidClasses;
@@ -0,0 +1 @@
1
+ export default function runReorderValidClasses(classNames: string[], config: string | object): string[];
@@ -0,0 +1,11 @@
1
+ import { reorderForReadableClasses } from '@master/css';
2
+ import { runAsWorker } from 'synckit';
3
+ import getCSS from './get-css.mjs';
4
+
5
+ function runReorderValidClasses(classNames, config) {
6
+ const currentCSS = getCSS(config);
7
+ return reorderForReadableClasses(classNames, currentCSS).filter((eachOrderedClassName)=>classNames.includes(eachOrderedClassName));
8
+ }
9
+ runAsWorker(runReorderValidClasses);
10
+
11
+ export { runReorderValidClasses as default };
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var synckit = require('synckit');
4
+ var validate_worker = require('./validate.worker.cjs');
5
+ var path = require('path');
6
+
7
+ var validate = process.env.NODE_ENV === 'test' ? validate_worker : synckit.createSyncFn(path.join(__dirname, 'validate.worker.cjs'));
8
+
9
+ module.exports = validate;
@@ -0,0 +1,3 @@
1
+ import runValidate from './validate.worker';
2
+ declare const _default: typeof runValidate;
3
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import __url_for_shim from 'url';
2
+ import __path_for_shim from 'path';
3
+ const __filename = __url_for_shim.fileURLToPath(import.meta.url);
4
+ const __dirname = __path_for_shim.dirname(__filename);
5
+ import { createSyncFn } from 'synckit';
6
+ import runValidate from './validate.worker.mjs';
7
+ import { join } from 'path';
8
+ var validate = process.env.NODE_ENV === 'test' ? runValidate : createSyncFn(join(__dirname, 'validate.worker.cjs'));
9
+ export {
10
+ validate as default
11
+ };
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var synckit = require('synckit');
4
+ var getCss = require('./get-css.cjs');
5
+ var cssValidator = require('@master/css-validator');
6
+
7
+ function runValidate(className, config) {
8
+ const currentCSS = getCss(config);
9
+ return cssValidator.validate(className, {
10
+ css: currentCSS
11
+ });
12
+ }
13
+ synckit.runAsWorker(runValidate);
14
+
15
+ module.exports = runValidate;
@@ -0,0 +1,5 @@
1
+ import { SyntaxError } from '@master/css-validator';
2
+ export default function runValidate(className: string, config: string | object): {
3
+ isMasterCSS: boolean;
4
+ errors: SyntaxError[];
5
+ };
@@ -0,0 +1,13 @@
1
+ import { runAsWorker } from 'synckit';
2
+ import getCSS from './get-css.mjs';
3
+ import { validate } from '@master/css-validator';
4
+
5
+ function runValidate(className, config) {
6
+ const currentCSS = getCSS(config);
7
+ return validate(className, {
8
+ css: currentCSS
9
+ });
10
+ }
11
+ runAsWorker(runValidate);
12
+
13
+ export { runValidate as default };
package/dist/index.cjs ADDED
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var plugin = require('./plugin.cjs');
4
+ var settings = require('./settings.cjs');
5
+
6
+ const parserOptions = {
7
+ ecmaFeatures: {
8
+ jsx: true
9
+ }
10
+ };
11
+ const rules = {
12
+ '@master/css/class-order': 'warn',
13
+ '@master/css/class-validation': 'error',
14
+ '@master/css/class-collision': 'warn'
15
+ };
16
+ /** @type {import('typescript-eslint').Config} */ var index = {
17
+ ...plugin,
18
+ configs: {
19
+ recommended: {
20
+ plugins: [
21
+ '@master/css'
22
+ ],
23
+ rules,
24
+ parserOptions
25
+ },
26
+ flat: {
27
+ plugins: {
28
+ '@master/css': plugin
29
+ },
30
+ rules,
31
+ languageOptions: {
32
+ parserOptions
33
+ }
34
+ }
35
+ },
36
+ settings
37
+ };
38
+
39
+ module.exports = index;
package/dist/index.d.ts CHANGED
@@ -1 +1,61 @@
1
- export {};
1
+ /** @type {import('typescript-eslint').Config} */
2
+ declare const _default: {
3
+ configs: {
4
+ recommended: {
5
+ plugins: string[];
6
+ rules: {
7
+ '@master/css/class-order': string;
8
+ '@master/css/class-validation': string;
9
+ '@master/css/class-collision': string;
10
+ };
11
+ parserOptions: {
12
+ ecmaFeatures: {
13
+ jsx: boolean;
14
+ };
15
+ };
16
+ };
17
+ flat: {
18
+ plugins: {
19
+ '@master/css': {
20
+ meta: {
21
+ name: string;
22
+ };
23
+ rules: {
24
+ 'class-collision': import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
25
+ 'class-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClassOrder", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
26
+ 'class-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClass" | "disallowUnknownClass", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
27
+ };
28
+ };
29
+ };
30
+ rules: {
31
+ '@master/css/class-order': string;
32
+ '@master/css/class-validation': string;
33
+ '@master/css/class-collision': string;
34
+ };
35
+ languageOptions: {
36
+ parserOptions: {
37
+ ecmaFeatures: {
38
+ jsx: boolean;
39
+ };
40
+ };
41
+ };
42
+ };
43
+ };
44
+ settings: {
45
+ classAttributes: string[];
46
+ classFunctions: string[];
47
+ classDeclarations: string[];
48
+ ignoredKeys: string[];
49
+ /** @type {import('typescript-eslint').Config} */
50
+ config: string;
51
+ };
52
+ meta: {
53
+ name: string;
54
+ };
55
+ rules: {
56
+ 'class-collision': import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
57
+ 'class-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClassOrder", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
58
+ 'class-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClass" | "disallowUnknownClass", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
59
+ };
60
+ };
61
+ export default _default;
package/dist/index.mjs CHANGED
@@ -1 +1,37 @@
1
- var i=(r,o)=>()=>(o||r((o={exports:{}}).exports,o),o.exports);import t from"./plugin.mjs";import f from"./settings.mjs";import p from"./configs/recommended.mjs";import e from"./configs/flat.mjs";var n=i((x,m)=>{m.exports={...t,configs:{recommended:p,flat:e},settings:f}});export default n();
1
+ import plugin from './plugin.mjs';
2
+ import settings from './settings.mjs';
3
+
4
+ const parserOptions = {
5
+ ecmaFeatures: {
6
+ jsx: true
7
+ }
8
+ };
9
+ const rules = {
10
+ '@master/css/class-order': 'warn',
11
+ '@master/css/class-validation': 'error',
12
+ '@master/css/class-collision': 'warn'
13
+ };
14
+ /** @type {import('typescript-eslint').Config} */ var index = {
15
+ ...plugin,
16
+ configs: {
17
+ recommended: {
18
+ plugins: [
19
+ '@master/css'
20
+ ],
21
+ rules,
22
+ parserOptions
23
+ },
24
+ flat: {
25
+ plugins: {
26
+ '@master/css': plugin
27
+ },
28
+ rules,
29
+ languageOptions: {
30
+ parserOptions
31
+ }
32
+ }
33
+ },
34
+ settings
35
+ };
36
+
37
+ export { index as default };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var classCollision = require('./rules/class-collision.cjs');
4
+ var classOrder = require('./rules/class-order.cjs');
5
+ var classValidation = require('./rules/class-validation.cjs');
6
+
7
+ const plugin = {
8
+ meta: {
9
+ name: '@master/eslint-plugin-css'
10
+ },
11
+ rules: {
12
+ 'class-collision': classCollision,
13
+ 'class-order': classOrder,
14
+ 'class-validation': classValidation
15
+ }
16
+ };
17
+
18
+ module.exports = plugin;
package/dist/plugin.d.ts CHANGED
@@ -1,3 +1,11 @@
1
- import type { ESLint } from 'eslint';
2
- declare const plugin: ESLint.Plugin;
1
+ declare const plugin: {
2
+ meta: {
3
+ name: string;
4
+ };
5
+ rules: {
6
+ 'class-collision': import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
+ 'class-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClassOrder", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
8
+ 'class-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClass" | "disallowUnknownClass", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
9
+ };
10
+ };
3
11
  export default plugin;
package/dist/plugin.mjs CHANGED
@@ -1 +1,16 @@
1
- import s from"./rules/class-collision.mjs";import i from"./rules/class-order.mjs";import l from"./rules/class-validation.mjs";const o={meta:{name:"@master/eslint-plugin-css"},rules:{"class-collision":s,"class-order":i,"class-validation":l}};var n=o;export{n as default};
1
+ import classCollision from './rules/class-collision.mjs';
2
+ import classOrder from './rules/class-order.mjs';
3
+ import classValidation from './rules/class-validation.mjs';
4
+
5
+ const plugin = {
6
+ meta: {
7
+ name: '@master/eslint-plugin-css'
8
+ },
9
+ rules: {
10
+ 'class-collision': classCollision,
11
+ 'class-order': classOrder,
12
+ 'class-validation': classValidation
13
+ }
14
+ };
15
+
16
+ export { plugin as default };
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var defineVisitors = require('../utils/define-visitors.cjs');
4
+ var resolveContext = require('../utils/resolve-context.cjs');
5
+ var findLoc = require('../utils/find-loc.cjs');
6
+ var parseNodeRecursive = require('../utils/parse-node-recursive.cjs');
7
+ var filterCollisionClasses = require('../functions/filter-collision-classes.cjs');
8
+ var createRule = require('../create-rule.cjs');
9
+ var settingsSchema = require('../settings-schema.cjs');
10
+
11
+ var classCollision = createRule({
12
+ name: 'class-collision-detection',
13
+ meta: {
14
+ type: 'layout',
15
+ docs: {
16
+ description: 'Avoid applying classes with the same CSS declaration',
17
+ recommended: 'recommended'
18
+ },
19
+ messages: {
20
+ collisionClass: '{{message}}'
21
+ },
22
+ fixable: 'code',
23
+ schema: [
24
+ settingsSchema
25
+ ]
26
+ },
27
+ defaultOptions: [],
28
+ create (context) {
29
+ const { options, settings } = resolveContext(context);
30
+ const visitNode = (node, arg = null)=>{
31
+ parseNodeRecursive.parseNodeRecursive(node, arg, (classNames, node, originalClassNamesValue, start, end)=>{
32
+ const sourceCode = context.sourceCode;
33
+ const sourceCodeLines = sourceCode.lines;
34
+ const nodeStartLine = node.loc.start.line;
35
+ const nodeEndLine = node.loc.end.line;
36
+ const collisionClassesRecord = filterCollisionClasses(classNames, settings.config);
37
+ for(const className in collisionClassesRecord){
38
+ const collisionClasses = collisionClassesRecord[className];
39
+ const collisionClassNamesMsg = collisionClasses.map((x)=>`"${x}"`).join(' and ');
40
+ let fixClassNames = originalClassNamesValue;
41
+ for (const collisionClassName of collisionClasses){
42
+ const regexSafe = collisionClassName.replace(/(\\|\.|\(|\)|\[|\]|\{|\}|\+|\*|\?|\^|\$|\||\/)/g, '\\$1');
43
+ fixClassNames = fixClassNames.replace(new RegExp(`\\s+${regexSafe}|${regexSafe}\\s+`), '');
44
+ }
45
+ context.report({
46
+ loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
47
+ messageId: 'collisionClass',
48
+ data: {
49
+ message: `"${className}" applies the same CSS declarations as ${collisionClassNamesMsg}.`
50
+ },
51
+ fix: function(fixer) {
52
+ return fixer.replaceTextRange([
53
+ start,
54
+ end
55
+ ], fixClassNames);
56
+ }
57
+ });
58
+ }
59
+ }, false, false, settings.ignoredKeys, context);
60
+ };
61
+ return defineVisitors({
62
+ context,
63
+ settings
64
+ }, visitNode);
65
+ }
66
+ });
67
+
68
+ module.exports = classCollision;
@@ -1,3 +1,2 @@
1
- import { Rule } from 'eslint';
2
- declare const _default: Rule.RuleModule;
1
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", [], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
2
  export default _default;
@@ -1 +1,66 @@
1
- import $ from"../utils/are-declarations-equal.mjs";import v from"../utils/define-visitors.mjs";import L from"../utils/resolve-context.mjs";import j from"../utils/find-loc.mjs";import{parseNodeRecursive as x}from"../utils/parse-node-recursive.mjs";import M from"../utils/valid-rules-action.mjs";var O={meta:{docs:{description:"Avoid applying classes with the same CSS declaration",category:"Stylistic Issues",recommended:!1,url:"https://rc.css.master.co/docs/code-linting#class-collision-detection"},messages:{collisionClass:"{{message}}"},fixable:"code",schema:[{type:"object",properties:{calleeMatching:{type:"string"},classMatching:{type:"string"},ignoredKeys:{type:"array",items:{type:"string",minLength:0},uniqueItems:!0},config:{type:["string","object"]}}}]},create(t){const{options:N,settings:a}=L(t);return v({context:t,settings:a},(f,g=null)=>{x(f,g,(i,d,u,C,h)=>{const y=t.sourceCode.lines,R=d.loc.start.line,S=d.loc.end.line,p=M(i,a.config);for(let n=0;n<i.length;n++){const c=i[n],l=p[c],r=[];if(l)for(let s=0;s<i.length;s++){const o=i[s],e=p[o];n!==s&&e&&$(l.declarations,e.declarations)&&l.stateToken===e.stateToken&&r.push(o)}if(r.length>0){const s=r.map(e=>`"${e}"`).join(" and ");let o=u;for(const e of r){const m=e.replace(/(\\|\.|\(|\)|\[|\]|\{|\}|\+|\*|\?|\^|\$|\||\/)/g,"\\$1");o=o.replace(new RegExp(`\\s+${m}|${m}\\s+`),"")}t.report({loc:j(c,y,R,S),messageId:"collisionClass",data:{message:`"${c}" applies the same CSS declarations as ${s}.`},fix:function(e){return e.replaceTextRange([C,h],o)}})}}},!1,!1,a.ignoredKeys,t)})}};export{O as default};
1
+ import defineVisitors from '../utils/define-visitors.mjs';
2
+ import resolveContext from '../utils/resolve-context.mjs';
3
+ import findLoc from '../utils/find-loc.mjs';
4
+ import { parseNodeRecursive } from '../utils/parse-node-recursive.mjs';
5
+ import filterCollisionClasses from '../functions/filter-collision-classes.mjs';
6
+ import createRule from '../create-rule.mjs';
7
+ import settingsSchema from '../settings-schema.mjs';
8
+
9
+ var classCollision = createRule({
10
+ name: 'class-collision-detection',
11
+ meta: {
12
+ type: 'layout',
13
+ docs: {
14
+ description: 'Avoid applying classes with the same CSS declaration',
15
+ recommended: 'recommended'
16
+ },
17
+ messages: {
18
+ collisionClass: '{{message}}'
19
+ },
20
+ fixable: 'code',
21
+ schema: [
22
+ settingsSchema
23
+ ]
24
+ },
25
+ defaultOptions: [],
26
+ create (context) {
27
+ const { options, settings } = resolveContext(context);
28
+ const visitNode = (node, arg = null)=>{
29
+ parseNodeRecursive(node, arg, (classNames, node, originalClassNamesValue, start, end)=>{
30
+ const sourceCode = context.sourceCode;
31
+ const sourceCodeLines = sourceCode.lines;
32
+ const nodeStartLine = node.loc.start.line;
33
+ const nodeEndLine = node.loc.end.line;
34
+ const collisionClassesRecord = filterCollisionClasses(classNames, settings.config);
35
+ for(const className in collisionClassesRecord){
36
+ const collisionClasses = collisionClassesRecord[className];
37
+ const collisionClassNamesMsg = collisionClasses.map((x)=>`"${x}"`).join(' and ');
38
+ let fixClassNames = originalClassNamesValue;
39
+ for (const collisionClassName of collisionClasses){
40
+ const regexSafe = collisionClassName.replace(/(\\|\.|\(|\)|\[|\]|\{|\}|\+|\*|\?|\^|\$|\||\/)/g, '\\$1');
41
+ fixClassNames = fixClassNames.replace(new RegExp(`\\s+${regexSafe}|${regexSafe}\\s+`), '');
42
+ }
43
+ context.report({
44
+ loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
45
+ messageId: 'collisionClass',
46
+ data: {
47
+ message: `"${className}" applies the same CSS declarations as ${collisionClassNamesMsg}.`
48
+ },
49
+ fix: function(fixer) {
50
+ return fixer.replaceTextRange([
51
+ start,
52
+ end
53
+ ], fixClassNames);
54
+ }
55
+ });
56
+ }
57
+ }, false, false, settings.ignoredKeys, context);
58
+ };
59
+ return defineVisitors({
60
+ context,
61
+ settings
62
+ }, visitNode);
63
+ }
64
+ });
65
+
66
+ export { classCollision as default };