créer un dossier /root/projects/eslint-plugin-raflint
créer le fichier principal
// index.js
module.exports = {
rules: {
'no-conditional-object-spread': require('./no-conditional-object-spread.js'),
},
};installer les packages
npm init -y npm install -y -D @babel/eslint-parser eslint
créer une rule :
// no-conditional-object-spread.js
module.exports = {
create(context) {
return {
SpreadElement(node) {
if (node.argument.type === 'ConditionalExpression' || node.argument.type === 'LogicalExpression') {
context.report({
node,
message: 'Conditional object spread is not allowed.',
});
}
},
};
},
};créer un fichier test.js
const { RuleTester } = require('eslint');
const noConditionalObjectSpread = require('./no-conditional-object-spread.js');
const ruleTester = new RuleTester({
"parser": "/root/projects/no-conditional-object-spread/node_modules/@babel/eslint-parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"requireConfigFile": false
}
});
ruleTester.run('no-conditional-object-spread', noConditionalObjectSpread, {
valid: [
{
code: `
const condition = true;
const obj = {};
if (condition) obj.prop = value;
`,
}
],
invalid: [
{
code: `
const obj = {
...(condition ? { prop: 'value' } : {}),
};
`,
errors: [{ message: 'Conditional object spread is not allowed.' }],
},
{
code: `
const obj = {
...(condition && { prop: 'value' }),
};
`,
errors: [{ message: 'Conditional object spread is not allowed.' }],
}
]
});lancer avec mocha
mocha test.js
on peut se mettre dans le dossier ou on veut utiliser le plugin pui lancer :
npm link ../pathDuPlugin
on peut ensuite le voir comme ça
npm ls --link
puis enlever le link
npm unlink xxx