From a12009e66159f614b65e38075323dcdd62728b9c Mon Sep 17 00:00:00 2001 From: Cooper Pierce Date: Fri, 3 Nov 2023 12:56:09 -0700 Subject: [PATCH] Add additional internal pattern combinator Allows `semgrep-internal-patterns-allow-disjoint` to appear everywhere (other than taint) where a `patterns` may appear. See notion for semantics. --- rule_schema_v1.yaml | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/rule_schema_v1.yaml b/rule_schema_v1.yaml index ff892211..82575ac0 100644 --- a/rule_schema_v1.yaml +++ b/rule_schema_v1.yaml @@ -217,6 +217,7 @@ $defs: - required: [ pattern ] - required: [ pattern-regex ] - required: [ patterns ] + - required: [ semgrep-internal-patterns-allow-disjoint ] - required: [ pattern-either ] - required: [ pattern-not ] - required: [ pattern-inside ] @@ -228,6 +229,8 @@ $defs: type: string patterns: $ref: "#/$defs/patterns-content" + semgrep-internal-patterns-allow-disjoint: + $ref: "#/$defs/patterns-content" pattern-either: $ref: "#/$defs/pattern-either-content" pattern-not: @@ -244,6 +247,7 @@ $defs: items: anyOf: - $ref: "#/$defs/patterns" + - $ref: "#/$defs/semgrep-internal-patterns-allow-disjoint" - $ref: "#/$defs/pattern-either" - $ref: "#/$defs/focus-metavariable" - $ref: "#/$defs/pattern-inside" @@ -264,6 +268,7 @@ $defs: items: anyOf: - $ref: "#/$defs/patterns" + - $ref: "#/$defs/semgrep-internal-patterns-allow-disjoint" - $ref: "#/$defs/pattern-either" - $ref: "#/$defs/pattern-inside" - $ref: "#/$defs/pattern" @@ -503,6 +508,8 @@ $defs: type: string patterns: $ref: "#/$defs/patterns-content" + semgrep-internal-patterns-allow-disjoint: + $ref: "#/$defs/patterns-content" pattern-either: $ref: "#/$defs/pattern-either-content" required: @@ -514,6 +521,8 @@ $defs: anyOf: - required: - patterns + - required: + - semgrep-internal-patterns-allow-disjoint - required: - pattern-either - required: @@ -524,6 +533,20 @@ $defs: anyOf: - required: - pattern + - required: + - semgrep-internal-patterns-allow-disjoint + - required: + - pattern-either + - required: + - pattern-regex + - required: + - semgrep-internal-patterns-allow-disjoint + not: + anyOf: + - required: + - pattern + - required: + - patterns - required: - pattern-either - required: @@ -536,6 +559,8 @@ $defs: - pattern - required: - patterns + - required: + - semgrep-internal-patterns-allow-disjoint - required: - pattern-regex - required: @@ -546,6 +571,8 @@ $defs: - pattern - required: - patterns + - required: + - semgrep-internal-patterns-allow-disjoint - required: - pattern-either additionalProperties: false @@ -640,6 +667,18 @@ $defs: required: - patterns additionalProperties: false + # EXPERIMENTAL + semgrep-internal-patterns-allow-disjoint: + type: object + properties: + semgrep-internal-patterns-allow-disjoint: + title: >- + Return finding where all of the nested conditions are true, without + respect to position of subpatterns. + $ref: "#/$defs/patterns-content" + required: + - semgrep-internal-patterns-allow-disjoint + additionalProperties: false pattern-either: type: object properties: @@ -871,6 +910,8 @@ properties: type: string patterns: $ref: "#/$defs/patterns-content" + semgrep-internal-patterns-allow-disjoint: + $ref: "#/$defs/patterns-content" pattern-either: $ref: "#/$defs/pattern-either-content" # EXPERIMENTAL @@ -1041,6 +1082,8 @@ properties: - pattern - required: - patterns + - required: + - semgrep-internal-patterns-allow-disjoint - required: - pattern-either - required: @@ -1051,6 +1094,8 @@ properties: - pattern - required: - patterns + - required: + - semgrep-internal-patterns-allow-disjoint - required: - pattern-either - required: