Security News
New Python Packaging Proposal Aims to Solve Phantom Dependency Problem with SBOMs
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
@putout/eslint
Advanced tools
Wrapper that simplifies ESLint API and makes it compatible with 🐊Putout.
☝️ FlatConfig supported from the box.
npm i @putout/eslint
ESLINT_CONFIG_FILE
env variable:NO_ESLINT=1
env variable:NO_ESLINT_WARNINGS=1
:NO_ESLINT_WARNINGS=1 putout --fix lib
## API
### `eslint(options)`
**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:
```js
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,
});
Isn't it looks similar to 🐊Putout way? It definitely is! But... It has a couple differences you should remember:
code
and places
properties, and ESLint returns a tuplename
property that is used to calculate configuration file.And you can even override any of ESLint ⚙️ options with help of config
property:
const [source, places] = await eslint({
name: 'hello.js',
code: `const t = 'hi'\n`,
fix: false,
config: {
extends: ['plugin:putout/recommended'],
},
});
If you want to apply 🐊Putout transformations using putout/putout
ESLint rule, enable 🐊Putout with the same called but lowercased 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.
createPlugin(options)
You can also simplify creating of plugins for ESLint with help of createPlugin
.
🐊Putout-based ESLint plugin are highly inspired by Putout Plugins API of Includer.
So it must contain classic 4
methods:
module.exports.report = () => 'debugger statement should not be used';
module.exports.fix = (path) => {
return '';
};
module.exports.include = () => [
'DebuggerStatement',
];
module.exports.filter = (path) => {
return true;
};
The main difference with Includer is:
fix
works with text;include
does not support 🦎PutoutScript;exclude
;Take a look at more sophisticated example, rule remove-duplicate-extensions
:
const getValue = ({source}) => source?.value;
module.exports.report = () => 'Avoid duplicate extensions in relative imports';
module.exports.include = () => [
'ImportDeclaration',
'ImportExpression',
'ExportAllDeclaration',
'ExportNamedDeclaration',
];
module.exports.fix = ({text}) => {
return text.replace('.js.js', '.js');
};
module.exports.filter = ({node}) => {
const value = getValue(node);
return /\.js\.js/.test(value);
};
To use it just add couple lines to your main plugin file:
const {createPlugin} = require('@putout/eslint/create-plugin');
const createRule = (a) => ({
[a]: createPlugin(require(`./${a}`)),
});
module.exports.rules = {
...createRule('remove-duplicate-extensions'),
};
Or just:
const {createPlugin} = require('@putout/eslint/create-plugin');
module.exports.rules = {
'remove-duplicate-extensions': createPlugin(require('./remove-duplicate-extensions')),
};
lint(source, {fix, plugins, options, filename})
When you need to run ESLint with one plugin (rule), just use lint
it will do the thing.
const lint = require('@putout/eslint/lint');
const {createPlugin} = require('@putout/eslint/create-plugin');
const removeDebugger = require('./remove-debugger');
const [code, places] = lint('debugger', {
fix: true, // default
plugins: [
['remove-debugger', createPlugin(removeDebugger)],
],
});
When you want to skip plugins, and just provide options
and filename
you can:
const lint = require('@putout/eslint/lint');
const [code, places] = lint('debugger', {
filename: 'index.js',
options: [{
rules: {
semi: 'error',
},
}],
});
MIT
FAQs
Wrapper that simplifies ESLint API and makes it compatible with 🐊Putout
The npm package @putout/eslint receives a total of 2,667 weekly downloads. As such, @putout/eslint popularity was classified as popular.
We found that @putout/eslint demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Security News
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.
Security News
Research
Socket researchers uncover how threat actors weaponize Out-of-Band Application Security Testing (OAST) techniques across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.