@cdklabs/eslint-plugin 1.4.3 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -15,5 +15,6 @@ exports.rules = {
|
|
|
15
15
|
'promiseall-no-unbounded-parallelism': require('./rules/promiseall-no-unbounded-parallelism'),
|
|
16
16
|
'no-this-in-static': require('./rules/no-this-in-static'),
|
|
17
17
|
'no-evaluating-typeguard': require('./rules/no-evaluating-typeguard'),
|
|
18
|
+
'no-unconditional-token-allocation': require('./rules/no-unconditional-token-allocation'),
|
|
18
19
|
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBEQUEwRDs7O0FBRTdDLFFBQUEsSUFBSSxHQUFHO0lBQ2xCLElBQUksRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJO0lBQ3JDLE9BQU8sRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPO0NBQzVDLENBQUM7QUFFVyxRQUFBLEtBQUssR0FBRztJQUNuQixtQkFBbUIsRUFBRSxPQUFPLENBQUMsMkJBQTJCLENBQUM7SUFDekQscUJBQXFCLEVBQUUsT0FBTyxDQUFDLDZCQUE2QixDQUFDO0lBQzdELHNCQUFzQixFQUFFLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQztJQUMvRCxpQkFBaUIsRUFBRSxPQUFPLENBQUMseUJBQXlCLENBQUM7SUFDckQsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLGdDQUFnQyxDQUFDO0lBQ25FLHFDQUFxQyxFQUFFLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztJQUM3RixtQkFBbUIsRUFBRSxPQUFPLENBQUMsMkJBQTJCLENBQUM7SUFDekQseUJBQXlCLEVBQUUsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO0lBQ3JFLG1DQUFtQyxFQUFFLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQztDQUMxRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuXG5leHBvcnQgY29uc3QgbWV0YSA9IHtcbiAgbmFtZTogcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykubmFtZSxcbiAgdmVyc2lvbjogcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcbn07XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgJ25vLWNvcmUtY29uc3RydWN0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1jb3JlLWNvbnN0cnVjdCcpLFxuICAnaW52YWxpZC1jZm4taW1wb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvaW52YWxpZC1jZm4taW1wb3J0cycpLFxuICAnbm8tbGl0ZXJhbC1wYXJ0aXRpb24nOiByZXF1aXJlKCcuL3J1bGVzL25vLWxpdGVyYWwtcGFydGl0aW9uJyksXG4gICduby1pbnZhbGlkLXBhdGgnOiByZXF1aXJlKCcuL3J1bGVzL25vLWludmFsaWQtcGF0aCcpLFxuICAnbm8tdGhyb3ctZGVmYXVsdC1lcnJvcic6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdGhyb3ctZGVmYXVsdC1lcnJvcicpLFxuICAncHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc20nOiByZXF1aXJlKCcuL3J1bGVzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtJyksXG4gICduby10aGlzLWluLXN0YXRpYyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdGhpcy1pbi1zdGF0aWMnKSxcbiAgJ25vLWV2YWx1YXRpbmctdHlwZWd1YXJkJzogcmVxdWlyZSgnLi9ydWxlcy9uby1ldmFsdWF0aW5nLXR5cGVndWFyZCcpLFxuICAnbm8tdW5jb25kaXRpb25hbC10b2tlbi1hbGxvY2F0aW9uJzogcmVxdWlyZSgnLi9ydWxlcy9uby11bmNvbmRpdGlvbmFsLXRva2VuLWFsbG9jYXRpb24nKSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultOptions = exports.meta = void 0;
|
|
4
|
+
exports.create = create;
|
|
5
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
6
|
+
exports.meta = {
|
|
7
|
+
messages: {
|
|
8
|
+
avoidCall: '{{ calleeText }}: this will allocate an entry in a global table, even if the consumer never needs its result. Prefer to put this call in a (memoized) property getter instead.',
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
const DISALLOWED_CALLEES = [
|
|
12
|
+
'this.getResourceNameAttribute',
|
|
13
|
+
'this.getResourceArnAttribute',
|
|
14
|
+
'Token.asString',
|
|
15
|
+
];
|
|
16
|
+
exports.defaultOptions = {};
|
|
17
|
+
function create(context) {
|
|
18
|
+
const functionStack = [];
|
|
19
|
+
/**
|
|
20
|
+
* Whether this function is a constructor
|
|
21
|
+
*/
|
|
22
|
+
function isConstructor(node) {
|
|
23
|
+
return node.parent.type === utils_1.AST_NODE_TYPES.MethodDefinition && node.parent.kind === 'constructor';
|
|
24
|
+
}
|
|
25
|
+
function maybeInteresting(node) {
|
|
26
|
+
return isConstructor(node);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Enter a function and see if it's interesting
|
|
30
|
+
*/
|
|
31
|
+
function enterFunction(node) {
|
|
32
|
+
functionStack.push(maybeInteresting(node));
|
|
33
|
+
}
|
|
34
|
+
function exitFunction() {
|
|
35
|
+
functionStack.pop();
|
|
36
|
+
}
|
|
37
|
+
function currentInteresting() {
|
|
38
|
+
return functionStack.length > 0 ? functionStack[functionStack.length - 1] : false;
|
|
39
|
+
}
|
|
40
|
+
function onlyInInterestingFunction(fn) {
|
|
41
|
+
return ((...args) => {
|
|
42
|
+
if (currentInteresting()) {
|
|
43
|
+
return fn(...args);
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check the text what we're calling against a set of disallowed entries
|
|
50
|
+
*/
|
|
51
|
+
function callExpression(node) {
|
|
52
|
+
const eslintNode = node;
|
|
53
|
+
const calleeText = context.sourceCode.getText(eslintNode.callee);
|
|
54
|
+
if (DISALLOWED_CALLEES.includes(calleeText)) {
|
|
55
|
+
context.report({
|
|
56
|
+
node: eslintNode,
|
|
57
|
+
messageId: 'avoidCall',
|
|
58
|
+
loc: eslintNode.loc ?? { line: 0, column: 0 },
|
|
59
|
+
data: {
|
|
60
|
+
calleeText,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
'FunctionDeclaration': enterFunction,
|
|
67
|
+
'FunctionExpression': enterFunction,
|
|
68
|
+
'FunctionDeclaration:exit': exitFunction,
|
|
69
|
+
'FunctionExpression:exit': exitFunction,
|
|
70
|
+
'CallExpression': onlyInInterestingFunction(callExpression),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW5jb25kaXRpb25hbC10b2tlbi1hbGxvY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLXVuY29uZGl0aW9uYWwtdG9rZW4tYWxsb2NhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtQkEsd0JBZ0VDO0FBbkZELG9EQUFvRTtBQUt2RCxRQUFBLElBQUksR0FBc0I7SUFDckMsUUFBUSxFQUFFO1FBQ1IsU0FBUyxFQUFFLGdMQUFnTDtLQUM1TDtDQUNGLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLCtCQUErQjtJQUMvQiw4QkFBOEI7SUFDOUIsZ0JBQWdCO0NBQ2pCLENBQUM7QUFFVyxRQUFBLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFFakMsU0FBZ0IsTUFBTSxDQUFDLE9BQXlCO0lBQzlDLE1BQU0sYUFBYSxHQUFtQixFQUFFLENBQUM7SUFFekM7O09BRUc7SUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUFnRTtRQUNyRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLHNCQUFjLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO0lBQ3BHLENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUFDLElBQWdFO1FBQ3hGLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsYUFBYSxDQUFDLElBQXdGO1FBQzdHLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsU0FBUyxZQUFZO1FBQ25CLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBUyxrQkFBa0I7UUFDekIsT0FBTyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwRixDQUFDO0lBRUQsU0FBUyx5QkFBeUIsQ0FBcUIsRUFBSztRQUMxRCxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1lBQ3pCLElBQUksa0JBQWtCLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQVEsQ0FBQztJQUNaLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsY0FBYyxDQUFDLElBQTZCO1FBQ25ELE1BQU0sVUFBVSxHQUFHLElBQXNCLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpFLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDYixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLEVBQUU7b0JBQ0osVUFBVTtpQkFDWDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLHFCQUFxQixFQUFFLGFBQW9CO1FBQzNDLG9CQUFvQixFQUFFLGFBQW9CO1FBQzFDLDBCQUEwQixFQUFFLFlBQVk7UUFDeEMseUJBQXlCLEVBQUUsWUFBWTtRQUN2QyxnQkFBZ0IsRUFBRSx5QkFBeUIsQ0FBQyxjQUFjLENBQVE7S0FDbkUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1RfTk9ERV9UWVBFUywgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7IENhbGxFeHByZXNzaW9uIH0gZnJvbSAnZXN0cmVlJztcbmltcG9ydCBOb2RlUGFyZW50RXh0ZW5zaW9uID0gUnVsZS5Ob2RlUGFyZW50RXh0ZW5zaW9uO1xuXG5leHBvcnQgY29uc3QgbWV0YTogUnVsZS5SdWxlTWV0YURhdGEgPSB7XG4gIG1lc3NhZ2VzOiB7XG4gICAgYXZvaWRDYWxsOiAne3sgY2FsbGVlVGV4dCB9fTogdGhpcyB3aWxsIGFsbG9jYXRlIGFuIGVudHJ5IGluIGEgZ2xvYmFsIHRhYmxlLCBldmVuIGlmIHRoZSBjb25zdW1lciBuZXZlciBuZWVkcyBpdHMgcmVzdWx0LiBQcmVmZXIgdG8gcHV0IHRoaXMgY2FsbCBpbiBhIChtZW1vaXplZCkgcHJvcGVydHkgZ2V0dGVyIGluc3RlYWQuJyxcbiAgfSxcbn07XG5cbmNvbnN0IERJU0FMTE9XRURfQ0FMTEVFUyA9IFtcbiAgJ3RoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlJyxcbiAgJ3RoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUnLFxuICAnVG9rZW4uYXNTdHJpbmcnLFxuXTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgY29uc3QgZnVuY3Rpb25TdGFjazogQXJyYXk8Ym9vbGVhbj4gPSBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGEgY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIGlzQ29uc3RydWN0b3Iobm9kZTogVFNFU1RyZWUuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IFRTRVNUcmVlLkZ1bmN0aW9uRXhwcmVzc2lvbikge1xuICAgIHJldHVybiBub2RlLnBhcmVudC50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5NZXRob2REZWZpbml0aW9uICYmIG5vZGUucGFyZW50LmtpbmQgPT09ICdjb25zdHJ1Y3Rvcic7XG4gIH1cblxuICBmdW5jdGlvbiBtYXliZUludGVyZXN0aW5nKG5vZGU6IFRTRVNUcmVlLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCBUU0VTVHJlZS5GdW5jdGlvbkV4cHJlc3Npb24pOiAodHlwZW9mIGZ1bmN0aW9uU3RhY2spW251bWJlcl0ge1xuICAgIHJldHVybiBpc0NvbnN0cnVjdG9yKG5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGVyIGEgZnVuY3Rpb24gYW5kIHNlZSBpZiBpdCdzIGludGVyZXN0aW5nXG4gICAqL1xuICBmdW5jdGlvbiBlbnRlckZ1bmN0aW9uKG5vZGU6IChUU0VTVHJlZS5GdW5jdGlvbkRlY2xhcmF0aW9uIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uKSAmIE5vZGVQYXJlbnRFeHRlbnNpb24pIHtcbiAgICBmdW5jdGlvblN0YWNrLnB1c2gobWF5YmVJbnRlcmVzdGluZyhub2RlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBleGl0RnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb25TdGFjay5wb3AoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRJbnRlcmVzdGluZygpOiAodHlwZW9mIGZ1bmN0aW9uU3RhY2spW251bWJlcl0ge1xuICAgIHJldHVybiBmdW5jdGlvblN0YWNrLmxlbmd0aCA+IDAgPyBmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gOiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9ubHlJbkludGVyZXN0aW5nRnVuY3Rpb248QSBleHRlbmRzIEZ1bmN0aW9uPihmbjogQSk6IEEge1xuICAgIHJldHVybiAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBpZiAoY3VycmVudEludGVyZXN0aW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KSBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHRleHQgd2hhdCB3ZSdyZSBjYWxsaW5nIGFnYWluc3QgYSBzZXQgb2YgZGlzYWxsb3dlZCBlbnRyaWVzXG4gICAqL1xuICBmdW5jdGlvbiBjYWxsRXhwcmVzc2lvbihub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbikge1xuICAgIGNvbnN0IGVzbGludE5vZGUgPSBub2RlIGFzIENhbGxFeHByZXNzaW9uO1xuICAgIGNvbnN0IGNhbGxlZVRleHQgPSBjb250ZXh0LnNvdXJjZUNvZGUuZ2V0VGV4dChlc2xpbnROb2RlLmNhbGxlZSk7XG5cbiAgICBpZiAoRElTQUxMT1dFRF9DQUxMRUVTLmluY2x1ZGVzKGNhbGxlZVRleHQpKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGU6IGVzbGludE5vZGUsXG4gICAgICAgIG1lc3NhZ2VJZDogJ2F2b2lkQ2FsbCcsXG4gICAgICAgIGxvYzogZXNsaW50Tm9kZS5sb2MgPz8geyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNhbGxlZVRleHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgICdGdW5jdGlvbkRlY2xhcmF0aW9uJzogZW50ZXJGdW5jdGlvbiBhcyBhbnksXG4gICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbic6IGVudGVyRnVuY3Rpb24gYXMgYW55LFxuICAgICdGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQnOiBleGl0RnVuY3Rpb24sXG4gICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbjpleGl0JzogZXhpdEZ1bmN0aW9uLFxuICAgICdDYWxsRXhwcmVzc2lvbic6IG9ubHlJbkludGVyZXN0aW5nRnVuY3Rpb24oY2FsbEV4cHJlc3Npb24pIGFzIGFueSxcbiAgfTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@types/node": "^18",
|
|
43
43
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
44
44
|
"@typescript-eslint/parser": "^8",
|
|
45
|
-
"@typescript-eslint/rule-tester": "^8.
|
|
45
|
+
"@typescript-eslint/rule-tester": "^8.53.0",
|
|
46
46
|
"cdklabs-projen-project-types": "^0.3.7",
|
|
47
47
|
"commit-and-tag-version": "^12",
|
|
48
48
|
"constructs": "^10.0.0",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"publishConfig": {
|
|
74
74
|
"access": "public"
|
|
75
75
|
},
|
|
76
|
-
"version": "1.
|
|
76
|
+
"version": "1.5.0",
|
|
77
77
|
"jest": {
|
|
78
78
|
"coverageProvider": "v8",
|
|
79
79
|
"testMatch": [
|