putout

🐊 Pluggable and configurable JavaScript Linter, code transformer and formatter with built-in ESLint and Babel support for js, jsx typescript, flow, markdown, yaml and json. Write declarative codemods in a simplest possible way 😏

MIT License

Downloads
3.6M
Stars
646
Committers
23
putout - putout v25.1.0

Published by coderaiser over 2 years ago

image

Improved auto fix for tests

Once you realize that the world is your own projection, you are free of it. You need not free yourself of a world that does not exist, except in your own imagination! However is the picture, beautiful or ugly, you are painting it and you are not bound by it. Realize that there is nobody to force it on you, that it is due to the habit of taking the imaginary to be real. See the imaginary as imaginary and be free of fear.

(c) Sri Nisargadatta Maharaj

When you changed implementation of a plugin, and want to update fixtures you can run the test with UPDATE env variable:

UPDATE=1 npm test

It will update all your fixtures and remove unused fixture files for noReport and noTransform.

Improved promises/remove-useless-await

In the mirror of your mind all kinds of pictures appear and disappear. Knowing that they are entirely your own creations, watch them silently come and go. Be alert, but not perturbed. This attitude of silent observation is the very foundation of yoga. You see the picture, but you are not the picture.

(c) Sri Nisargadatta Maharaj

-const hello = await 'world';
+const hello = 'world'

Added madrun/add-cut-env

Instead of searching for what you do not have, find out what it is that you have never lost.

(c) Sri Nisargadatta Maharaj

export default {
-     'test': () => [env, 'test:only'],
+     'test': async () => [env, await cutEnv('test:only')],
      'test:only': () => [env, 'npm test'],
};

Shift your attention from words to silence and you will hear.

(c) Sri Nisargadatta Maharaj

πŸ”₯ feature

  • (package) @putout/plugin-package-json v4.0.0
  • (@putout/plugin-package-json) drop support of putout < 25
putout - putout v25.0.9

Published by coderaiser over 2 years ago

πŸ”₯ feature

  • (package) @putout/plugin-madrun v14.0.0
  • (@putout/plugin-madrun) drop support of putout < 25
  • (@putout/plugin-madrun) add add-cut-env
putout - putout v25.0.8

Published by coderaiser over 2 years ago

🐞 fix

  • chore(actions) add auto fix
  • docs(readme) Ruler: auto fix example

πŸ”₯ feature

  • (package) @putout/plugin-promises v8.0.0
  • (@putout/plugin-promises) drop support of node < 16
  • (@putout/plugin-promises) remove-useless-await: add support of primitives used as argument
putout - putout v25.0.7

Published by coderaiser over 2 years ago

πŸ”₯ feature

  • (package) @putout/engine-processor v5.0.0
  • (@putout/engine-processor) drop support of node < 16
  • (package) @putout/engine-loader v6.0.0
putout - putout v25.0.6

Published by coderaiser over 2 years ago

πŸ”₯ feature

  • (package) @putout/compare v9.0.0
  • (package) @putout/compare v9.0.0
  • (package) @putout/compare v9.0.0
  • (package) @putout/traverse v5.0.0
  • (@putout/traverse) drop support of node < 16
  • (package) @putout/compare v9.0.0
  • (package) @putout/engine-loader v6.0.0
  • (@putout/engine-loader) drop support of node < 16
  • (package) @putout/engine-parser v5.0.0
  • (package) @putout/engine-runner v13.0.0
  • (@putout/engine-runner) drop support of node < 16
  • (package) @putout/engine-parser v5.0.0
  • (package) @putout/compare v9.0.0
  • (package) @putout/operator-add-args v3.0.0
  • (package) @putout/engine-parser v5.0.0
  • (@putout/operator-add-args) drop support of putout < 25
  • (@putout/compare) drop support of node < 16
  • (package) @putout/engine-parser v5.0.0
putout - putout v25.0.5

Published by coderaiser over 2 years ago

πŸ”₯ feature

  • (package) @putout/engine-parser v5.0.0
  • (package) @putout/engine-parser v5.0.0
  • (@putout/engine-parser) drop support of node < 16
  • (package) estree-to-babel v5.0.0
  • (@putout/plugin-tape) remove-skip: change message
  • (@putout/plugin-tape) rm insert require try catch
