← Back to context

Comment by jbmchuck

2 days ago

Should be easily doable with a semgrep rule, e.g.:

    ~> cat semgrep.yaml
    rules:
      - id: no-pattern-matching
        pattern: |
          match ...:
        message: |
          I'm not a fan of the pattern matching in Python
        severity: ERROR
        languages:
          - python

...

    ~> cat test.py
    #!/usr/bin/env python3

    foo = 1
    match foo:
      case 1:
        print("one")

...

    ~> semgrep --config semgrep.yaml test.py   


     no-pattern-matching
          I'm not a fan of the pattern matching in Python
                                                         
            4┆ match foo:
            5┆   case 1:
            6┆     print("one")

(exits non-0)

You need to make that exclude match = ... since match can also be a variable name. This is because people used to write code like match = re.search(...)

  • The existing pattern suggested above, "match ...:", will not match 'match = ...'.

    Presumably the reason the parent comment suggested semgrep, not just a grep, is because they're aware that naive substring matching would be wrong.

    You could use the playground to check your understanding before implying someone is an idiot.

    https://semgrep.dev/playground/new