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

Semgrep:如何用可扩展方式捕获代码中所有多行f-string日志?

用Semgrep批量捕获任意数量的多行f-string日志

问题

代码里有多行拼接的f-string日志,格式示例:

logger.error(
    f'...'
    f'...'
    f'...'
)

这些日志的f-string片段数量不固定(2个及以上),现在靠重复写pattern-either条目逐个匹配不同数量的片段,没法覆盖6个以上的情况,扩展性极差。

解决办法

用Semgrep的重复表达式匹配能力,只需要一条规则就能捕获所有≥2个片段的多行f-string日志,两种写法可选:

写法一:基于AST变量重复匹配

rules:
  - id: multi-line-fstring-log
    pattern: |
      logger.$METHOD(
        $FIRST_FSTR
        $REST_FSTRS
      )
    patterns:
      - pattern: $FIRST_FSTR = f'...'
      - pattern: $REST_FSTRS = (f'...' )+
    message: "发现多行拼接的f-string日志"
    severity: INFO
  • $FIRST_FSTR匹配第一个f-string片段
  • $REST_FSTRS = (f'...' )+匹配后续至少1个片段,组合后总数量≥2,自动覆盖2、3、...N个片段的情况

写法二:结合正则匹配

rules:
  - id: multi-line-fstring-log
    pattern: logger.$METHOD($ARGS)
    pattern-regex: 'f\'.*?\'\s*f\'.*?\''
    pattern-inside: |
      logger.$METHOD(
        ...
      )
    message: "发现多行拼接的f-string日志"
    severity: INFO
  • 先锁定logger.$METHOD(...)的多行调用结构
  • 用正则f\'.*?\'\s*f\'.*?\''匹配至少两个连续的f-string(忽略换行和空格)

两种写法都不用再为每个片段数量单独写规则,直接覆盖所有符合要求的多行f-string日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:45:31