putout - putout v25.0.4

Published by coderaiser over 2 years ago

🐞 fix

  • (@putout/plugin-nodejs) declare: process: rm env
  • (@putout/plugin-nodejs) declare: process: rm version

πŸ”₯ feature

  • (package) eslint-plugin-putout v14.0.0
  • (eslint-plugin-putout) drop support of putout < 25
  • (eslint-plugin-putout) evaluate: add support of @putout/plugin-nodejs
  • (package) @putout/plugin-declare-undefined-variables v7.0.0
  • (package) @putout/plugin-nodejs v4.0.0
  • (@putout/plugin-nodejs) drop support of putout < 25
  • (@putout/plugin-nodejs) declare: add from @putout/plugin-declare-undefined-variables
  • (@putout/plugin-declare-undefined-variables) drop support of putout < 25
  • (@putout/plugin-declare-undefined-variables) try-catch: move to @putout/plugin-apply-try-catch
  • (@putout/plugin-apply-try-catch) declare: add
putout - putout v25.0.3

Published by coderaiser over 2 years ago

🐞 fix

  • feature(@putout/test) UPDATE: add ability to remove unused fixtures

πŸ”₯ feature

  • (package) @putout/plugin-tape v9.0.0
  • (@putout/plugin-tape) drop support of putout < 25
  • (@putout/test) UPDATE: add ability to remove unused fixtures
  • (@putout/plugin-tape) remove-only: add support of not top level 'test.only'
  • (@putout/plugin-apply-try-catch) args: add support of MemberExpression
  • (@putout/plugin-apply-try-catch) args: add
  • (@putout/plugin-apply-try-catch) add support of VariableDeclarator
  • (@putout/plugin-try-catch) camel -> tryName
  • (@putout/plugin-apply-try-catch) add support of IfCondition
putout - putout v25.0.2

Published by coderaiser over 2 years ago

🐞 fix

  • (@putout/plugin-apply-try-catch) do not declare try-catch, try-to-catch

πŸ”₯ feature

  • (@putout/plugin-apply-try-catch) add
  • (@putout/plugin-apply-try-catch) drop support of putout < 25
  • (@putout/plugin-apply-try-catch) await: include only ExpressionStatements
  • (eslint-plugin-putout) safe: disable remove-useless-for-of
putout - putout v25.0.1

Published by coderaiser over 2 years ago

🐞 fix

  • (@putout/operator-add-args) avoid using putout directly since it is internal dependency

πŸ”₯ feature

  • (package) @putout/plugin-nodejs v3.2.0
  • (@putout/plugin-nodejs) add convert-url-to-dirname
  • (@putout/plugin-merge-destructuring-properties) add support of different quotes
  • (@putout/test) drop support of node < 16
  • (package) madrun v9.0.0
putout - putout v25.0.0

Published by coderaiser over 2 years ago

image

Drop support of node < 16

Among the maxims on Lord Naoshige’s wall there was this one: ”Matters of’ great concern should be treated lightly.”
Master lttei commented, β€œMatters of small concern should be treated seriously.”

(c) Yamamoto Tsunetomo "Hagakure"

Hi folks!
The time is came for a new release πŸŽ‰ !

We drop support of node versions < 16. "Why is so?" - you ask. The main goal of 🐊Putout is bringing best practices in software development process. And one of best practices is updating dependencies in time.

Node v16 stable, LTS, and I see no reason to wait for about a year while everybody drop v14.
Anyways if you cannot upgrade just use 🐊Putout v24, and if you have any problems create an issue I'm always here to help :).

apply-array-at

Among one’s affairs there should not be more than two or three matters of what one could call great concern.
If these are deliberated upon during ordinary times, they can be understood. Thinking about things previously
and then handling them lightly when the time comes is what this is all about.

(c) Yamamoto Tsunetomo "Hagakure"

The second reason of dropping old versions is adapting and popularizing new constructions like array.at(). So from now on @putout/plugin-apply-array-at is bundled and will help you, when you want to get last element of an array.

❌ Example of incorrect code

