@master/eslint-plugin-css 2.0.0-rc.70 → 2.0.0-rc.72
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.
- package/README.md +68 -11
- package/dist/configs/recommended.cjs +4 -3
- package/dist/configs/recommended.mjs +4 -3
- package/dist/plugin.cjs +10 -6
- package/dist/plugin.mjs +10 -6
- package/dist/rules/no-conflicting-classes.cjs +101 -0
- package/dist/rules/no-conflicting-classes.d.ts +4 -0
- package/dist/rules/no-conflicting-classes.mjs +99 -0
- package/dist/rules/no-invalid-classes.cjs +51 -0
- package/dist/rules/{class-validation.d.ts → no-invalid-classes.d.ts} +1 -1
- package/dist/rules/no-invalid-classes.mjs +49 -0
- package/dist/rules/no-unapproved-raw-values.cjs +77 -0
- package/dist/rules/no-unapproved-raw-values.d.ts +8 -0
- package/dist/rules/no-unapproved-raw-values.mjs +75 -0
- package/dist/rules/prefer-canonical-classes.cjs +112 -0
- package/dist/rules/prefer-canonical-classes.d.ts +5 -0
- package/dist/rules/prefer-canonical-classes.mjs +110 -0
- package/dist/rules/{class-order.cjs → sort-classes.cjs} +10 -21
- package/dist/rules/{class-order.mjs → sort-classes.mjs} +10 -21
- package/dist/settings-schema.cjs +29 -23
- package/dist/settings-schema.d.ts +3 -2
- package/dist/settings-schema.mjs +25 -23
- package/dist/settings.cjs +2 -8
- package/dist/settings.d.ts +2 -2
- package/dist/settings.mjs +2 -8
- package/dist/utils/define-visitors.cjs +1 -1
- package/dist/utils/define-visitors.mjs +1 -1
- package/dist/utils/master-css.cjs +2 -82
- package/dist/utils/master-css.d.ts +0 -16
- package/dist/utils/master-css.mjs +1 -75
- package/dist/utils/resolve-class-node.cjs +18 -67
- package/dist/utils/resolve-class-node.d.ts +15 -7
- package/dist/utils/resolve-class-node.mjs +18 -67
- package/dist/utils/resolve-context.d.ts +1 -1
- package/package.json +1 -1
- package/dist/common.cjs +0 -7
- package/dist/common.d.ts +0 -2
- package/dist/common.mjs +0 -4
- package/dist/functions/filter-collision-classes.cjs +0 -29
- package/dist/functions/filter-collision-classes.d.ts +0 -2
- package/dist/functions/filter-collision-classes.mjs +0 -27
- package/dist/rules/class-collision.cjs +0 -76
- package/dist/rules/class-collision.d.ts +0 -4
- package/dist/rules/class-collision.mjs +0 -74
- package/dist/rules/class-validation.cjs +0 -60
- package/dist/rules/class-validation.mjs +0 -58
- /package/dist/rules/{class-order.d.ts → sort-classes.d.ts} +0 -0
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import defineVisitors from '../utils/define-visitors.mjs';
|
|
2
|
-
import resolveContext from '../utils/resolve-context.mjs';
|
|
3
|
-
import filterCollisionClasses from '../functions/filter-collision-classes.mjs';
|
|
4
|
-
import createRule from '../create-rule.mjs';
|
|
5
|
-
import settingsSchema from '../settings-schema.mjs';
|
|
6
|
-
|
|
7
|
-
var classCollision = createRule({
|
|
8
|
-
name: 'class-collision-detection',
|
|
9
|
-
meta: {
|
|
10
|
-
type: 'layout',
|
|
11
|
-
docs: {
|
|
12
|
-
description: 'Avoid applying classes with the same declarations'
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
collisionClass: '{{message}}'
|
|
16
|
-
},
|
|
17
|
-
fixable: 'code',
|
|
18
|
-
schema: [
|
|
19
|
-
settingsSchema
|
|
20
|
-
]
|
|
21
|
-
},
|
|
22
|
-
defaultOptions: [],
|
|
23
|
-
create (context) {
|
|
24
|
-
const { settings, css } = resolveContext(context);
|
|
25
|
-
return defineVisitors({
|
|
26
|
-
context,
|
|
27
|
-
settings
|
|
28
|
-
}, (node, { raw, start, end, nodes, classNodes, classValues })=>{
|
|
29
|
-
const collisionClassesRecord = filterCollisionClasses(classValues, css);
|
|
30
|
-
for(const className in collisionClassesRecord){
|
|
31
|
-
const collisionClasses = collisionClassesRecord[className];
|
|
32
|
-
const collisionClassNamesMsg = collisionClasses.map((x)=>`"${x}"`).join(' and ');
|
|
33
|
-
const classNode = classNodes.find((node)=>node.value === className);
|
|
34
|
-
const fixedNodes = [
|
|
35
|
-
...nodes
|
|
36
|
-
];
|
|
37
|
-
const removeCollision = (removedClassNode)=>{
|
|
38
|
-
for(let i = 0; i < fixedNodes.length; i++){
|
|
39
|
-
const fixedNode = fixedNodes[i];
|
|
40
|
-
const target = fixedNode === removedClassNode;
|
|
41
|
-
if (target) {
|
|
42
|
-
const prev = fixedNodes[i - 1];
|
|
43
|
-
const isSpaceBefore = prev && prev.type === 'space';
|
|
44
|
-
fixedNodes.splice(i, 1);
|
|
45
|
-
if (isSpaceBefore) {
|
|
46
|
-
fixedNodes.splice(i - 1, 1);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
collisionClasses.forEach((collisionClass)=>{
|
|
52
|
-
const collisionNode = classNodes.find((node)=>node.value === collisionClass);
|
|
53
|
-
removeCollision(collisionNode);
|
|
54
|
-
});
|
|
55
|
-
const fixedRaw = fixedNodes.map((node)=>node.raw).join('');
|
|
56
|
-
context.report({
|
|
57
|
-
loc: classNode.loc,
|
|
58
|
-
messageId: 'collisionClass',
|
|
59
|
-
data: {
|
|
60
|
-
message: `"${className}" applies the same declarations as ${collisionClassNamesMsg}.`
|
|
61
|
-
},
|
|
62
|
-
fix: function(fixer) {
|
|
63
|
-
return fixer.replaceTextRange([
|
|
64
|
-
start,
|
|
65
|
-
end
|
|
66
|
-
], fixedRaw);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
export { classCollision as default };
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var defineVisitors = require('../utils/define-visitors.cjs');
|
|
4
|
-
var resolveContext = require('../utils/resolve-context.cjs');
|
|
5
|
-
var createRule = require('../create-rule.cjs');
|
|
6
|
-
var settingsSchema = require('../settings-schema.cjs');
|
|
7
|
-
var cssValidator = require('@master/css-validator');
|
|
8
|
-
|
|
9
|
-
var classValidation = createRule({
|
|
10
|
-
name: 'syntax-error-checks',
|
|
11
|
-
meta: {
|
|
12
|
-
type: 'problem',
|
|
13
|
-
docs: {
|
|
14
|
-
description: 'Detect syntax errors early when writing classes'
|
|
15
|
-
},
|
|
16
|
-
messages: {
|
|
17
|
-
invalidClass: '{{message}}',
|
|
18
|
-
disallowUnknownClass: '{{message}}'
|
|
19
|
-
},
|
|
20
|
-
fixable: null,
|
|
21
|
-
schema: [
|
|
22
|
-
settingsSchema
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
defaultOptions: [],
|
|
26
|
-
create: function(context) {
|
|
27
|
-
const { options, settings, css } = resolveContext(context);
|
|
28
|
-
return defineVisitors({
|
|
29
|
-
context,
|
|
30
|
-
settings
|
|
31
|
-
}, (_, { classNodes })=>{
|
|
32
|
-
for (const node of classNodes){
|
|
33
|
-
const { matched, errors } = cssValidator.validate(node.value, css);
|
|
34
|
-
if (errors.length > 0) {
|
|
35
|
-
for (const error of errors){
|
|
36
|
-
if (matched) {
|
|
37
|
-
context.report({
|
|
38
|
-
node,
|
|
39
|
-
messageId: 'invalidClass',
|
|
40
|
-
data: {
|
|
41
|
-
message: error.message + '.'
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
} else if (options.disallowUnknownClass) {
|
|
45
|
-
context.report({
|
|
46
|
-
node,
|
|
47
|
-
messageId: 'disallowUnknownClass',
|
|
48
|
-
data: {
|
|
49
|
-
message: `"${node.raw}" is not a valid or known class.`
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
module.exports = classValidation;
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import defineVisitors from '../utils/define-visitors.mjs';
|
|
2
|
-
import resolveContext from '../utils/resolve-context.mjs';
|
|
3
|
-
import createRule from '../create-rule.mjs';
|
|
4
|
-
import settingsSchema from '../settings-schema.mjs';
|
|
5
|
-
import { validate } from '@master/css-validator';
|
|
6
|
-
|
|
7
|
-
var classValidation = createRule({
|
|
8
|
-
name: 'syntax-error-checks',
|
|
9
|
-
meta: {
|
|
10
|
-
type: 'problem',
|
|
11
|
-
docs: {
|
|
12
|
-
description: 'Detect syntax errors early when writing classes'
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
invalidClass: '{{message}}',
|
|
16
|
-
disallowUnknownClass: '{{message}}'
|
|
17
|
-
},
|
|
18
|
-
fixable: null,
|
|
19
|
-
schema: [
|
|
20
|
-
settingsSchema
|
|
21
|
-
]
|
|
22
|
-
},
|
|
23
|
-
defaultOptions: [],
|
|
24
|
-
create: function(context) {
|
|
25
|
-
const { options, settings, css } = resolveContext(context);
|
|
26
|
-
return defineVisitors({
|
|
27
|
-
context,
|
|
28
|
-
settings
|
|
29
|
-
}, (_, { classNodes })=>{
|
|
30
|
-
for (const node of classNodes){
|
|
31
|
-
const { matched, errors } = validate(node.value, css);
|
|
32
|
-
if (errors.length > 0) {
|
|
33
|
-
for (const error of errors){
|
|
34
|
-
if (matched) {
|
|
35
|
-
context.report({
|
|
36
|
-
node,
|
|
37
|
-
messageId: 'invalidClass',
|
|
38
|
-
data: {
|
|
39
|
-
message: error.message + '.'
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
} else if (options.disallowUnknownClass) {
|
|
43
|
-
context.report({
|
|
44
|
-
node,
|
|
45
|
-
messageId: 'disallowUnknownClass',
|
|
46
|
-
data: {
|
|
47
|
-
message: `"${node.raw}" is not a valid or known class.`
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
export { classValidation as default };
|
|
File without changes
|