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