[AST Babel] Add function name into the console log 'path.findParent(t.isFunctionDeclaration)'
Continue with the previous post: https://www.cnblogs.com/Answer1215/p/12337243.html
What we want to do in this post, is adding parent function name into the console log as well:
Previous output is :
function add(a, b) { console.log("2:4", a, b) return a + b } function subtract(a, b) { console.log("7:4", a, b) return a - b } add(1, 2) subtract(2, 1) console.log("13:0", 'sup dawg')
Now we want:
function add(a, b) { console.log("add 2:4", a, b) return a + b } function subtract(a, b) { console.log("subtract 7:4", a, b) return a - b } add(1, 2) subtract(2, 1) console.log("13:0", 'sup dawg')
The key is using
path.findParent()
+
t.isFunctionDeclaration
To find its parent function.
Code:
export default function (babel) { const { types: t } = babel; return { name: "ast-transform", // not required visitor: { CallExpression(path) { if (!looksLike(path.node, { callee: { type: 'MemberExpression', object: { name: 'console' }, property: { name: 'log' } } })) { return } const parentFn = path.findParent(t.isFunctionDeclaration); const fnName = parentFn? `${parentFn.node.id.name} `: ''; // insert string into console.log('instread here', a,b) const {line, column} = path.node.loc.start; const prefix = fnName + `${line}:${column}`; path.node.arguments.unshift(t.stringLiteral(prefix)) } } }; } function looksLike(a, b) { return ( a && b && Object.keys(b).every(bKey => { const bVal = b[bKey] const aVal = a[bKey] if (typeof bVal === 'function') { return bVal(aVal) } return isPrimitive(bVal) ? bVal === aVal : looksLike(aVal, bVal) }) ) } function isPrimitive(val) { return val == null || /^[sbn]/.test(typeof val) }
分类:
Tools
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-02-21 [React] Safely setState on a Mounted React Component through the useEffect Hook
2018-02-21 [CSS3] All abourt responsive image
2018-02-21 [React] Work with HTML Canvas in React
2017-02-21 [HTML5] Using the tabindex attribute for keyboard accessibility
2016-02-21 [Immutable.js] Differences between the Immutable.js Map() and List()
2016-02-21 [Immutable.js] Using fromJS() to Convert Plain JavaScript Objects into Immutable Data