47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
/** @type {import('eslint').Rule.RuleModule}*/
|
|
module.exports = {
|
|
meta: {
|
|
type: 'suggestion',
|
|
docs: {
|
|
description:
|
|
'Enforce the "styles" property with the static modifier to be the last property of a class that ends with "Element".',
|
|
category: 'Best Practices',
|
|
recommended: true,
|
|
},
|
|
fixable: 'code',
|
|
schema: [],
|
|
},
|
|
create: function (context) {
|
|
return {
|
|
ClassDeclaration(node) {
|
|
const className = node.id.name;
|
|
if (className.endsWith('Element')) {
|
|
const staticStylesProperty = node.body.body.find((bodyNode) => {
|
|
return bodyNode.type === 'PropertyDefinition' && bodyNode.key.name === 'styles' && bodyNode.static;
|
|
});
|
|
if (staticStylesProperty) {
|
|
const lastProperty = node.body.body[node.body.body.length - 1];
|
|
if (lastProperty.key.name !== staticStylesProperty.key.name) {
|
|
context.report({
|
|
node: staticStylesProperty,
|
|
message: 'The "styles" property should be the last property of a class declaration.',
|
|
data: {
|
|
className: className,
|
|
},
|
|
fix: function (fixer) {
|
|
const sourceCode = context.getSourceCode();
|
|
const staticStylesPropertyText = sourceCode.getText(staticStylesProperty);
|
|
return [
|
|
fixer.replaceTextRange(staticStylesProperty.range, ''),
|
|
fixer.insertTextAfterRange(lastProperty.range, '\n \n ' + staticStylesPropertyText),
|
|
];
|
|
},
|
|
});
|
|
}
|
|
}
|
|
}
|
|
},
|
|
};
|
|
},
|
|
};
|