const array = [1, 2, 3];
console.log(array[array.length - 1]);

βœ… Example of correct code

const array = [1, 2, 3];
console.log(array.at(-1));

apply-array-at is written in 🦎PutoutScript and looks this way:

module.exports.replace = () => ({
    '__a[__a.length - __b]': '__a.at(-__b)',
});

So much power in so little code, breathtaking isn't it 😏?

☝️ Wandering why still in CommonJS and not ESM? Worry not! Wait until https://github.com/eslint/eslint/issues/15394 resolved: we need eslint-plugin-putout working! Anyways convert-commonjs-to-esm is ready 🀺, and when the time is come β€” conversion unavoidable ✊.

try-catch

With help of try-catch rules big and ugly try-catch blocks will be converted to small and beautiful calls.

❌ Example of incorrect code

try {
    say('hello');
} catch (error) {
    log(error);
}

βœ… Example of correct code

import tryCatch from 'try-catch';
const [error] = tryCatch(say, 'hello');

if (error)
    log(error);

This all possible with help of:

Here is reasoning of using try-catch instead of old syntax construction.

New loaders API

To face an event anew solve it lightly is difficult if you are not resolved beforehand,
and there will always be uncertainty in hitting your mark.
However, if the foundation is laid previously, you can think of the saying,
β€œMatters of great concern should be treated lightly,” as your own basis for action.

(c) Yamamoto Tsunetomo "Hagakure"

Node v14 has one type of loaders:

And node v16 has other:

That's not fun at all to support both of them πŸ˜…...

☝️ So mock-import, zenload and 🎩EScover also updated to support only latest version of API.

That's all for today. Have a good day and take care of your codebases πŸ¦”!

