Skip to content

Commit

Permalink
feat: add additional internal pattern combinator (#180)
Browse files Browse the repository at this point in the history
Allows `semgrep-internal-patterns-anywhere` to appear everywhere
(other than taint) where a `pattern-inside` may appear. See notion for
semantics. Called `anywhere` in the new syntax.

- [x] I ran `make setup && make` to update the generated code after
editing a `.atd` file (TODO: have a CI check)
- [x] I made sure we're still backward compatible with old versions of
the CLI.
For example, the Semgrep backend need to still be able to *consume* data
generated
	  by Semgrep 1.17.0.
See
https://atd.readthedocs.io/en/latest/atdgen-tutorial.html#smooth-protocol-upgrades
  • Loading branch information
kopecs authored Nov 8, 2023
1 parent b0eae2d commit ad4eb72
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 2 deletions.
23 changes: 23 additions & 0 deletions rule_schema_v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ $defs:
- required: [ any ]
- required: [ not ]
- required: [ inside ]
- required: [ anywhere ]
- required: [ taint ]
properties:
pattern:
Expand All @@ -152,6 +153,8 @@ $defs:
$ref: "#/$defs/new-pattern"
inside:
$ref: "#/$defs/new-pattern"
anywhere:
$ref: "#/$defs/new-pattern"
where:
type: array
items:
Expand Down Expand Up @@ -220,6 +223,7 @@ $defs:
- required: [ pattern-either ]
- required: [ pattern-not ]
- required: [ pattern-inside ]
- required: [ semgrep-internal-pattern-anywhere ]
- required: [ pattern-not-inside ]
properties:
pattern:
Expand All @@ -234,6 +238,8 @@ $defs:
$ref: "#/$defs/general-pattern-content"
pattern-inside:
$ref: "#/$defs/general-pattern-content"
semgrep-internal-pattern-anywhere:
$ref: "#/$defs/general-pattern-content"
pattern-not-inside:
$ref: "#/$defs/general-pattern-content"
else:
Expand All @@ -247,6 +253,7 @@ $defs:
- $ref: "#/$defs/pattern-either"
- $ref: "#/$defs/focus-metavariable"
- $ref: "#/$defs/pattern-inside"
- $ref: "#/$defs/semgrep-internal-pattern-anywhere"
- $ref: "#/$defs/pattern-not-inside"
- $ref: "#/$defs/pattern-not"
- $ref: "#/$defs/pattern"
Expand All @@ -266,6 +273,7 @@ $defs:
- $ref: "#/$defs/patterns"
- $ref: "#/$defs/pattern-either"
- $ref: "#/$defs/pattern-inside"
- $ref: "#/$defs/semgrep-internal-pattern-anywhere"
- $ref: "#/$defs/pattern"
- $ref: "#/$defs/pattern-regex"
taint-content:
Expand Down Expand Up @@ -670,6 +678,21 @@ $defs:
required:
- pattern-inside
additionalProperties: false
# EXPERIMENTAL
semgrep-internal-pattern-anywhere:
type: object
properties:
semgrep-internal-pattern-anywhere:
title: >-
Marks this subpattern such that at a containing `patterns` or other
form of conjunction the range is not considered; subpattern matches
are instead combined solely on the basis of metavariables, without
respect to range, and the range of the matching subpattern is
discarded wholly.
$ref: "#/$defs/general-pattern-content"
required:
- semgrep-internal-pattern-anywhere
additionalProperties: false
pattern-not-inside:
type: object
properties:
Expand Down
1 change: 1 addition & 0 deletions semgrep_output_v1.atd
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,7 @@ type matching_operation <ocaml attr="deriving show { with_path = false}"> = [
| And
| Or
| Inside
| Anywhere
(* XPat for eXtended pattern. Can be a spacegrep pattern, a
* regexp pattern, or a proper semgrep pattern.
* see semgrep-core/src/core/XPattern.ml
Expand Down
1 change: 1 addition & 0 deletions semgrep_output_v1.jsonschema

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion semgrep_output_v1.proto

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 20 additions & 1 deletion semgrep_output_v1.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions semgrep_output_v1.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions semgrep_output_v1_j.ml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semgrep_output_v1_j.mli

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit ad4eb72

Please sign in to comment.