首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Semgrep:一种捕获多行f-字符串中所有情况的可伸缩方法

Semgrep:一种捕获多行f-字符串中所有情况的可伸缩方法
EN

Stack Overflow用户
提问于 2022-10-16 09:35:26
回答 1查看 34关注 0票数 0

我的代码库中有一些具有多行f-字符串的日志,例如:

代码语言:javascript
复制
...
logger.error(
    f'...'
    f'...'
    f'...'
    f'...'
    f'...'
    f'...'
)

有些只在单独的行上有两个f'...',而另一些只有3个f'...',依此类推。

我目前正在复制模式以捕获这样的日志。例如:

代码语言:javascript
复制
...
patterns:
  - pattern-either:
     - pattern: |
        logger.$METHOD(
          f'...'
          f'...'
          f'...'
         )
     - pattern: |
        logger.$METHOD(
          f'...'
          f'...'
          f'...'
          f'...'
          f'...'
        )

在多行上捕获3和5f'...'的那些。我必须为那些有4,2等等的人写另一个模式。

是否有一种可伸缩的方法来以较少的模式捕获所有这些?当前的实现不会扩展,因为可能有6、7、8、9等多行f字符串的日志。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-21 14:31:50

一个很好的解决方案已经发布了这里和一个现场演示这里

基本上,创建了$X来表示消息,而不是重复行(元数据)。如果消息与'...'不匹配,则将其标记为可疑信息。完整的代码是:

代码语言:javascript
复制
rules:
  - id: test
    patterns:
      - pattern-either:
          - pattern: logger.$METHOD(..., $X, ...)
          - pattern: logger.$METHOD(..., message=$X, ...)
          - pattern: logger.$METHOD(..., msg=$X, ...)
      - metavariable-pattern:
          metavariable: $X
          patterns:
            - pattern-not: |
                "..."
    message: Semgrep found a match $X
    languages:
      - python
    severity: WARNING

所有学分都是lagoAbal的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74086007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档