πŸ”₯ feature

  • (package) @putout/plugin-github v3.0.0
  • (putout) drop support of node < 16
  • (@putout/plugin-github) set-node-versions: 14, 16, 17 -> 16, 17
  • (@putout/plugin-github) drop support of putout < 25
  • (package) @putout/operator-declare v4.0.0
  • (package) @putout/plugin-convert-map-to-for-of v2.0.0
  • (package) @putout/plugin-regexp v5.0.0
  • (package) @putout/processor-markdown v6.0.0
  • (@putout/processor-markdown) drop support of putout < 25
  • (@putout/plugin-regexp) drop support of putout < 25
  • (@putout/plugin-convert-map-to-for-of) drop support of putout < 25
  • (@putout/operator-declare) drop support of putout < 25
  • (putout) add @putout/plugin-apply-array-at
  • (@putout/plugin-remove-unused-variables) get-vars: getScopeUID: rm useless done
  • (@putout/operator-declare) parseCode: rm useless name argument
  • (@putout/test) supertape v7.0.0
  • (@putout/test) reuse options
  • (eslint-plugin-putout) add remove-newline-after-last-element (#95)
  • (@putout/plugin-putout) add convert-match-to-function
  • (@putout/plugin-putout) check-replace-code: add support of ObjectExpression
  • (@putout/plugin-putout) add convert-replace-to-function
  • (@putout/engine-runner) replace: add match property value validation: ☝️ Looks like 'match' property value is not a 'function', but 'string' with value 'xxx'.
  • (@putout/engine-loader) validate-plugin: improve error message: ☝️ Cannot determine type of plugin fn. Here is list of supported plugins: https://git.io/JqcMn
  • (@putout/plugin-remove-empty) pattern: improve support of function arguments
  • (@putout/engine-runner) add ☝️ Looks like you passed template value with a wrong type. Allowed: string, node and path. Received: true
putout - putout v24.6.0

Published by coderaiser over 2 years ago

Decreased dependencies count

image

These three attributes, Sat, Chit, and Ananda
(Existence, Consciousness, and Bliss),
Do not actually define Brahman.
A poison is poison to others,
But not to itself.

Shininess, hardness, and yellowness,
Together signify gold.
Stickiness, sweetness, and viscosity,
Together signify honey.

(c) Jnaneshwara "AmαΉ›it’ānubhava"
(c) Cipactli

Hi folks!
Today we talk about changes that will make installing 🐊Putout faster.

Merged rules into promises

@putout/plugin-promises merged rules:

  • βœ… apply-top-level-await
  • βœ… remove-useless-async
  • βœ… remove-useless-await

Merged rules into remove-empty

@putout/plugin-remove-empty merged remove-empty-pattern.

New rule destruct in remove-useless-variables

remove-useless-variables can do a lit bit more 😏.

-function hello(args) {
-    const {a, b} = args;
-}
+function hello({a, b}) {
+}

Take a look at draft if you want to see how it works.

remove-unused-variables got more powerful

Now it supports ClassProperties (#96), and code:

import thing from β€˜./thing.js’;
const pi = Math.PI;

export default class {
    static t = thing;
    static mathPi = pi;
    t = thing;
}

will be linted with no false positives:

 1:7  error   "thing" is defined but never used  remove-unused-variables 
 3:6  error   "pi" is defined but never used     remove-unused-variables */

Thanks for reporting to @adamdicarlo!

Good first issue

If you want help, and don't know how, take a look at good first issue label :).

That's all for today, cheers 🎈!

🐞 fix

  • (eslint-plugin-putout) remove parent: after parse -> before print
  • (eslint-plugin-putout) npmignore: add lib/**/*.md
  • chore(madrun) add fresh:fix

πŸ”₯ feature

  • (package) @putout/plugin-remove-empty v7.0.0
  • (package) @putout/plugin-promises v7.0.0
  • (@putout/plugin-remove-empty) drop support of 🐊Putout < 24
  • (@putout/plugin-remove-empty) merge remove-empty-pattern
  • (@putout/plugin-promises) merge remove-useless-await
  • (@putout/plugin-promises) merged remove-useless-async
  • (@putout/plugin-promises) drop support of 🐊Putout < 24
  • (@putout/plugin-promises) merged apply-top-level-await
  • (@putout/plugin-remove-useless-variables) destruct: add support of AssignmentPattern
  • (@putout/plugin-remove-useless-variables) destr: add support of RestElement
  • (eslint-plugin-putout) function-declaration-parent-newline: improve support of destructuring
  • (@putout/engine-parser) add support of wasm-based hermes-parser (5 times slower then babel πŸ€”)
  • (@putout/plugin-remove-unused-variables) add support of ClassProperty (#96)
  • (@putout/plugin-apply-try-catch) await: add support of async
  • (@putout/plugin-putout) check-replace-code: exclude plugins containing match
  • (@putout/plugin-apply-try-catch) add await
  • (eslint-plugin-putout) function-declaration-paren-newline: add FunctionExpression support
  • (@putout/plugin-remove-useless-variables) add destruct
  • (eslint-plugin-putout) safe: disable remove-useless-spread
  • (@putout/eslint-config) operator-linebreak: add ":", "?"
  • (@putout/eslint-config) operand-linebreak: |, || - before, others - after
putout - putout v24.5.0

Published by coderaiser over 2 years ago

Compare

image

β€œThere is nothing outside of yourself that can ever enable you to get better, stronger, richer, quicker, or smarter.
Everything is within. Everything exists. Seek nothing outside of yourself.”
(c) Miyamoto Musashi

Hi folks!

Today we talk about @putout/compare. It used a lot in Replacer and Includer.
Long time ago for simplification when types of nodes are different comparing started to go upwards.

But 🎩ESCover needs to preserve comparing with:

compare(path, 'const __a = __b', {
    findUp: false,
});

So:

const operator = getOperator(ret.argument || ret);

Can be converted to:

const operator = (__c4['🧨'](4, 17), getOperator((__c4['🧨'](4, 29), ret.argument) || (__c4['🧨'](4, 45), ret)));

Instead of:

const operator = (__c4['🧨'](4, 17), getOperator(ret.argument || ret));

While SequenceExpressions like (__c4['🧨'](__d, __e), __f) are excluded.

πŸ€·β€β™‚οΈ How it relates to ♨️Speca?

Well, ♨️Speca is a test generator based on 🐊Putout. Some cases wasn't covered, so I trapped on this.
Here is how it looks like:

image

That's all for today 🎈!

🐞 fix

  • (putout) rm unused thread-it

πŸ”₯ feature

  • (package) @putout/plugin-strict-mode v3.0.0
  • (package) @putout/compare v8.7.0
  • (@putout/compare) add findUp option
  • (@putout/compare) add support of findUp
  • (@putout/plugin-strict-mode) drop support of putout < 24
  • (@putout/plugin-strict-mode) commonjs -> CommonJS
  • (@putout/plugin-strict-mode) is esm -> in ESM
putout - putout v24.4.0

Published by coderaiser over 2 years ago

Let's test ESLint

image

The baby looks at things all day without winking; that is because his eyes are not focused on any particular object. He goes without knowing where he is going, and stops without knowing what he is doing. He merges himself within the surroundings and moves along with it. These are the principles of mental hygiene.”
― Chuang-Tzu

Hi folks!

Now you can test ESLint in a simplest possible way, using @putout/test.

All you need is create test:

import {createTest} from '@putout/test/eslint';
const test = createTest(import.meta.url);

And process:

test('test: eslint: transform', async ({process}) => {
    await process('operator-linebreak');
});

When you want to pass options:

test('test: eslint: transform', async ({process}) => {
    await process('operator-linebreak', {
        rules: {
            'putout/putout': {
                rules: {
                    'convert-esm-to-commonjs': 'on',
                },
            },
        },
    });
});

When you want to compare found places:

test('eslint-config: operator-line-break', async ({comparePlaces}) => {
    await comparePlaces('operator-linebreak', [{
        "message": "There should be no line break before or after '='.",
        "position": {
            "column": 1,
            "line": 2,
        },
        "rule": "operator-linebreak (eslint)",
    }]);
});

That's all for today :)!

πŸ”₯ feature

  • (putout) cli: move out runner
  • (@putout/eslint-config) padding-line-between-statements: add import
  • (@putout/eslint-config) padding-line-between-statements: add export
  • (@putout/eslint-config) enable operator-linebreak
  • (@putout/test) add ESLint support
putout - putout v24.3.0

Published by coderaiser over 2 years ago

ESLint API

image

Forget the years, forget distinctions. Leap into the boundless and make it your home!
Zhuangzi

Hi foks! Let's talk about ESLint API a little bit more.

ESLint begins his work as a formatter when 🐊Putout done his transformations. That's why it used a lot in different parts of application, for testing purpose and using API in a simplest possible way. You can access it with:

import {eslint} from 'putout/eslint';

To use it simply write:

const [source, places] = await eslint({
    name: 'hello.js',
    code: `const t = 'hi'\n`,
    fix: false,
    config: {
        extends: [
            'plugin:putout/recommended',
        ],
    },
});

Isn't it looks similar to 🐊Putout way? It definitely is! But... It has a couple differences you should remember:

If you want to apply 🐊Putout transformations using putout/putout ESLint rule, enable putout with the same called flag:

const [source, places] = await eslint({
    name: 'hello.js',
    code: `const t = 'hi'\n`,
    fix: true,
    putout: true,
    config: {
        extends: [
            'plugin:putout/recommended',
        ],
    },
});

It is disabled by default, because ESLint always runs after 🐊Putout transformations, so there is no need to traverse tree again.

What with 🎩ESCover?

🎩ESCover is ready to be used in a regular basis πŸŽ‰!
The only thing is: it works with EcmaScript Modules only. And this is for a reason: for CommonJS you can use c8 and nyc/istanbul. But there is no tool that shows coverage for files changed with node loaders.

What's inside of 🎩ESCover?

Inside of 🎩ESCover you can find the plugin for 🐊Putout which sets markers that should be called.
Results saved to coverage/lcov.info to read them when done.

-☝️ lcov was created in 2002, almost twenty years ago.
-☝️ Linux kernel developers created it to know what is going on with the coverage.
-☝️ It's written in PERL and has text based format.
-☝️ This is most popular coverage format of all times supported by a lot of tools (like coveralls).

So if we run our ESM application with:

estrace npm test

We will receive something similar to:

SF:/Users/coderaiser/escover/lib/transform.js
DA:1,1
DA:3,1
DA:7,1
DA:9,1
DA:10,1
DA:12,1
DA:24,1
DA:25,1
DA:27,1
DA:28,1
DA:29,1
DA:32,1
end_of_record

Where:

  • SF - is path to source;
  • DA - is line number, and count of running;
  • end_of_record latest recored for current file entry;

As for me this is really human readable, and very compact form. The only thing I don't get for now is: counters, I see no reason why do I need them πŸ€·β€β™‚οΈ, if you have a reason create an issue. It can be added in one line of code.

That's all for today!
Have a nice day 🏝!

πŸ”₯ feature

  • (putout) eslint: add ability to enable putout/putout rule with a flag
  • (putout/eslint) add ability to enable putout
putout - putout v24.2.2

Published by coderaiser over 2 years ago

🐞 fix

  • (@putout/plugin-declare-undefined-variables) node-js: exclude "promises" as it is to general
  • (@putout/engine-runner) avoid duplication of plugins

πŸ”₯ feature

  • (package) @putout/plugin-convert-esm-to-commonjs v4.0.0
  • (@putout/plugin-convert-esm-to-commonjs) drop support of putout < 24
  • (@putout/plugin-convert-esm-to-commonjs) Commonjs -> CommonJS
  • (@putout/engine-runner) add ability to debug with "putoutπŸƒreplace"
putout - putout v24.2.1

Published by coderaiser almost 3 years ago

🐞 fix

  • (@putout/test) avoid updating noTransform files

πŸ”₯ feature

  • (package) @putout/plugin-remove-useless-variables v6.0.0
  • (@putout/plugin-remove-useless-variables) drop support of putout < 24
  • (package) @putout/plugin-remove-unused-for-of-variables v2.0.0
  • (package) @putout/plugin-convert-for-to-for-of v3.0.0
  • (package) @putout/plugin-tape v8.0.0
  • (@putout/plugin-tape) drop support of putout < 24
  • (@putout/plugin-convert-for-to-for-of) drop support of putout < 24
  • (package) @putout/operator-add-args v2.0.0
  • (@putout/operator-add-args) drop support of putout < 24
  • (@putout/operator-declare) improve variables declaration
  • (package) @putout/plugin-remove-nested-blocks v5.0.0
  • (@putout/plugin-remove-nested-blocks) drop support of putout < 24
  • (package) @putout/plugin-putout v10.0.0
  • (@putout/plugin-putout) drop support of putout < 24.2
  • (package) @putout/plugin-merge-duplicate-imports v5.0.0
  • (@putout/plugin-merge-duplicate-imports) drop support of putout < 24
  • (package) @putout/plugin-merge-destructuring-properties v6.0.0
  • (@putout/plugin-merge-destructuring-properties) drop support of putout < 24
  • (package) @putout/plugin-extract-object-properties v7.0.0
  • (@putout/plugin-extract-object-properties) drop support of putout < 24
  • (package) @putout/plugin-convert-mock-require-to-mock-import v2.0.0
  • (@putout/plugin-convert-mock-require-to-mock-import) drop support of putout < 24
  • (package) @putout/plugin-convert-for-each-to-for-of v7.0.0
  • (@putout/plugin-convert-for-each-to-for-of) drop support of putout < 24
  • (package) @putout/plugin-convert-commonjs-to-esm v8.0.0
  • (@putout/plugin-convert-commonjs-to-esm) drop support of putout < 24
  • (package) @putout/operator-declare v3.0.0
  • (@putout/operator-declare) drop support of putout < 24
putout - putout v24.2.0

Published by coderaiser almost 3 years ago

Crawling

image

Where can I find a man who has forgotten words so I can have a word with him?
(c) Zhuangzi

Hi folks!

When you removing a variable, or manipulate in any way with it, for example

import {readFile} from 'fs/promises';
import {writeFile} from 'fs/promises';

log(readFile, writeFile);

Will be converted with merge-duplicate-imports to:

import {readFile, writeFile} from 'fs/promises';

log(readFile, writeFile);

But! When you have declare-undefined-variables enabled: you in trouble! And most likely see error message like this:

TypeError: Cannot read properties of undefined (reading 'buildError')

This is the way Babel tries to tell you that there is names collision, and code contains a couple variables with the same name.

The thing is merge-duplicate-imports doesn't crawl the tree with help of:

path.scope.getProgramParent().crawl();

It only removes old nodes, and adds a new one.

This is a thing that adds variables to bindings object, so other plugins can determine whether they declared or not.

But worry not! This behaviour was fixed in even more! You don't ever need to think about was AST crawled after your plugin made fixes or not. From now it's crawled on every fix πŸŽ‰ !

That's all for today! Have a nice weekend!

🐞 fix

  • (@putout/plugin-merge-duplicate-imports) crawl: integrate with declare

πŸ”₯ feature

  • (package) @putout/plugin-remove-nested-blocks v5.0.0
  • (@putout/plugin-remove-nested-blocks) drop support of putout < 24
  • (package) @putout/plugin-putout v10.0.0
  • (@putout/plugin-putout) drop support of putout < 24.2
  • (package) @putout/plugin-merge-duplicate-imports v5.0.0
  • (@putout/plugin-merge-duplicate-imports) drop support of putout < 24
  • (package) @putout/plugin-merge-destructuring-properties v6.0.0
  • (@putout/plugin-merge-destructuring-properties) drop support of putout < 24
  • (package) @putout/plugin-extract-object-properties v7.0.0
  • (@putout/plugin-extract-object-properties) drop support of putout < 24
  • (package) @putout/plugin-convert-mock-require-to-mock-import v2.0.0
  • (@putout/plugin-convert-mock-require-to-mock-import) drop support of putout < 24
  • (package) @putout/plugin-convert-for-each-to-for-of v7.0.0
  • (@putout/plugin-convert-for-each-to-for-of) drop support of putout < 24
  • (package) @putout/plugin-convert-commonjs-to-esm v8.0.0
  • (@putout/plugin-convert-commonjs-to-esm) drop support of putout < 24
  • (package) @putout/operator-declare v3.0.0
  • (@putout/operator-declare) drop support of putout < 24
  • (@putout/engine-runner) runFix: add ability to crawl
  • (eslint-plugin-putout) add remove-empty-newline-after-import
  • (@putout/plugin-declare-undefined-variables) add nodejs util
  • (@putout/operator/declare) respect import order: locals - latest import
  • (@putout/operator-declare) import require support
  • (@putout/operator-declare) improve declarations order
  • (@putout/plugin-declare-undefined-variables) add fs
  • (@putout/plugin-declare-undefined-variables) add support of process
  • (eslint-plugin-putout) safe: disable remove-unreferenced-variables
  • (@putout/plugin-remove-nested-blocks) integrate with tape/declare: add crawling
  • (eslint-plugin-putout) safe: disable remove-useless-variables/rename
  • (@putout/operate) toExpression: improve expression check
  • (@putout/plugin-declare-undefined-variables) add support of table
  • (@putout/plugin-declare-undefined-variables) add support of chalk
  • (eslint-plugin-putout) add remove-empty-specifiers
  • (eslint-plugin-putout) add-newline-before-function-call: add support of spaces after
  • (eslint-plugin-putout) single-property-destructuring: exclude elements with comments inside
  • (@putout/plugin-convert-commonjs-to-esm) require: exclude json while not supported
  • (@putout/plugin-convert-commonjs-to-esm) require: disable import assertions while not supported
  • (package) @putout/operate v7.0.0
  • (package) @putout/operate v7.0.0
  • (package) @putout/operate v7.0.0
putout - putout v24.1.0

Published by coderaiser almost 3 years ago

πŸ”₯ feature

  • (@putout/test) get rid of simport
  • (putout) get rid of simport
  • (package) @putout/cli-ruler v2.0.0
  • (@putout/cli-ruler) named export ruler
  • (@putout/processor-markdown) rm simport
  • (@putout/plugin-tape) mv remove-only, remove-skip from dependencies
putout - putout v24.0.2

Published by coderaiser almost 3 years ago

πŸ”₯ feature

  • (@putout/plugin-typescript) add
Package Rankings
Top 1.65% on Npmjs.org
Badges
Extracted from project README
NPM version Build Status Coverage Status DeepScan putout npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm npm