You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写ast-grep规则处理两类JavaScript require路径重构场景?

ast-grep 规则编写方案(对应两类重构场景)

场景1:替换 ${ROOT}/xxx 为 @/xxx

这个场景需要匹配模板字符串形式的require参数,捕获${ROOT}之后的路径片段,再替换为@开头的路径。

完整规则配置:

id: replace-root-with-alias
language: javascript
pattern: |
  const $var = require(`\${ROOT}$path`)
fix: |
  const $var = require('@$path')
constraints:
  path:
    regex: ^\/.*  # 确保path是以/开头的合法路径片段

规则说明:

  • pattern 中用\${ROOT}匹配模板字符串里的变量(注意转义$),$path捕获${ROOT}之后的路径部分(比如/common)
  • fix 直接将捕获的$path拼接到@后,替换原模板字符串
  • constraints 避免误匹配非路径格式的模板字符串,确保$path是合法的路径开头

场景2:移除路径末尾的 /index.js

这个场景需要匹配以/index.js结尾的require路径(兼容普通字符串和模板字符串),捕获基础路径部分后替换。

完整规则配置:

id: remove-index-js-suffix
language: javascript
pattern: |
  const $var = require(${'$pathSuffix'})
fix: |
  const $var = require('$basePath')
constraints:
  pathSuffix:
    regex: '@\/.*\/index\.js'  # 匹配@开头且以/index.js结尾的路径
transform:
  basePath:
    replace:
      source: $pathSuffix
      regex: '\/index\.js$'
      replacement: ''

规则说明:

  • pattern 里的${'$pathSuffix'}可以同时匹配普通字符串和模板字符串形式的路径参数
  • constraints 限制$pathSuffix必须符合@/xxx/index.js的格式
  • transform 通过正则替换,把$pathSuffix末尾的/index.js剔除,得到纯净的基础路径$basePath

内容的提问来源于stack exchange,提问作者Brenner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:25:07