рдкрд░рд┐рдЪрдп
рд╣рд░ рджрд┐рди рдЬрдм рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЙрдкрдпреЛрдЧреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ, рдХреЛрдб рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ (рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп, рдпрд╛ рдмрд╕ рд╡рд╛рдВрдЫрдиреАрдп) рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдирдП рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реБрдП рд░реАрдлреИрдХреНрдЯрд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рдпрдорд┐рдд рд╣реИрдВред рдЙрдирдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдПрдХ рддрд░рдл, рджреВрд╕рд░реА рддрд░рдл, рдпрд╣ рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рддреАрд╕рд░реЗ рдкрд░, рдЕрджреНрдпрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдЖрдкрдХреЛ рдЬрд▓рд╛рдК рд▓рдХрдбрд╝реА рдХреЛ рддреЛрдбрд╝рдиреЗ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЦреБрдж рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХреЗрдВ, рдФрд░ рд╡реНрдпрдХреНрддрд┐, рдмрджрд▓реЗ рдореЗрдВ, рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕рдм рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЖрдЬ рдХреЗ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдПрдПрд╕рдЯреА
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕реЗ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЯреНрд░реА (рдПрдПрд╕рдЯреА) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕реЗ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдПрд╕рдЯреА рдХреЛ рдЖрдк рдЬреИрд╕реЗ рдЪрд╛рд╣реЗрдВ рд╡реИрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдЗрдП рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ рдкрд╛рд░реНрд╕рд░ рд╕реЗред
рдкрд╛рд░реНрд╕рд░
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб рд╣реИ:
a + b
рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдХреЛрдб рдХреЛ рдЯреЛрдХрди рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдмрддрд╛рддрд╛ рд╣реИ:
[{ "type": "Identifier", "value": "a" }, { "type": "Punctuator", "value": "+", }, { "type": "Identifier", "value": "b" }]
рдЯреЛрдХрди рд╕реЗ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдмрдирд╛рддрд╛ рд╣реИ:
{ "type": "BinaryExpression", "left": { "type": "Identifier", "name": "a" }, "operator": "+", "right": { "type": "Identifier", "name": "b" } }
рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ JavaScript
рдкрд╛рд░реНрд╕рд░реНрд╕ рд╣реИрдВ, рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ:
- babel-parser - рдПрдХ рдкрд╛рд░реНрд╕рд░ рдЬреЛ
babel
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; - рдПрд╕реНрдкреНрд░реА - рдП рдкрд╛рд░реНрд╕рд▓ рдЬреЛ
eslint
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; - acorn - рдкрд┐рдЫрд▓реЗ рджреЛ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ рдЬреЛ рдкрд╛рд░реНрд╕рд░;
- рдПрд╕реНрдкреНрд░рд┐рдорд╛ - рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдкрд╛рд░реНрд╕рд░ рдЬреЛ рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ 2017 рддрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ;
- cherow рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмреАрдЪ рдПрдХ рдирдпрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ;
рдПрдХ рдорд╛рдирдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░реНрд╕рд░ рд╣реИ, рдЗрд╕реЗ рдИрд╕реНрддреНрд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рдиреЛрдбреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд╛рд░реНрд╕рд░ (рд╕рд╛рде рд╣реА рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдФрд░ рдЬрдирд░реЗрдЯрд░) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реБрдкрд░-рдЫреЛрдЯреЗ-рд╕рдВрдХрд▓рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдПрд╕рдЯреА рдкреЗрдбрд╝ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @ рдмреИрдмрд▓ / рдЯреНрд░реИрд╡рд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб code
рдЪрд░ рд╕реЗ рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред
import * as parser from "@babel/parser"; import traverse from "@babel/traverse"; const code = `function square(n) { return n * n; }`; const ast = parser.parse(code); traverse(ast, { Identifier(path) { console.log(path.node.name); } });
рдЬрдирдХ
рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @ babel / рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ:
import {parse} from '@babel/parser'; import generate from '@babel/generator'; const code = 'class Example {}'; const ast = parse(code); const output = generate(ast, code);
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдкрд╛рдардХ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛ рдПрдХ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдпрд╣ рдПрдХ рдСрдирд▓рд╛рдЗрди рдЯреВрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рднреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдПрд╕реНрдЯреЗрдХреНрд╕рдкреНрд▓реЗрдпрд░ , рдпрд╣ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд╛рд░реНрд╕рд░, рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред
Putout
рдкреБрдЯрдЖрдЙрдЯ рдПрдХ рдкреНрд▓рдЧрдЗрди-рд╕рдХреНрд╖рдо рдХреЛрдб рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рджреЛрдиреЛрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдлрд╛рдпрджреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдПрд╕реНрд▓реЗрдВрдЯ рдФрд░ рдмреИрдмреЗрд▓ рдХреЗ рдмреАрдЪ рдПрдХ рдХреНрд░реЙрд╕ рд╣реИред
eslint
рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди eslint
рд╡рд┐рдкрд░реАрдд рдХреЛрдб рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЙрди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
babel
putout
рддрд░рд╣ putout
рдХреЛрдб рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░реЗрдЯрд┐рдпрд░ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдпрд╣ рдПрдХ рдкреНрд░рд╛рд░реВрдкрдг рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдпрд╣ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реИред
Jscodeshift рдкреБрдЯрдЖрдЙрдЯ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ @ babel / рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрд╕реНрдЯреНрд░реЛ-рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд░реВрдк рдХреА рдХрд╣рд╛рдиреА
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, eslint
рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдореИрдВ рдЙрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдмрдЧрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреЛ рдареАрдХ рдХрд░реЗрдВред рдХреЗрд╡рд▓ , рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрдВред рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдиреЗ putout
рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рдпрд╛, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдХрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, putout
рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкреНрд▓рдЧрдЗрди рд╕рд┐рд╕реНрдЯрдо рддрдХ рдмрдврд╝ рдЧрдпрд╛ред рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЕрдм рд╕рдмрд╕реЗ рдХрдард┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред
рдкреБрдЯрдЖрдЙрдЯ рдХреИрд╕реЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
putout
рдХрд╛рд░реНрдп рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЗрдВрдЬрди рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ред рдпрд╣ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрдкрдХреЛ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕
putout
рдПрдХ рдкреНрд▓рдЧрдЗрди рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдПрдХ рдирд┐рдпрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЦреЛрдЬреЗрдВ рдФрд░ рд╣рдЯрд╛рдПрдВ:
- рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░
debugger
- call
test.only
- call
test.skip
- рдХреЙрд▓
console.log
- рдХреЙрд▓
process.exit
- рдЦрд╛рд▓реА рдмреНрд▓реЙрдХ
- рдЦрд╛рд▓реА рдкреИрдЯрд░реНрди
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШреЛрд╖рдгрд╛ рдЦреЛрдЬреЗрдВ рдФрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ:
commonjs
рдХреЛ commonjs
рдмрджрд▓реЗрдВ:
- рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
- рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЧреБрдгреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ:
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рд╛рд░, рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реЛрдирд╛:
const name = user.name; const password = user.password;
рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЕрдкреНрд▓рд╛рдп -рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
const {name} = user; const {password} = user;
рдлрд┐рд░, рдорд░реНрдЬ-рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА-рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рдЗрд╕реЗ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
const { name, password } = user;
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЕрд▓рдЧ рдФрд░ рдПрдХ рд╕рд╛рде рджреЛрдиреЛрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдирд╛ рдкреНрд▓рдЧ-рдЗрди рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреЗрд╡рд▓ рд╡рд╣реА рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд▓рдЧ-рдЗрди рдмрд╛рдХреА рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо putout
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ example.js
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
const x = 1, y = 2; const name = user.name; const password = user.password; console.log(name, password);
рдЕрдм рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ example.js
рдкрд╛рд╕ рдХрд░рдХреЗ putout
рдЪрд▓рд╛рдПрдВ:
coderaiser@cloudcmd:~/example$ putout example.js /home/coderaiser/example/example.js 1:6 error "x" is defined but never used remove-unused-variables 1:13 error "y" is defined but never used remove-unused-variables 6:0 error Unexpected "console" call remove-console 1:0 error variables should be declared separately split-variable-declarations 3:6 error Object destructuring should be used apply-destructuring 4:6 error Object destructuring should be used apply-destructuring 6 errors in 1 files fixable with the `--fix` option
рд╣рдо 6 рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдорд╛рдиреА рдЧрдИ рд╣реИ, рдЕрдм рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдХрд░реЗрдВрдЧреЗ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ:
coderaiser@cloudcmd:~/example$ putout example.js --fix coderaiser@cloudcmd:~/example$ cat example.js const { name, password } = user;
рд╕реБрдзрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдФрд░ console.log
рдХреЙрд▓ рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рдереЗ, рдФрд░ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣рдореЗрд╢рд╛ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП .putout.json
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдЕрдиреБрднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдирд┐рдпрдо
- рдЙрдкреЗрдХреНрд╖рд╛
- рдореИрдЪ
- рдкреНрд▓рдЧрдЗрдиреНрд╕
рдирд┐рдпрдо
rules
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ rules
рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реЛрддреА рд╣реИред рдирд┐рдпрдо, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ:
{ "rules": { "remove-unused-variables": true, "remove-debugger": true, "remove-only": true, "remove-skip": true, "remove-process-exit": false, "remove-console": true, "split-variable-declarations": true, "remove-empty": true, "remove-empty-pattern": true, "convert-esm-to-commonjs": false, "apply-destructuring": true, "merge-destructuring-properties": true } }
remove-process-exit
рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП remove-process-exit
рдЗрд╕реЗ .putout.json
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ true
рд╕реЗрдЯ рдХрд░реЗрдВ:
{ "rules": { "remove-process-exit": true } }
рдпрд╣ рд╕рднреА process.exit
рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ process.exit
рдХреЛрдб рдореЗрдВ рдкрд╛рдП рдЧрдП рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдпрджрд┐ --fix
рд╡рд┐рдХрд▓реНрдк рдХрд╛ --fix
рд╣реИ рддреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрдВред
рдЙрдкреЗрдХреНрд╖рд╛
рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдХреБрдЫ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ ignore
рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВ:
{ "ignore": [ "test/fixture" ] }
рдореИрдЪ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдирд┐рдпрдореЛрдВ рдХреА рдПрдХ рд╢рд╛рдЦрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ bin
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП process.exit
рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдмрд╕ match
рд╕реЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
{ "match": { "bin": { "remove-process-exit": true, } } }
рдкреНрд▓рдЧрдЗрдиреНрд╕
рдпрджрд┐ рдЖрдк рдЙрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрдкрд╕рд░реНрдЧ putout-plugin-
рдкреНрд▓рдЧ-рдЗрди рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ rules
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ plugins
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, putout-plugin-add-hello-world
рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ add-hello-world
рдирд┐рдпрдо рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ add-hello-world
, рдмрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
{ "rules": { "add-hello-world": true }, "plugins": [ "add-hello-world" ] }
рдкреБрдЯрдЖрдЙрдЯ рдЗрдВрдЬрди
putout
рдЗрдВрдЬрди рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИ рдЬреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрддрд╛ рд╣реИред
рд╡рд╣ рд░рд┐рдХреИрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ: рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдХреЛрдб рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдПрдХ ESTree
рд╕рдВрдЧрдд рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ estree
рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде estree
, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрднрд╡ рд╣реИ), рдФрд░ babel
рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд┐рд▓рдХреБрд▓ babel
рдХреНрдпреЛрдВ? рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрддреНрдкрд╛рдж рд╣реИ, рдЕрдиреНрдп рд╕рдорд╛рди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред EcmaScript рдорд╛рдирдХ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рдмреЗрдмрд▓ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд┐рдирд╛ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ред рдмреИрдмреЗрд▓ рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреБрд╕реНрддрдХ, рдмреИрдмрд▓ рд╣реИрдВрдбрдмреБрдХ рднреА рд╣реИ , рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХ рдПрдПрд╕рдЯреА рдкреЗрдбрд╝ рдХреЛ рдкреАрдЫреЗ рд╣рдЯрд╛рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдкреБрдЯрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдкреНрд▓рдЧрдЗрди
putout
рдкреНрд▓рдЧрдЗрди рд╕рд┐рд╕реНрдЯрдо рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╣реА рдПрд╕реНрдХрд┐рд▓реНрдЯ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдмреИрдмрд▓ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИред рд╕рдЪ рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, putout
рдкреНрд▓рдЧрдЗрди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП 3. рдпрд╣ рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 3 рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдбрд╛рд▓рдирд╛ рдФрд░ рдмрд╕ рдЗрд╕реЗ рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдкреНрд▓рдЧрдЗрди рд╕рдВрд░рдЪрдирд╛
рддреЛ Putout
рдкреНрд▓рдЧрдЗрди рдореЗрдВ 3 рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ:
report
- рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИ;find
- рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;fix
- рдЗрди рд╕реНрдерд╛рдиреЛрдВ рдХреЛ fix
рдХрд░рддрд╛ рд╣реИ;
putout
рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рддреЗ рд╕рдордп рдпрд╛рдж рд░рдЦрдиреЗ рдХрд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдЗрд╕рдХрд╛ рдирд╛рдо рд╣реИ, рдЗрд╕реЗ putout-plugin-
рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП-ред рдЕрдЧрд▓рд╛ рдЙрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд▓рдЧрдЗрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, remove-wrong
рдкреНрд▓рдЧрдЗрди рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: putout-plugin-remove-wrong
ред
рдЖрдкрдХреЛ рд╢рдмреНрджреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП: keywords
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ peerDependencies
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ peerDependencies
рдФрд░ peerDependencies
putout-plugin
, рдФрд░ peerDependencies
рдореЗрдВ "putout": ">=3.10"
peerDependencies
"putout": ">=3.10"
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ "putout": ">=3.10"
, рдпрд╛ рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рд╣реЛрдЧрд╛ред
рдкреБрдЯрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдкреНрд▓рдЧрдЗрди
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдХреЛрдб рд╕реЗ debugger
рд╢рдмреНрдж рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред рдРрд╕рд╛ рдкреНрд▓рдЧрдЗрди рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдпрд╣ @ putout / plugin-remove-debugger рд╣реИ рдФрд░ рдЕрдм рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдпрджрд┐ remove-debugger
рдирд┐рдпрдо рдХреЛ .putout.json
рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ .putout.json
, рддреЛ @putout/plugin-remove-debugger
рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, find
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ traverse
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдПрд╕рдЯреА рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред
рдЕрдЧрд▓рд╛ рдЪрд░рдг putout
рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП report
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ - --fix
рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд▓рдЧ fix
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдиреЛрдб рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкреНрд▓рдЧрдЗрди рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг
рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, @ рдкреБрдЯрдЖрдЙрдЯ / рдЯреЗрд╕реНрдЯ рдЯреВрд▓ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдореВрд▓ рдореЗрдВ, рдпрд╣ рдЯреЗрдк рдХреЗ рдКрдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред
remove-debugger
рдкреНрд▓рдЧ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
const removeDebugger = require('..'); const test = require('@putout/test')(__dirname, { 'remove-debugger': removeDebugger, });
Codemods
рд╣рд░ рдмрд╛рд░ рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдПрдХ рдмрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди ~/.putout
рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп npm
рдЗрд╕реЗ ~/.putout
ред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, putout
рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛, putout
рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд░реЗрдВред
рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ tape
рдФрд░ рдЯреНрд░рд╛рдЗ -рдЯреВ-рдЯреЗрдк рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдХ рд╕реБрдкрд░ - рд░реИрдк рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ : рдХрдиреНрд╡рд░реНрдЯ-рдЯреЗрдк-рдЯреВ-рд╕реБрдкрд░-рд░реИрдк ред
eslint-рдкреНрд▓рдЧрдЗрди-putout
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ: putout
рдХреЛрдб рдХреЛ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рджреЛрд╕реНрдд рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд░рд╛рд░реВрдкрдг рдирд┐рдпрдо рдЯреВрдЯрддреЗ рд╣реИрдВ, рддреЛ eslint --fix eslint --fix
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рддреИрдпрд╛рд░ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ eslint-plugin-putout рдкреНрд▓рдЧрдЗрди рд╣реИ ред рдпрд╣ рдХрдИ рдкреНрд░рд╛рд░реВрдкрдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрдЬреНрдЬреНрд╡рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╡рд░реАрдпрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
{ "extends": [ "plugin:putout/recommended", ], "plugins": [ "putout" ] }
рдЕрдм рддрдХ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдпрдо рд╣реИ: one-line-destructuring
, рдпрд╣ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
рдРрд╕реЗ рдХрдИ рдФрд░ рдирд┐рдпрдо рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЖрдк рдЦреБрдж рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВ рдЗрд╕ рдкрд╛рда рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдардХ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдкреВрд░реА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╡рд┐рд╖рдп рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдЖрдХрд░реНрд╖рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдЕрдзрд┐рдХ рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдореИрдВ putout
рдХреЗ рдЖрдЧреЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛рдПрдБ , рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдХ рдкреВрд▓ рднреЗрдЬреЗрдВ , рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рд▓рд┐рдЦреЗрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдирд┐рдпрдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░реЗрдВ, рд╣рдо рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдЯреВрд▓ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред