Beispiel #1
0
 def with_id(self, new_id: str) -> "Rule":
     new_yaml = YamlTree(
         value=YamlMap(dict(self._yaml.value._internal)), span=self._yaml.span
     )
     new_yaml.value[self._yaml.value.key_tree("id")] = YamlTree(
         value=new_id, span=new_yaml.value["id"].span
     )
     return Rule(new_yaml)
Beispiel #2
0
def manual_config(pattern: str, lang: str,
                  replacement: Optional[str]) -> Dict[str, YamlTree]:
    # TODO remove when using sgrep -e ... -l ... instead of this hacked config
    pattern_span = Span.from_string(pattern, filename="CLI Input")
    pattern_tree = YamlTree[str](value=pattern, span=pattern_span)
    error_span = Span.from_string(
        f"Semgrep bug generating manual config {PLEASE_FILE_ISSUE_TEXT}",
        filename=None)
    rules_key = {
        ID_KEY: CLI_RULE_ID,
        "pattern": pattern_tree,
        "message": pattern,
        "languages": [lang],
        "severity": RuleSeverity.ERROR.value,
    }

    if replacement:
        rules_key["fix"] = replacement

    return {
        "manual": YamlTree.wrap(
            {RULES_KEY: [rules_key]},
            span=error_span,
        )
    }
Beispiel #3
0
def manual_config(pattern: str, lang: str) -> Dict[str, YamlTree]:
    # TODO remove when using sgrep -e ... -l ... instead of this hacked config
    pattern_span = Span.from_string(pattern, filename="CLI Input")
    pattern_tree = YamlTree[str](value=pattern, span=pattern_span)
    error_span = parse_yaml_preserve_spans(
        f"Semgrep bug generating manual config {PLEASE_FILE_ISSUE_TEXT}",
        filename=None).span
    return {
        "manual":
        YamlTree.wrap(
            {
                RULES_KEY: [{
                    ID_KEY: "-",
                    "pattern": pattern_tree,
                    "message": pattern,
                    "languages": [lang],
                    "severity": "ERROR",
                }]
            },
            span=error_span,
        )
    }
Beispiel #4
0
 def from_json(cls, rule_json: Dict[str, Any]) -> "Rule":  # type: ignore
     yaml = YamlTree.wrap(rule_json, EmptySpan)
     return cls(yaml)