Skip to content

Commit 1751a58

Browse files
committed
Adjusted checkbox fix
1 parent 3ab0e0b commit 1751a58

File tree

2 files changed

+14
-31
lines changed

2 files changed

+14
-31
lines changed

packages/stencil-library/src/eslint-plugin/__tests__/no-label-slot-in-checkbox.tests.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ ruleTester.run("no-label-slot-in-checkbox", noLabelSlotInCheckbox, {
1919
],
2020
invalid: [
2121
{
22-
code: "<dnn-checkbox onClick={e => console.log(e)}><label>Label Text</label></dnn-checkbox>",
22+
code: "<dnn-checkbox onClick={e => console.log(e)}>Something</dnn-checkbox>",
2323
errors: [{ messageId: "noLabelSlotInCheckbox" }],
24-
output: "<label>\n<dnn-checkbox onClick={e => console.log(e)}></dnn-checkbox>\nLabel Text\n</label>",
25-
},
24+
output: "<label>\n<dnn-checkbox onClick={e => console.log(e)}></dnn-checkbox>\nSomething\n</label>",
25+
}
2626
],
2727
});

packages/stencil-library/src/eslint-plugin/src/rules/no-label-slot-in-checkbox.ts

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,38 +21,21 @@ export const noLabelSlotInCheckbox: Rule.RuleModule = {
2121
const jsxNode = node as JSXOpeningElement;
2222
if (jsxNode.name.type === "JSXIdentifier" && jsxNode.name.name === "dnn-checkbox") {
2323
const parent = context.getAncestors().find(ancestor => ancestor.type === "JSXElement");
24-
if (parent) {
25-
const hasLabel = parent.children.some(child => {
26-
return child.type === "JSXElement" &&
27-
child.openingElement.name.type === "JSXIdentifier" &&
28-
child.openingElement.name.name === "label";
29-
});
30-
if (hasLabel) {
24+
if (parent && parent.type === "JSXElement") {
25+
const parentElement = parent as any; // Cast to access children
26+
const innerContent = parentElement.children
27+
.map((child: any) => context.sourceCode.getText(child))
28+
.join("")
29+
.trim();
30+
31+
if (innerContent) {
3132
context.report({
3233
node: node,
3334
messageId: "noLabelSlotInCheckbox",
3435
fix: (fixer) => {
35-
if (parent && parent.type === "JSXElement" && Array.isArray(parent.children)) {
36-
const label = parent.children.find(child =>
37-
child &&
38-
child.type === "JSXElement" &&
39-
child.openingElement &&
40-
child.openingElement.name &&
41-
child.openingElement.name.type === "JSXIdentifier" &&
42-
child.openingElement.name.name === "label");
43-
44-
if (label && label.type === "JSXElement") {
45-
const labelText = context.sourceCode.getText(label).replace(/<label>|<\/label>/g, '').trim();
46-
const checkboxText = context.sourceCode.getText(node);
47-
48-
// Combine the label text and checkbox into a label wrapper with multiline formatting
49-
const fixedText = `<label>\n${checkboxText}</dnn-checkbox>\n${labelText}\n</label>`;
50-
51-
return fixer.replaceText(parent, fixedText);
52-
}
53-
}
54-
55-
return null;
36+
const checkboxText = context.sourceCode.getText(node);
37+
const fixedText = `<label>\n${checkboxText.replace(innerContent, "").trim()}</dnn-checkbox>\n${innerContent}\n</label>`;
38+
return fixer.replaceText(parent, fixedText);
5639
}
5740
});
5841
}

0 commit comments

Comments
 (0)