@putout/operator-declare
v18.1.0
Published
🐊Putout operator adds ability to declare referenced variables that was not defined
Maintainers
Readme
@putout/operator-declare 
🐊Putout operator adds ability to declare variables that has references with no definitions. Most likely you prefer using Declarator plugin type based on current Operator.
Install
npm i putout @putout/operator-declareAPI
If you want to create 🐊Putout plugin that will declare variables according to your needs just:
import {operator} from 'putout';
const {declare} = operator;
export const {
report,
include,
fix,
filter,
} = declare({
fs: `import fs from 'fs/promises'`,
});nearby
By default @putout/operator-declare declares variables on the top level, when you need to declare on the same level,
export const FunctionDeclaration = {
print(path, printer, semantics) {
const {
+ indent
print,
} = printer;
indent();
}
}Use nearby:
const {operator} = require('putout');
const {declare} = operator;
export const {
report,
include,
fix,
filter,
} = declare({
indent: ['const {indent} = printer', {
nearby: true,
}],
});Dual packages
When you need different declarations for ESM and CommonJS you can use:
const {operator} = require('putout');
const {declare} = operator;
export const {
report,
include,
fix,
filter,
} = declare({
fs: {
esm: `import fs from 'fs/promises'`,
comomnjs: `const fs = require('fs')`, // drop when not needed
},
});Configuration
Plugin supports options, so you can pass it in .putout.json:
{
"rules": {
"putout/declare": ["on", {
"declarations": {
"fs": "import fs from 'fs/promises'"
}
}]
}
}If for some reason you don't need some kind of declaration, add dismiss field and it will be ignored:
{
"rules": {
"putout/declare": ["on", {
"declarations": {
"fs": "import fs from 'fs/promises'"
},
"dismiss": ["fs"]
}]
}
}If you want to override type to avoid detecting, set it to esm|commonjs:
{
"rules": {
"putout/declare": ["on", {
"declarations": {
"fs": "import fs from 'fs/promises'"
},
"dismiss": ["fs"],
"type": "esm"
}]
}
}top
When you need to put declaration on top:
+{defineProperty} = Object;
defineProperty(require, '__esModule', {
value: true,
});
require.require = require;
const a = require('hello');
console.log(a);
function require(a) {
return a;
}Use nearby:
const {operator} = require('putout');
const {declare} = operator;
export const {
report,
include,
fix,
filter,
} = declare({
defineProperty: ['const {defineProperty} = Object', {
top: true,
}],
});Used in
- ✅ declare
- ✅ tape/declare
- ✅ putout/declare
- ✅ nodejs/declare
- ✅ react-hooks/declare
- ✅ try-catch/declare
- ✅ montag/declare
- ✅ madrun/declare
- ✅ maybe/declare
Evaluate
Can be used with ESLint's putout/evaluate:
{
"rules": {
"putout/declare": ["on", {
"declarations": {
"superMethod": "import superMethod from '__putout_evaluate: join(`./`, basename(__filename), `.js`)'"
}
}]
}
}If you have a file index.spec.js:
+ import superMethod from './index.js'
superMethod();License
MIT
