@master/eslint-plugin-css 2.0.0-rc.47 → 2.0.0-rc.49
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/dist/functions/filter-collision-classes.cjs +2 -2
- package/dist/functions/filter-collision-classes.mjs +2 -2
- package/dist/rules/class-collision.cjs +3 -1
- package/dist/rules/class-collision.mjs +3 -1
- package/dist/rules/class-order.cjs +3 -1
- package/dist/rules/class-order.mjs +3 -1
- package/dist/rules/class-validation.cjs +4 -2
- package/dist/rules/class-validation.mjs +4 -2
- package/dist/utils/find-loc.cjs +4 -1
- package/dist/utils/find-loc.d.ts +1 -1
- package/dist/utils/find-loc.mjs +4 -1
- package/dist/utils/parse-node-recursive.cjs +1 -1
- package/dist/utils/parse-node-recursive.mjs +1 -1
- package/package.json +1 -1
|
@@ -8,12 +8,12 @@ function filterCollisionClasses(classNames, css$1) {
|
|
|
8
8
|
const collisionClassesRecord = {};
|
|
9
9
|
for(let i = 0; i < classNames.length; i++){
|
|
10
10
|
const className = classNames[i];
|
|
11
|
-
const rule = validRules.find((eachValidRule)=>eachValidRule.
|
|
11
|
+
const rule = validRules.find((eachValidRule)=>eachValidRule.name === className);
|
|
12
12
|
const collisionClasses = [];
|
|
13
13
|
if (rule) {
|
|
14
14
|
for(let j = 0; j < classNames.length; j++){
|
|
15
15
|
const compareClassName = classNames[j];
|
|
16
|
-
const compareRule = validRules.find((eachValidRule)=>eachValidRule.
|
|
16
|
+
const compareRule = validRules.find((eachValidRule)=>eachValidRule.name === compareClassName);
|
|
17
17
|
if (i !== j && compareRule && css.areRulesDuplicated(rule, compareRule) && css.areRuleStatesEqual(rule, compareRule)) {
|
|
18
18
|
collisionClasses.push(compareClassName);
|
|
19
19
|
}
|
|
@@ -6,12 +6,12 @@ function filterCollisionClasses(classNames, css) {
|
|
|
6
6
|
const collisionClassesRecord = {};
|
|
7
7
|
for(let i = 0; i < classNames.length; i++){
|
|
8
8
|
const className = classNames[i];
|
|
9
|
-
const rule = validRules.find((eachValidRule)=>eachValidRule.
|
|
9
|
+
const rule = validRules.find((eachValidRule)=>eachValidRule.name === className);
|
|
10
10
|
const collisionClasses = [];
|
|
11
11
|
if (rule) {
|
|
12
12
|
for(let j = 0; j < classNames.length; j++){
|
|
13
13
|
const compareClassName = classNames[j];
|
|
14
|
-
const compareRule = validRules.find((eachValidRule)=>eachValidRule.
|
|
14
|
+
const compareRule = validRules.find((eachValidRule)=>eachValidRule.name === compareClassName);
|
|
15
15
|
if (i !== j && compareRule && areRulesDuplicated(rule, compareRule) && areRuleStatesEqual(rule, compareRule)) {
|
|
16
16
|
collisionClasses.push(compareClassName);
|
|
17
17
|
}
|
|
@@ -31,7 +31,9 @@ var classCollision = createRule({
|
|
|
31
31
|
const sourceCode = context.sourceCode;
|
|
32
32
|
const sourceCodeLines = sourceCode.lines;
|
|
33
33
|
const nodeStartLine = node.loc.start.line;
|
|
34
|
+
const nodeStartColumn = node.loc.start.column;
|
|
34
35
|
const nodeEndLine = node.loc.end.line;
|
|
36
|
+
const nodeEndColumn = node.loc.end.column;
|
|
35
37
|
// todo css
|
|
36
38
|
const collisionClassesRecord = filterCollisionClasses(classNames, css);
|
|
37
39
|
for(const className in collisionClassesRecord){
|
|
@@ -43,7 +45,7 @@ var classCollision = createRule({
|
|
|
43
45
|
fixClassNames = fixClassNames.replace(new RegExp(`\\s+${regexSafe}|${regexSafe}\\s+`), '');
|
|
44
46
|
}
|
|
45
47
|
context.report({
|
|
46
|
-
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
48
|
+
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
47
49
|
messageId: 'collisionClass',
|
|
48
50
|
data: {
|
|
49
51
|
message: `"${className}" applies the same CSS declarations as ${collisionClassNamesMsg}.`
|
|
@@ -29,7 +29,9 @@ var classCollision = createRule({
|
|
|
29
29
|
const sourceCode = context.sourceCode;
|
|
30
30
|
const sourceCodeLines = sourceCode.lines;
|
|
31
31
|
const nodeStartLine = node.loc.start.line;
|
|
32
|
+
const nodeStartColumn = node.loc.start.column;
|
|
32
33
|
const nodeEndLine = node.loc.end.line;
|
|
34
|
+
const nodeEndColumn = node.loc.end.column;
|
|
33
35
|
// todo css
|
|
34
36
|
const collisionClassesRecord = filterCollisionClasses(classNames, css);
|
|
35
37
|
for(const className in collisionClassesRecord){
|
|
@@ -41,7 +43,7 @@ var classCollision = createRule({
|
|
|
41
43
|
fixClassNames = fixClassNames.replace(new RegExp(`\\s+${regexSafe}|${regexSafe}\\s+`), '');
|
|
42
44
|
}
|
|
43
45
|
context.report({
|
|
44
|
-
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
46
|
+
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
45
47
|
messageId: 'collisionClass',
|
|
46
48
|
data: {
|
|
47
49
|
message: `"${className}" applies the same CSS declarations as ${collisionClassNamesMsg}.`
|
|
@@ -150,9 +150,11 @@ var classOrder = createRule({
|
|
|
150
150
|
validatedClassNamesValue = prefix + validatedClassNamesValue + suffix;
|
|
151
151
|
const sourceCodeLines = sourceCode.lines;
|
|
152
152
|
const nodeStartLine = node.loc.start.line;
|
|
153
|
+
const nodeStartColumn = node.loc.start.column;
|
|
153
154
|
const nodeEndLine = node.loc.end.line;
|
|
155
|
+
const nodeEndColumn = node.loc.end.column;
|
|
154
156
|
context.report({
|
|
155
|
-
loc: findLoc(originalClassNamesValue, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
157
|
+
loc: findLoc(originalClassNamesValue, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
156
158
|
messageId: 'invalidClassOrder',
|
|
157
159
|
fix: function(fixer) {
|
|
158
160
|
return fixer.replaceTextRange([
|
|
@@ -148,9 +148,11 @@ var classOrder = createRule({
|
|
|
148
148
|
validatedClassNamesValue = prefix + validatedClassNamesValue + suffix;
|
|
149
149
|
const sourceCodeLines = sourceCode.lines;
|
|
150
150
|
const nodeStartLine = node.loc.start.line;
|
|
151
|
+
const nodeStartColumn = node.loc.start.column;
|
|
151
152
|
const nodeEndLine = node.loc.end.line;
|
|
153
|
+
const nodeEndColumn = node.loc.end.column;
|
|
152
154
|
context.report({
|
|
153
|
-
loc: findLoc(originalClassNamesValue, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
155
|
+
loc: findLoc(originalClassNamesValue, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
154
156
|
messageId: 'invalidClassOrder',
|
|
155
157
|
fix: function(fixer) {
|
|
156
158
|
return fixer.replaceTextRange([
|
|
@@ -32,14 +32,16 @@ var classValidation = createRule({
|
|
|
32
32
|
const sourceCode = context.sourceCode;
|
|
33
33
|
const sourceCodeLines = sourceCode.lines;
|
|
34
34
|
const nodeStartLine = node.loc.start.line;
|
|
35
|
+
const nodeStartColumn = node.loc.start.column;
|
|
35
36
|
const nodeEndLine = node.loc.end.line;
|
|
37
|
+
const nodeEndColumn = node.loc.end.column;
|
|
36
38
|
for (const className of classNames){
|
|
37
39
|
const { matched, errors } = cssValidator.validate(className, css);
|
|
38
40
|
if (errors.length > 0) {
|
|
39
41
|
for (const error of errors){
|
|
40
42
|
if (matched) {
|
|
41
43
|
context.report({
|
|
42
|
-
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
44
|
+
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
43
45
|
messageId: 'invalidClass',
|
|
44
46
|
data: {
|
|
45
47
|
message: error.message + '.'
|
|
@@ -47,7 +49,7 @@ var classValidation = createRule({
|
|
|
47
49
|
});
|
|
48
50
|
} else if (options.disallowUnknownClass) {
|
|
49
51
|
context.report({
|
|
50
|
-
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
52
|
+
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
51
53
|
messageId: 'disallowUnknownClass',
|
|
52
54
|
data: {
|
|
53
55
|
message: `"${className}" is not a valid or known class.`
|
|
@@ -30,14 +30,16 @@ var classValidation = createRule({
|
|
|
30
30
|
const sourceCode = context.sourceCode;
|
|
31
31
|
const sourceCodeLines = sourceCode.lines;
|
|
32
32
|
const nodeStartLine = node.loc.start.line;
|
|
33
|
+
const nodeStartColumn = node.loc.start.column;
|
|
33
34
|
const nodeEndLine = node.loc.end.line;
|
|
35
|
+
const nodeEndColumn = node.loc.end.column;
|
|
34
36
|
for (const className of classNames){
|
|
35
37
|
const { matched, errors } = validate(className, css);
|
|
36
38
|
if (errors.length > 0) {
|
|
37
39
|
for (const error of errors){
|
|
38
40
|
if (matched) {
|
|
39
41
|
context.report({
|
|
40
|
-
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
42
|
+
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
41
43
|
messageId: 'invalidClass',
|
|
42
44
|
data: {
|
|
43
45
|
message: error.message + '.'
|
|
@@ -45,7 +47,7 @@ var classValidation = createRule({
|
|
|
45
47
|
});
|
|
46
48
|
} else if (options.disallowUnknownClass) {
|
|
47
49
|
context.report({
|
|
48
|
-
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
50
|
+
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeStartColumn, nodeEndLine, nodeEndColumn),
|
|
49
51
|
messageId: 'disallowUnknownClass',
|
|
50
52
|
data: {
|
|
51
53
|
message: `"${className}" is not a valid or known class.`
|
package/dist/utils/find-loc.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var indexOfAll = require('./index-of-all.cjs');
|
|
4
4
|
|
|
5
|
-
function findLoc(text, lines, startLine, endLine) {
|
|
5
|
+
function findLoc(text, lines, startLine, startColumn, endLine, endColumn) {
|
|
6
6
|
const targetLines = text.match(/.+(?:\r\n|\n)?/g);
|
|
7
7
|
let checkingTargetLine = 0;
|
|
8
8
|
let resultStart = null;
|
|
@@ -13,6 +13,9 @@ function findLoc(text, lines, startLine, endLine) {
|
|
|
13
13
|
const indexes = indexOfAll.indexOfAll(sourceCodeLine, content);
|
|
14
14
|
if (indexes.length > 0) {
|
|
15
15
|
for (const index of indexes){
|
|
16
|
+
if (i === startLine && index < startColumn || i === endLine && index > endColumn) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
16
19
|
if (index !== 0 && sourceCodeLine[index - 1].match(/\w/) || index + content.length < sourceCodeLine.length && sourceCodeLine[index + content.length].match(/\w/)) {
|
|
17
20
|
continue;
|
|
18
21
|
}
|
package/dist/utils/find-loc.d.ts
CHANGED
package/dist/utils/find-loc.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { indexOfAll } from './index-of-all.mjs';
|
|
2
2
|
|
|
3
|
-
function findLoc(text, lines, startLine, endLine) {
|
|
3
|
+
function findLoc(text, lines, startLine, startColumn, endLine, endColumn) {
|
|
4
4
|
const targetLines = text.match(/.+(?:\r\n|\n)?/g);
|
|
5
5
|
let checkingTargetLine = 0;
|
|
6
6
|
let resultStart = null;
|
|
@@ -11,6 +11,9 @@ function findLoc(text, lines, startLine, endLine) {
|
|
|
11
11
|
const indexes = indexOfAll(sourceCodeLine, content);
|
|
12
12
|
if (indexes.length > 0) {
|
|
13
13
|
for (const index of indexes){
|
|
14
|
+
if (i === startLine && index < startColumn || i === endLine && index > endColumn) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
14
17
|
if (index !== 0 && sourceCodeLine[index - 1].match(/\w/) || index + content.length < sourceCodeLine.length && sourceCodeLine[index + content.length].match(/\w/)) {
|
|
15
18
|
continue;
|
|
16
19
|
}
|
|
@@ -85,7 +85,7 @@ var extractRangeFromNode = require('./extract-range-from-node.cjs');
|
|
|
85
85
|
// Ignore specific keys defined in settings
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
|
-
parseNodeRecursive(
|
|
88
|
+
parseNodeRecursive(prop, isUsedByClassNamesPlugin ? prop.key : prop.value, cb, skipConditional, forceIsolation, ignoredKeys, context);
|
|
89
89
|
});
|
|
90
90
|
return;
|
|
91
91
|
case 'Property':
|
|
@@ -83,7 +83,7 @@ import extractRangeFromNode from './extract-range-from-node.mjs';
|
|
|
83
83
|
// Ignore specific keys defined in settings
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
|
-
parseNodeRecursive(
|
|
86
|
+
parseNodeRecursive(prop, isUsedByClassNamesPlugin ? prop.key : prop.value, cb, skipConditional, forceIsolation, ignoredKeys, context);
|
|
87
87
|
});
|
|
88
88
|
return;
|
|
89
89
|
case 'Property':
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@master/eslint-plugin-css","type":"module","scripts":{"build":"techor build \"src/**/*.{js,ts}\"","dev":"pnpm build --watch","test":"vitest","type-check":"tsc --noEmit","lint":"eslint"},"keywords":["mastercss","eslint","eslintplugin"],"license":"MIT","description":"Master CSS ESLint Plugin","author":"Aoyue Design LLC.","funding":"https://rc.css.master.co/sponsor","homepage":"https://css.master.co","bugs":{"url":"https://github.com/master-co/css/issues"},"repository":{"type":"git","url":"https://github.com/master-co/css.git","directory":"packages/eslint-plugin"},"sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.mjs","jsnext:main":"./dist/index.mjs","esnext":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./configs/*":{"types":"./dist/configs/*.d.ts","import":"./dist/configs/*.mjs","require":"./dist/configs/*.cjs"}},"files":["dist"],"publishConfig":{"access":"public","provenance":true},"dependencies":{"@master/css":"^2.0.0-rc.
|
|
1
|
+
{"name":"@master/eslint-plugin-css","type":"module","scripts":{"build":"techor build \"src/**/*.{js,ts}\"","dev":"pnpm build --watch","test":"vitest","type-check":"tsc --noEmit","lint":"eslint"},"keywords":["mastercss","eslint","eslintplugin"],"license":"MIT","description":"Master CSS ESLint Plugin","author":"Aoyue Design LLC.","funding":"https://rc.css.master.co/sponsor","homepage":"https://css.master.co","bugs":{"url":"https://github.com/master-co/css/issues"},"repository":{"type":"git","url":"https://github.com/master-co/css.git","directory":"packages/eslint-plugin"},"sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.mjs","jsnext:main":"./dist/index.mjs","esnext":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./configs/*":{"types":"./dist/configs/*.d.ts","import":"./dist/configs/*.mjs","require":"./dist/configs/*.cjs"}},"files":["dist"],"publishConfig":{"access":"public","provenance":true},"dependencies":{"@master/css":"^2.0.0-rc.49","@master/css-explore-config":"^2.0.0-rc.49","@master/css-validator":"^2.0.0-rc.49","@typescript-eslint/utils":"^8.15.0","synckit":"^0.9.2","typescript-eslint":"^8.15.0"},"devDependencies":{"@angular-eslint/template-parser":"^18.4.1","@master/css-explore-config":"^2.0.0-rc.49","@typescript-eslint/rule-tester":"^8.15.0","eslint":"^9.15.0","eslint-plugin-markdown":"^5.1.0","eslint-plugin-mdx":"^3.1.5","shared":"^2.0.0-rc.49","svelte-eslint-parser":"^0.43.0","ts-node":"^10.9.2","vue-eslint-parser":"^9.4.3"},"version":"2.0.0-rc.49"}
|