@salesforce-ux/eslint-plugin-slds 0.1.0 → 0.1.1
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/.eslintrc.yml +1 -1
- package/build/index.d.ts +2 -2
- package/build/index.js +2 -2
- package/build/rules/enforce-bem-class.d.ts +2 -2
- package/build/rules/enforce-bem-class.js +4 -3
- package/build/rules/modal-close-button-issue.d.ts +0 -1
- package/build/rules/modal-close-button-issue.js +5 -6
- package/build/rules/{no-deprecated-slds2-classes.d.ts → no-deprecated-classes-slds2.d.ts} +1 -2
- package/build/rules/{no-deprecated-slds2-classes.js → no-deprecated-classes-slds2.js} +2 -3
- package/build/rules/utils/node.js +14 -13
- package/package.json +1 -1
package/.eslintrc.yml
CHANGED
|
@@ -18,5 +18,5 @@ overrides:
|
|
|
18
18
|
- "@salesforce-ux/slds"
|
|
19
19
|
rules:
|
|
20
20
|
"@salesforce-ux/slds/enforce-bem-class": "error"
|
|
21
|
-
"@salesforce-ux/slds/no-deprecated-slds2
|
|
21
|
+
"@salesforce-ux/slds/no-deprecated-classes-slds2": "error"
|
|
22
22
|
"@salesforce-ux/slds/modal-close-button-issue": "error"
|
package/build/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
declare const _default: {
|
|
2
2
|
rules: {
|
|
3
3
|
"enforce-bem-class": any;
|
|
4
|
-
"no-deprecated-slds2
|
|
4
|
+
"no-deprecated-classes-slds2": any;
|
|
5
5
|
"modal-close-button-issue": any;
|
|
6
6
|
};
|
|
7
7
|
configs: {
|
|
@@ -10,7 +10,7 @@ declare const _default: {
|
|
|
10
10
|
plugins: string[];
|
|
11
11
|
rules: {
|
|
12
12
|
"slds/enforce-bem-class": string;
|
|
13
|
-
"slds/no-deprecated-slds2
|
|
13
|
+
"slds/no-deprecated-classes-slds2": string;
|
|
14
14
|
"slds/modal-close-button-issue": string;
|
|
15
15
|
};
|
|
16
16
|
};
|
package/build/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
module.exports = {
|
|
3
3
|
rules: {
|
|
4
4
|
"enforce-bem-class": require('./rules/enforce-bem-class'),
|
|
5
|
-
"no-deprecated-slds2
|
|
5
|
+
"no-deprecated-classes-slds2": require('./rules/no-deprecated-classes-slds2'),
|
|
6
6
|
"modal-close-button-issue": require('./rules/modal-close-button-issue')
|
|
7
7
|
},
|
|
8
8
|
configs: {
|
|
@@ -11,7 +11,7 @@ module.exports = {
|
|
|
11
11
|
plugins: ["slds"],
|
|
12
12
|
rules: {
|
|
13
13
|
"slds/enforce-bem-class": "error",
|
|
14
|
-
"slds/no-deprecated-slds2
|
|
14
|
+
"slds/no-deprecated-classes-slds2": "error",
|
|
15
15
|
"slds/modal-close-button-issue": "error"
|
|
16
16
|
},
|
|
17
17
|
},
|
|
@@ -2,7 +2,6 @@ declare const _default: {
|
|
|
2
2
|
meta: {
|
|
3
3
|
type: string;
|
|
4
4
|
docs: {
|
|
5
|
-
description: string;
|
|
6
5
|
category: string;
|
|
7
6
|
recommended: boolean;
|
|
8
7
|
};
|
|
@@ -20,7 +19,8 @@ declare const _default: {
|
|
|
20
19
|
additionalProperties: boolean;
|
|
21
20
|
}[];
|
|
22
21
|
messages: {
|
|
23
|
-
|
|
22
|
+
errorMsg: string;
|
|
23
|
+
suggestedMsg: string;
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
26
|
create(context: any): {
|
|
@@ -5,7 +5,6 @@ module.exports = {
|
|
|
5
5
|
meta: {
|
|
6
6
|
type: "problem", // The rule type
|
|
7
7
|
docs: {
|
|
8
|
-
description: "Enforce consistent class naming using BEM convention",
|
|
9
8
|
category: "Stylistic Issues",
|
|
10
9
|
recommended: true,
|
|
11
10
|
},
|
|
@@ -21,7 +20,8 @@ module.exports = {
|
|
|
21
20
|
},
|
|
22
21
|
],
|
|
23
22
|
messages: {
|
|
24
|
-
|
|
23
|
+
errorMsg: "The {{actual}} class doesn’t follow the correct BEM naming convention.",
|
|
24
|
+
suggestedMsg: "{{actual}} has been retired. Update it to the new name {{newValue}}.",
|
|
25
25
|
},
|
|
26
26
|
},
|
|
27
27
|
create(context) {
|
|
@@ -55,8 +55,9 @@ module.exports = {
|
|
|
55
55
|
loc: { start: startLoc, end: endLoc },
|
|
56
56
|
data: {
|
|
57
57
|
actual: className,
|
|
58
|
+
newValue
|
|
58
59
|
},
|
|
59
|
-
messageId: "
|
|
60
|
+
messageId: newValue ? "suggestedMsg" : "errorMsg",
|
|
60
61
|
fix(fixer) {
|
|
61
62
|
if (newValue) {
|
|
62
63
|
const newClassValue = classAttr.value.value.replace(className, newValue);
|
|
@@ -4,18 +4,17 @@ module.exports = {
|
|
|
4
4
|
meta: {
|
|
5
5
|
type: "problem",
|
|
6
6
|
docs: {
|
|
7
|
-
description: "Ensure SLDS modal compliance by enforcing correct button and icon attributes.",
|
|
8
7
|
category: "Best Practices",
|
|
9
8
|
recommended: true,
|
|
10
9
|
},
|
|
11
10
|
fixable: "code",
|
|
12
11
|
schema: [],
|
|
13
12
|
messages: {
|
|
14
|
-
removeClass: "Remove the
|
|
15
|
-
changeVariant: "Change
|
|
16
|
-
removeVariant: "Remove
|
|
17
|
-
ensureButtonClasses: "
|
|
18
|
-
ensureSizeAttribute: "
|
|
13
|
+
removeClass: "Remove the slds-button_icon-inverse class from the modal close button in components that use the SLDS modal blueprint.",
|
|
14
|
+
changeVariant: "Change the variant attribute value from bare-inverse to bare in <lightning-button-icon> or <lightning-icon>.",
|
|
15
|
+
removeVariant: "Remove the variant attribute from the <lightning-icon> component inside the <button> element.",
|
|
16
|
+
ensureButtonClasses: "Add or move slds-button and slds-button_icon to the class attribute of the <button> element or <lightning-button-icon> component.",
|
|
17
|
+
ensureSizeAttribute: "To size icons properly, set the size attribute to large in the <lightning-icon> and <lightning-button-icon> components.",
|
|
19
18
|
},
|
|
20
19
|
},
|
|
21
20
|
create(context) {
|
|
@@ -2,13 +2,12 @@ declare const _default: {
|
|
|
2
2
|
meta: {
|
|
3
3
|
type: string;
|
|
4
4
|
docs: {
|
|
5
|
-
description: string;
|
|
6
5
|
category: string;
|
|
7
6
|
recommended: boolean;
|
|
8
7
|
};
|
|
9
8
|
schema: any[];
|
|
10
9
|
messages: {
|
|
11
|
-
|
|
10
|
+
errorMsg: string;
|
|
12
11
|
};
|
|
13
12
|
};
|
|
14
13
|
create(context: any): {
|
|
@@ -6,13 +6,12 @@ module.exports = {
|
|
|
6
6
|
meta: {
|
|
7
7
|
type: "problem", // The rule type
|
|
8
8
|
docs: {
|
|
9
|
-
description: "Disallow usage of deprecated CSS classes",
|
|
10
9
|
category: "Best Practices",
|
|
11
10
|
recommended: true,
|
|
12
11
|
},
|
|
13
12
|
schema: [], // No additional options needed
|
|
14
13
|
messages: {
|
|
15
|
-
|
|
14
|
+
errorMsg: "The class {{className}} isn't available in SLDS 2. Update it to a class supported in SLDS 2. See lightningdesignsystem.com for more information.",
|
|
16
15
|
},
|
|
17
16
|
},
|
|
18
17
|
create(context) {
|
|
@@ -43,7 +42,7 @@ module.exports = {
|
|
|
43
42
|
data: {
|
|
44
43
|
className,
|
|
45
44
|
},
|
|
46
|
-
messageId: "
|
|
45
|
+
messageId: "errorMsg",
|
|
47
46
|
});
|
|
48
47
|
}
|
|
49
48
|
});
|
|
@@ -1,19 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// THIS IS TAKEN FROM html-eslint
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.findAttr =
|
|
5
|
-
exports.isAttributesEmpty = isAttributesEmpty;
|
|
6
|
-
exports.isNodeTokensOnSameLine = isNodeTokensOnSameLine;
|
|
7
|
-
exports.splitToLineNodes = splitToLineNodes;
|
|
8
|
-
exports.getLocBetween = getLocBetween;
|
|
9
|
-
exports.isExpressionInTemplate = isExpressionInTemplate;
|
|
10
|
-
exports.isTag = isTag;
|
|
11
|
-
exports.isComment = isComment;
|
|
12
|
-
exports.isText = isText;
|
|
13
|
-
exports.isOverlapWithTemplates = isOverlapWithTemplates;
|
|
14
|
-
exports.codeToLines = codeToLines;
|
|
15
|
-
exports.isRangesOverlap = isRangesOverlap;
|
|
16
|
-
exports.getTemplateTokens = getTemplateTokens;
|
|
4
|
+
exports.getTemplateTokens = exports.isRangesOverlap = exports.codeToLines = exports.isOverlapWithTemplates = exports.isText = exports.isComment = exports.isTag = exports.isExpressionInTemplate = exports.getLocBetween = exports.splitToLineNodes = exports.isNodeTokensOnSameLine = exports.isAttributesEmpty = exports.findAttr = void 0;
|
|
17
5
|
const parser_1 = require("@html-eslint/parser");
|
|
18
6
|
/**
|
|
19
7
|
* @param {TagNode | ScriptTagNode | StyleTagNode} node
|
|
@@ -23,6 +11,7 @@ const parser_1 = require("@html-eslint/parser");
|
|
|
23
11
|
function findAttr(node, key) {
|
|
24
12
|
return node.attributes.find((attr) => attr.key && attr.key.value.toLowerCase() === key.toLowerCase());
|
|
25
13
|
}
|
|
14
|
+
exports.findAttr = findAttr;
|
|
26
15
|
/**
|
|
27
16
|
* Checks whether a node's attributes is empty or not.
|
|
28
17
|
* @param {TagNode | ScriptTagNode | StyleTagNode} node
|
|
@@ -31,6 +20,7 @@ function findAttr(node, key) {
|
|
|
31
20
|
function isAttributesEmpty(node) {
|
|
32
21
|
return !node.attributes || node.attributes.length <= 0;
|
|
33
22
|
}
|
|
23
|
+
exports.isAttributesEmpty = isAttributesEmpty;
|
|
34
24
|
/**
|
|
35
25
|
* Checks whether a node's all tokens are on the same line or not.
|
|
36
26
|
* @param {AnyNode} node A node to check
|
|
@@ -39,6 +29,7 @@ function isAttributesEmpty(node) {
|
|
|
39
29
|
function isNodeTokensOnSameLine(node) {
|
|
40
30
|
return node.loc.start.line === node.loc.end.line;
|
|
41
31
|
}
|
|
32
|
+
exports.isNodeTokensOnSameLine = isNodeTokensOnSameLine;
|
|
42
33
|
/**
|
|
43
34
|
*
|
|
44
35
|
* @param {Range} rangeA
|
|
@@ -48,6 +39,7 @@ function isNodeTokensOnSameLine(node) {
|
|
|
48
39
|
function isRangesOverlap(rangeA, rangeB) {
|
|
49
40
|
return rangeA[0] < rangeB[1] && rangeB[0] < rangeA[1];
|
|
50
41
|
}
|
|
42
|
+
exports.isRangesOverlap = isRangesOverlap;
|
|
51
43
|
/**
|
|
52
44
|
* @param {(TextNode | CommentContentNode)['templates']} templates
|
|
53
45
|
* @param {Range} range
|
|
@@ -58,6 +50,7 @@ function isOverlapWithTemplates(templates, range) {
|
|
|
58
50
|
.filter((template) => template.isTemplate)
|
|
59
51
|
.some((template) => isRangesOverlap(template.range, range));
|
|
60
52
|
}
|
|
53
|
+
exports.isOverlapWithTemplates = isOverlapWithTemplates;
|
|
61
54
|
/**
|
|
62
55
|
*
|
|
63
56
|
* @param {TextNode | CommentContentNode} node
|
|
@@ -130,6 +123,7 @@ function splitToLineNodes(node) {
|
|
|
130
123
|
});
|
|
131
124
|
return lineNodes;
|
|
132
125
|
}
|
|
126
|
+
exports.splitToLineNodes = splitToLineNodes;
|
|
133
127
|
/**
|
|
134
128
|
* Get location between two nodes.
|
|
135
129
|
* @param {BaseNode} before A node placed in before
|
|
@@ -142,6 +136,7 @@ function getLocBetween(before, after) {
|
|
|
142
136
|
end: after.loc.start,
|
|
143
137
|
};
|
|
144
138
|
}
|
|
139
|
+
exports.getLocBetween = getLocBetween;
|
|
145
140
|
/**
|
|
146
141
|
* @param {AttributeValueNode} node
|
|
147
142
|
* @return {boolean}
|
|
@@ -152,6 +147,7 @@ function isExpressionInTemplate(node) {
|
|
|
152
147
|
}
|
|
153
148
|
return false;
|
|
154
149
|
}
|
|
150
|
+
exports.isExpressionInTemplate = isExpressionInTemplate;
|
|
155
151
|
/**
|
|
156
152
|
* @param {AnyNode} node
|
|
157
153
|
* @returns {node is TagNode}
|
|
@@ -159,6 +155,7 @@ function isExpressionInTemplate(node) {
|
|
|
159
155
|
function isTag(node) {
|
|
160
156
|
return node.type === parser_1.NODE_TYPES.Tag;
|
|
161
157
|
}
|
|
158
|
+
exports.isTag = isTag;
|
|
162
159
|
/**
|
|
163
160
|
* @param {AnyNode} node
|
|
164
161
|
* @returns {node is CommentNode}
|
|
@@ -166,6 +163,7 @@ function isTag(node) {
|
|
|
166
163
|
function isComment(node) {
|
|
167
164
|
return node.type === parser_1.NODE_TYPES.Comment;
|
|
168
165
|
}
|
|
166
|
+
exports.isComment = isComment;
|
|
169
167
|
/**
|
|
170
168
|
* @param {AnyNode} node
|
|
171
169
|
* @returns {node is TextNode}
|
|
@@ -173,6 +171,7 @@ function isComment(node) {
|
|
|
173
171
|
function isText(node) {
|
|
174
172
|
return node.type === parser_1.NODE_TYPES.Text;
|
|
175
173
|
}
|
|
174
|
+
exports.isText = isText;
|
|
176
175
|
const lineBreakPattern = /\r\n|[\r\n\u2028\u2029]/u;
|
|
177
176
|
const lineEndingPattern = new RegExp(lineBreakPattern.source, "gu");
|
|
178
177
|
/**
|
|
@@ -182,6 +181,7 @@ const lineEndingPattern = new RegExp(lineBreakPattern.source, "gu");
|
|
|
182
181
|
function codeToLines(source) {
|
|
183
182
|
return source.split(lineEndingPattern);
|
|
184
183
|
}
|
|
184
|
+
exports.codeToLines = codeToLines;
|
|
185
185
|
/**
|
|
186
186
|
*
|
|
187
187
|
* @param {AnyToken[]} tokens
|
|
@@ -195,3 +195,4 @@ function getTemplateTokens(tokens) {
|
|
|
195
195
|
// @ts-ignore
|
|
196
196
|
.filter((token) => token.isTemplate));
|
|
197
197
|
}
|
|
198
|
+
exports.getTemplateTokens = getTemplateTokens;
|