@blumintinc/eslint-plugin-blumint 1.19.28 → 1.19.29
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/lib/index.js +1 -1
- package/lib/rules/enforce-id-capitalization.js +33 -0
- package/package.json +1 -1
- package/release-manifest.json +14 -0
package/lib/index.js
CHANGED
|
@@ -27,6 +27,21 @@ exports.enforceIdCapitalization = (0, createRule_1.createRule)({
|
|
|
27
27
|
// Regular expression to match standalone "id" surrounded by whitespace or punctuation
|
|
28
28
|
// This ensures we only match "id" as a word, not as part of another word
|
|
29
29
|
const idRegex = /(^|\s|[.,;:!?'"()\[\]{}])id(\s|$|[.,;:!?'"()\[\]{}])/g;
|
|
30
|
+
// DOM / Testing-Library APIs whose first argument is an attribute NAME
|
|
31
|
+
// (code), not user-facing text. A literal like 'id' passed here is a DOM
|
|
32
|
+
// attribute name; flagging or rewriting it to 'ID' breaks the call.
|
|
33
|
+
const ATTRIBUTE_NAME_METHODS = new Set([
|
|
34
|
+
'getAttribute',
|
|
35
|
+
'setAttribute',
|
|
36
|
+
'hasAttribute',
|
|
37
|
+
'removeAttribute',
|
|
38
|
+
'getAttributeNode',
|
|
39
|
+
'getAttributeNS',
|
|
40
|
+
'setAttributeNS',
|
|
41
|
+
'hasAttributeNS',
|
|
42
|
+
'removeAttributeNS',
|
|
43
|
+
'toHaveAttribute',
|
|
44
|
+
]);
|
|
30
45
|
/**
|
|
31
46
|
* Check if a node is in a context that should be excluded from the rule
|
|
32
47
|
* (e.g., parameter names, property names, type definitions)
|
|
@@ -82,6 +97,24 @@ exports.enforceIdCapitalization = (0, createRule_1.createRule)({
|
|
|
82
97
|
if (node.parent && node.parent.type === utils_1.AST_NODE_TYPES.MemberExpression) {
|
|
83
98
|
return true;
|
|
84
99
|
}
|
|
100
|
+
// Check if the node is the attribute-name argument of a DOM / jest-dom
|
|
101
|
+
// attribute API call, e.g. element.getAttribute('id') or
|
|
102
|
+
// expect(el).toHaveAttribute('id', ...). The attribute name is code, not
|
|
103
|
+
// user-facing text. For the *NS variants the name is the second argument
|
|
104
|
+
// (the first is the namespace URI); otherwise it is the first argument.
|
|
105
|
+
if (node.parent &&
|
|
106
|
+
node.parent.type === utils_1.AST_NODE_TYPES.CallExpression &&
|
|
107
|
+
node.parent.callee &&
|
|
108
|
+
node.parent.callee.type === utils_1.AST_NODE_TYPES.MemberExpression &&
|
|
109
|
+
node.parent.callee.property.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
110
|
+
ATTRIBUTE_NAME_METHODS.has(node.parent.callee.property.name)) {
|
|
111
|
+
const nameArgIndex = node.parent.callee.property.name.endsWith('NS')
|
|
112
|
+
? 1
|
|
113
|
+
: 0;
|
|
114
|
+
if (node.parent.arguments[nameArgIndex] === node) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
85
118
|
// Check if the node is a string literal used for property access
|
|
86
119
|
// This handles cases like obj['id'] or OverwolfGame['id']
|
|
87
120
|
if (node.parent &&
|
package/package.json
CHANGED
package/release-manifest.json
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "1.19.29",
|
|
4
|
+
"date": "2026-07-23T21:23:38.334Z",
|
|
5
|
+
"rules": [
|
|
6
|
+
{
|
|
7
|
+
"name": "enforce-id-capitalization",
|
|
8
|
+
"changeType": "fix",
|
|
9
|
+
"issues": [
|
|
10
|
+
1337
|
|
11
|
+
],
|
|
12
|
+
"summary": "exempt DOM attribute-name arguments (closes #1337)"
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
},
|
|
2
16
|
{
|
|
3
17
|
"version": "1.19.28",
|
|
4
18
|
"date": "2026-07-23T17:25:39.744Z",
|