$ cnpm install putout
Perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away.
(c) Antoine de Saint Exupéry
????Putout is a JavaScript Linter, pluggable and configurable code transformer, drop-in ESLint replacement with built-in code printer and ability to fix syntax errors. It has a lot of transformations that keeps your codebase in a clean state, removing any code smell and making code readable according to best practices.
The main target is JavaScript, but:
are also supported. Here is how it looks like:
Check out couple variants of plugins that does the same: linting debugger statement:
'use strict';
module.exports.report = () => `Avoid 'debugger' statement`;
module.exports.replace = () => ({
debugger: '',
});
Choose wisely, competitors cannot even fix… ????
If I have seen further, it is by standing upon the shoulders of giants.
(c) Isaak Newton
API.API documented in Handbook and responsiveness of a team.config and plugins support.☝️ ????Putout on the other hand can make more drastic code transformations that directly affects your codebase making it a better place to code ????.
variables;for-of variables;typescripts types;variables;private fields;expressions;variables;Object.assign();replace();map;mapped types;mapping modifiers;continue;operand;array constructor;conditions;type conversion;functions;Array.from;spread;arguments;escape;async;await;typeof;template expressions;for-of;array.entries();debugger statement;iife;process.exit call;console.log calls;empty block statements;empty patterns;strict mode directive from esm;constant conditions;boolean from assertion;boolean from logical expressions;duplicates from TypeScript Union;unreachable code;duplicate keys;typescripts types;typescripts interface keys;test.only to test calls;test.skip to test calls;init;variable declarations;nested destructuring;assignment;ternary;logical expressions;strict mode directive in commonjs add it;const to let (when needed to avoid TypeError);apply to spread;bitwise to logical operator;concat to flat;esm to commonjs (enabled for *.cjs);commonjs to esm (enabled for *.mjs);template with one expression to string;equal to strict equal;indexOf to includes;replace to replaceAll;assignment to arrow function;forEach to for...of;map to for...of;reduce to for...of;Math.sqrt() to Math.hypot();return await;Promise.resolve;Promise.reject to throw;reference;undefined variables;imports first;as type assertions;utility types;array.at;filter(Boolean);if condition;await import;flatMap();template literals;imports;functions;npm i putout -D
Usage: putout [options] [path]
Options:
-h, --help display this help and exit
-v, --version output version information and exit
-f, --format [formatter] use a specific output format, the default is: 'progress-bar' locally and 'dump' on CI
-s, --staged add staged files when in git repository
-i, --interactive set lint options using interactive menu
--fix apply fixes of errors to code
--fix-count [count = 10] count of fixes rounds
--rulesdir use additional rules from directory
--transform [replacer] apply Replacer, for example 'var __a = __b -> const __a = __b', read about Replacer https://git.io/JqcMn
--plugins [plugins] a comma-separated list of plugins to use
--enable [rule] enable the rule and save it to '.putout.json' walking up parent directories
--disable [rule] disable the rule and save it to '.putout.json' walking up parent directories
--enable-all enable all found rules and save them to '.putout.json' walking up parent directories
--disable-all disable all found rules (set baseline) and save them to '.putout.json' walking up parent directories
--match [pattern] read '.putout.json' and convert 'rules' to 'match' according to 'pattern'
--fresh generate a fresh cache
--no-config avoid reading '.putout.json'
--no-ci disable the CI detection
--no-cache disable the cache
--no-worker disable worker thread
To find errors:
putout lib test
To fix errors:
putout lib test --fix
By default ????Putout uses all enabled by default plugins, anyways it can be run with a couple mentioned plugins (split with ","):
putout lib --plugins remove-debugger,remove-unused-variables
????Putout supports next environment variables:
PUTOUT_FILES - files that should be processed by putout, divided by ",";PUTOUT_CONFIG_FILE - path to ????Putout config file;ESLINT_CONFIG_FILE - path to ESLint config file;NO_ESLINT - do not run ESLint after ????Putout;NO_ESLINT_WARNINGS - do not show ESLint warnings;PUTOUT_FILES=lib,test putout --fix
To configure create .putout.json file and override any of default options.
When you need to match paths to rules you can use match section for this purpose in .putout.json:
{
"match": {
"server": {
"remove-process-exit": true
}
}
}
When you need to ignore some routes no metter what, you can use ignore section in .putout.json:
{
"ignore": ["test/fixture"]
}
????Putout supports two types of plugins, prefix with:
@putout/plugin-;putout-plugin-;To use your plugin createnpm package with keywords putout, putout-plugin and add it to .putout.json.
For example if you need to remove-something create ????Putout plugin with name putout-plugin-remove-something and it to package.json:
{
"plugins": ["remove-something"]
}
????Putout supports codemodes in the similar to plugins way, just create a directory ~/.putout and put your plugins there. Here is example: convert-tape-to-supertape and this is examples of work.
All examples works both in ESM and CommonJS.
CommonJS:
const {putout} = require('putout');
ESM:
import {putout} from 'putout';
import {putout} from 'putout';
const source = `
const t = 'hello';
const m = t + '!';
console.log(t);
`;
putout(source, {
plugins: ['remove-unused-variables'],
});
// returns
`
const t = 'hello';
console.log(t);
`;
import {putoutAsync} from 'putout';
const source = `
const t = 'hello';
const m = t + '!';
console.log(t);
`;
await putoutAsync(source, {
plugins: ['remove-unused-variables'],
});
// returns
`
const t = 'hello';
console.log(t);
`;
MIT
Copyright 2013 - present © cnpmjs.org | Home |