-
Notifications
You must be signed in to change notification settings - Fork 0
/
dns.ts
58 lines (53 loc) · 2.24 KB
/
dns.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { ASTUtils } from '@typescript-eslint/utils';
import { createRule } from '../../util/create-rule';
const trackMap: ASTUtils.ReferenceTracker.TraceMap<true> = {
dns: {
lookup: { [ASTUtils.ReferenceTracker.CALL]: true },
lookupService: { [ASTUtils.ReferenceTracker.CALL]: true },
Resolver: { [ASTUtils.ReferenceTracker.CONSTRUCT]: true },
getServers: { [ASTUtils.ReferenceTracker.CALL]: true },
resolve: { [ASTUtils.ReferenceTracker.CALL]: true },
resolve4: { [ASTUtils.ReferenceTracker.CALL]: true },
resolve6: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveAny: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveCname: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveMx: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveNaptr: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveNs: { [ASTUtils.ReferenceTracker.CALL]: true },
resolvePtr: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveSoa: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveSrv: { [ASTUtils.ReferenceTracker.CALL]: true },
resolveTxt: { [ASTUtils.ReferenceTracker.CALL]: true },
reverse: { [ASTUtils.ReferenceTracker.CALL]: true },
setServers: { [ASTUtils.ReferenceTracker.CALL]: true },
},
};
export const category = 'Stylistic Issues';
export default createRule<[], `preferPromises${'' | 'New'}`>({
name: 'prefer-promises/dns',
meta: {
type: 'suggestion',
docs: { description: 'enforce `require("dns").promises`', recommended: false },
schema: [],
messages: {
preferPromises: "Use 'dns.promises.{{name}}()' instead.",
preferPromisesNew: "Use 'new dns.promises.{{name}}()' instead.",
},
},
defaultOptions: [],
create(context) {
return {
'Program:exit'() {
const tracker = new ASTUtils.ReferenceTracker(context.getScope(), { mode: 'legacy' });
for (const { node, path } of [
...tracker.iterateCjsReferences(trackMap),
...tracker.iterateEsmReferences(trackMap),
]) {
const name = path[path.length - 1];
const isClass = name.startsWith(name[0].toUpperCase());
context.report({ node, messageId: isClass ? 'preferPromisesNew' : 'preferPromises', data: { name } });
}
},
};
},
});