Skip to content

Commit ad4eb72

Browse files
authored
feat: add additional internal pattern combinator (#180)
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
1 parent b0eae2d commit ad4eb72

8 files changed

+60
-2
lines changed

rule_schema_v1.yaml

+23
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ $defs:
132132
- required: [ any ]
133133
- required: [ not ]
134134
- required: [ inside ]
135+
- required: [ anywhere ]
135136
- required: [ taint ]
136137
properties:
137138
pattern:
@@ -152,6 +153,8 @@ $defs:
152153
$ref: "#/$defs/new-pattern"
153154
inside:
154155
$ref: "#/$defs/new-pattern"
156+
anywhere:
157+
$ref: "#/$defs/new-pattern"
155158
where:
156159
type: array
157160
items:
@@ -220,6 +223,7 @@ $defs:
220223
- required: [ pattern-either ]
221224
- required: [ pattern-not ]
222225
- required: [ pattern-inside ]
226+
- required: [ semgrep-internal-pattern-anywhere ]
223227
- required: [ pattern-not-inside ]
224228
properties:
225229
pattern:
@@ -234,6 +238,8 @@ $defs:
234238
$ref: "#/$defs/general-pattern-content"
235239
pattern-inside:
236240
$ref: "#/$defs/general-pattern-content"
241+
semgrep-internal-pattern-anywhere:
242+
$ref: "#/$defs/general-pattern-content"
237243
pattern-not-inside:
238244
$ref: "#/$defs/general-pattern-content"
239245
else:
@@ -247,6 +253,7 @@ $defs:
247253
- $ref: "#/$defs/pattern-either"
248254
- $ref: "#/$defs/focus-metavariable"
249255
- $ref: "#/$defs/pattern-inside"
256+
- $ref: "#/$defs/semgrep-internal-pattern-anywhere"
250257
- $ref: "#/$defs/pattern-not-inside"
251258
- $ref: "#/$defs/pattern-not"
252259
- $ref: "#/$defs/pattern"
@@ -266,6 +273,7 @@ $defs:
266273
- $ref: "#/$defs/patterns"
267274
- $ref: "#/$defs/pattern-either"
268275
- $ref: "#/$defs/pattern-inside"
276+
- $ref: "#/$defs/semgrep-internal-pattern-anywhere"
269277
- $ref: "#/$defs/pattern"
270278
- $ref: "#/$defs/pattern-regex"
271279
taint-content:
@@ -670,6 +678,21 @@ $defs:
670678
required:
671679
- pattern-inside
672680
additionalProperties: false
681+
# EXPERIMENTAL
682+
semgrep-internal-pattern-anywhere:
683+
type: object
684+
properties:
685+
semgrep-internal-pattern-anywhere:
686+
title: >-
687+
Marks this subpattern such that at a containing `patterns` or other
688+
form of conjunction the range is not considered; subpattern matches
689+
are instead combined solely on the basis of metavariables, without
690+
respect to range, and the range of the matching subpattern is
691+
discarded wholly.
692+
$ref: "#/$defs/general-pattern-content"
693+
required:
694+
- semgrep-internal-pattern-anywhere
695+
additionalProperties: false
673696
pattern-not-inside:
674697
type: object
675698
properties:

semgrep_output_v1.atd

+1
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,7 @@ type matching_operation <ocaml attr="deriving show { with_path = false}"> = [
685685
| And
686686
| Or
687687
| Inside
688+
| Anywhere
688689
(* XPat for eXtended pattern. Can be a spacegrep pattern, a
689690
* regexp pattern, or a proper semgrep pattern.
690691
* see semgrep-core/src/core/XPattern.ml

semgrep_output_v1.jsonschema

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

semgrep_output_v1.proto

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

semgrep_output_v1.py

+20-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

semgrep_output_v1.ts

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

semgrep_output_v1_j.ml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

semgrep_output_v1_j.mli

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)