Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add additional internal pattern combinator #180

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we usually try to indicate when something was introduced, like (* since semgrep 1.49 *)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll put up another PR to add a note.

(* 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.