75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
|
/**
|
||
|
* @author Toru Nagashima
|
||
|
* See LICENSE file in root directory for full license.
|
||
|
*/
|
||
|
"use strict"
|
||
|
|
||
|
const { CALL, CONSTRUCT, ReferenceTracker } = require("eslint-utils")
|
||
|
|
||
|
const trackMap = {
|
||
|
dns: {
|
||
|
lookup: { [CALL]: true },
|
||
|
lookupService: { [CALL]: true },
|
||
|
Resolver: { [CONSTRUCT]: true },
|
||
|
getServers: { [CALL]: true },
|
||
|
resolve: { [CALL]: true },
|
||
|
resolve4: { [CALL]: true },
|
||
|
resolve6: { [CALL]: true },
|
||
|
resolveAny: { [CALL]: true },
|
||
|
resolveCname: { [CALL]: true },
|
||
|
resolveMx: { [CALL]: true },
|
||
|
resolveNaptr: { [CALL]: true },
|
||
|
resolveNs: { [CALL]: true },
|
||
|
resolvePtr: { [CALL]: true },
|
||
|
resolveSoa: { [CALL]: true },
|
||
|
resolveSrv: { [CALL]: true },
|
||
|
resolveTxt: { [CALL]: true },
|
||
|
reverse: { [CALL]: true },
|
||
|
setServers: { [CALL]: true },
|
||
|
},
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
meta: {
|
||
|
docs: {
|
||
|
description: 'enforce `require("dns").promises`',
|
||
|
category: "Stylistic Issues",
|
||
|
recommended: false,
|
||
|
url:
|
||
|
"https://github.com/mysticatea/eslint-plugin-node/blob/v10.0.0/docs/rules/prefer-promises/dns.md",
|
||
|
},
|
||
|
fixable: null,
|
||
|
messages: {
|
||
|
preferPromises: "Use 'dns.promises.{{name}}()' instead.",
|
||
|
preferPromisesNew: "Use 'new dns.promises.{{name}}()' instead.",
|
||
|
},
|
||
|
schema: [],
|
||
|
type: "suggestion",
|
||
|
},
|
||
|
|
||
|
create(context) {
|
||
|
return {
|
||
|
"Program:exit"() {
|
||
|
const scope = context.getScope()
|
||
|
const tracker = new ReferenceTracker(scope, { mode: "legacy" })
|
||
|
const references = [
|
||
|
...tracker.iterateCjsReferences(trackMap),
|
||
|
...tracker.iterateEsmReferences(trackMap),
|
||
|
]
|
||
|
|
||
|
for (const { node, path } of references) {
|
||
|
const name = path[path.length - 1]
|
||
|
const isClass = name[0] === name[0].toUpperCase()
|
||
|
context.report({
|
||
|
node,
|
||
|
messageId: isClass
|
||
|
? "preferPromisesNew"
|
||
|
: "preferPromises",
|
||
|
data: { name },
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
}
|