const bypass = [ // function names to avoid logging ]; const collapsed = [ // function names to groupCollapsed ]; module.exports = function(babel) { const { types: t } = babel; const wrapFunctionBody = babel.template(`{ try{ console.group(NAME) BODY } finally { console.groupEnd(); } }`); const wrapFunctionBodyCollapsed = babel.template(`{ try{ console.groupCollapsed(NAME) BODY } finally { console.groupEnd(); } }`); return { visitor: { FunctionDeclaration(path) { if (path.node.id && path.node.id.name) { if (bypass.includes(path.node.id.name)) { return; } if (collapsed.includes(path.node.id.name)) { path.get("body").replaceWith( wrapFunctionBodyCollapsed({ BODY: path.node.body.body, NAME: t.stringLiteral(path.node.id.name) }) ); return; } path.get("body").replaceWith( wrapFunctionBody({ BODY: path.node.body.body, NAME: t.stringLiteral(path.node.id.name) }) ); } } } }; };