const print_fns = [ "jsTestLog", "jsTest.log", "jsTest.log.info", "jsTest.log.debug", "jsTest.log.warning", "jsTest.log.error", "print", ]; function flattenMemberExpressionName(expr) { if (expr.object.type == "MemberExpression") { return flattenMemberExpressionName(expr.object) + "." + expr.property.name; } else if (expr.object.type == "Identifier") { return expr.object.name + "." + expr.property.name; } else { return ""; } } export default { meta: { type: "problem", docs: { description: "Ensure no calls like print(tojson(x))", }, fixable: "code", }, create(context) { return { CallExpression: function (node) { if (node.callee.type == "MemberExpression") { node.callee.name = flattenMemberExpressionName(node.callee); } else if (node.callee.type != "Identifier") return; if (print_fns.every((name) => name != node.callee.name)) return; node.arguments.forEach((arg) => { if (arg.type != "CallExpression") return; if (arg.callee.type != "Identifier") return; if (arg.callee.name != "tojson" && arg.callee.name != "tojsononeline") return; context.report({ node, message: `Calling ${arg.callee.name}() as a parameter of ${ node.callee.name }(). Consider using toJsonForLog() instead or disable this rule by adding '// eslint-disable-next-line mongodb/no-printing-tojson'`, fix(fixer) { return fixer.replaceTextRange([arg.callee.start, arg.callee.end], "toJsonForLog"); }, }); }); }, }; }, };