putout-engine-runner
Load putout plugins.
Install
npm i @putout/engine-runner
Supported Plugin Types
Template plugins
Template plugins
is the most prefarable format of a plugin, simplest to use.
module.exports.report = () => 'debugger statement should not be used';
module.exports.fix = (path) => {
path.remove();
};
module.exports.include = () => [
'debugger',
];
module.exports.exclude = () => {
};
module.exports.filter = (path) => {
return true;
};
include
and exclude
returns an array of @babel/types, or code blocks:
const __ = 'hello';
Where __
can be any node. All this possible with help of @putout/compare. Templates format supported in traverse
and find
plugins as well.
Traverse plugins
Traverse plugins
gives you more power to filter
and fix
nodes you need.
module.exports.report = () => 'debugger statement should not be used';
module.exports.fix = (path) => {
path.remove();
};
module.exports.traverse = ({push}) => {
return {
'debugger'(path) {
push(path);
}
}
};
Find plugins
Find plugins
gives you all the control over traversing, but it's the slowest format.
Because traversers
not merged in contrast with other plugin formats.
module.exports.report = () => 'debugger statement should not be used';
module.exports.fix = (path) => {
path.remove();
};
module.exports.find = (ast, {push, traverse}) => {
traverse(ast, {
'debugger'(path) {
push(path);
}
}
};
Replace Plugins
Convert code in declarative way. Simplest possible form, no need to use fix
. Just from
and to
parts.
Simplest replace example:
module.exports.report = () => 'any message here';
module.exports.replace = () => {
'const a = 1': 'const b = 1',
};
Simplest remove example:
module.exports.report = () => 'debugger should not be used';
module.exports.replace = () => {
'debugger': '',
};
Templates:
module.exports.report = () => 'any message here';
module.exports.replace = () => {
'var __a = 1': 'const __a = 1',
};
A couple variables example:
module.exports.report = () => 'any message here';
module.exports.replace = () => {
'const __a = __b': 'const __b = __a',
};
Example
const {runPlugins} = require('@putout/engine-runner');
const {parse} = require('@putout/engin-parser');
const plugins = [{
rule: "remove-debugger",
msg: "",
options: {},
plugin:
include: () => ['debugger'],
fix: (path) => path.remove(),
report: () => `debugger should not be used`,
}];
const ast = parse('const m = "hi"; debugger');
const places = runPlugins({
ast,
shebang: false,
fix: true,
fixCount: 1
plugins,
parser: 'babel',
});
License
MIT