Skip to content

Commit 2b65e06

Browse files
committed
apply suggestions
1 parent ac35519 commit 2b65e06

6 files changed

+68
-182
lines changed

semgrep_output_v1.atd

+3-6
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ type location
8989
}
9090

9191
(*****************************************************************************)
92-
(* Rules *)
92+
(* Rule id *)
9393
(*****************************************************************************)
9494

9595
(* e.g., "javascript.security.do-not-use-eval" *)
@@ -99,10 +99,7 @@ type rule_id
9999

100100
type rule_id_and_engine_kind
101101
<ocaml attr="deriving show">
102-
<python decorator="dataclass(frozen=True)"> = {
103-
rule_id: rule_id;
104-
engine_kind: engine_kind;
105-
}
102+
<python decorator="dataclass(frozen=True)"> = (rule_id * engine_kind)
106103

107104
(*****************************************************************************)
108105
(* Core Match result *)
@@ -648,7 +645,7 @@ type cli_output_extra <ocaml attr="deriving show"> = {
648645
(* EXPERIMENTAL: since semgrep 0.109? *)
649646
?explanations: matching_explanation list option;
650647

651-
(* since: 1.10.0 *)
648+
(* EXPERIMENTAL: since: 1.11.0 *)
652649
?rules_by_engine: rule_id_and_engine_kind list option;
653650
?engine_requested: engine_kind option;
654651
}

semgrep_output_v1.jsonschema

+7-6
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,13 @@
4949
},
5050
"rule_id": { "type": "string" },
5151
"rule_id_and_engine_kind": {
52-
"type": "object",
53-
"required": [ "rule_id", "engine_kind" ],
54-
"properties": {
55-
"rule_id": { "$ref": "#/definitions/rule_id" },
56-
"engine_kind": { "$ref": "#/definitions/engine_kind" }
57-
}
52+
"type": "array",
53+
"minItems": 2,
54+
"items": false,
55+
"prefixItems": [
56+
{ "$ref": "#/definitions/rule_id" },
57+
{ "$ref": "#/definitions/engine_kind" }
58+
]
5859
},
5960
"engine_kind": { "oneOf": [ { "const": "OSS" }, { "const": "PRO" } ] },
6061
"core_match": {

semgrep_output_v1.py

+4-14
Original file line numberDiff line numberDiff line change
@@ -1828,26 +1828,16 @@ def to_json_string(self, **kw: Any) -> str:
18281828

18291829
@dataclass(frozen=True)
18301830
class RuleIdAndEngineKind:
1831-
"""Original type: rule_id_and_engine_kind = { ... }"""
1831+
"""Original type: rule_id_and_engine_kind"""
18321832

1833-
rule_id: RuleId
1834-
engine_kind: EngineKind
1833+
value: Tuple[RuleId, EngineKind]
18351834

18361835
@classmethod
18371836
def from_json(cls, x: Any) -> 'RuleIdAndEngineKind':
1838-
if isinstance(x, dict):
1839-
return cls(
1840-
rule_id=RuleId.from_json(x['rule_id']) if 'rule_id' in x else _atd_missing_json_field('RuleIdAndEngineKind', 'rule_id'),
1841-
engine_kind=EngineKind.from_json(x['engine_kind']) if 'engine_kind' in x else _atd_missing_json_field('RuleIdAndEngineKind', 'engine_kind'),
1842-
)
1843-
else:
1844-
_atd_bad_json('RuleIdAndEngineKind', x)
1837+
return cls((lambda x: (RuleId.from_json(x[0]), EngineKind.from_json(x[1])) if isinstance(x, list) and len(x) == 2 else _atd_bad_json('array of length 2', x))(x))
18451838

18461839
def to_json(self) -> Any:
1847-
res: Dict[str, Any] = {}
1848-
res['rule_id'] = (lambda x: x.to_json())(self.rule_id)
1849-
res['engine_kind'] = (lambda x: x.to_json())(self.engine_kind)
1850-
return res
1840+
return (lambda x: [(lambda x: x.to_json())(x[0]), (lambda x: x.to_json())(x[1])] if isinstance(x, tuple) and len(x) == 2 else _atd_bad_python('tuple of length 2', x))(self.value)
18511841

18521842
@classmethod
18531843
def from_json_string(cls, x: str) -> 'RuleIdAndEngineKind':

semgrep_output_v1.ts

+3-12
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@ export type Location = {
2626

2727
export type RuleId = string
2828

29-
export type RuleIdAndEngineKind = {
30-
rule_id: RuleId;
31-
engine_kind: EngineKind;
32-
}
29+
export type RuleIdAndEngineKind = [RuleId, EngineKind]
3330

3431
export type EngineKind =
3532
| { kind: 'OSS' }
@@ -455,17 +452,11 @@ export function readRuleId(x: any, context: any = x): RuleId {
455452
}
456453

457454
export function writeRuleIdAndEngineKind(x: RuleIdAndEngineKind, context: any = x): any {
458-
return {
459-
'rule_id': _atd_write_required_field('RuleIdAndEngineKind', 'rule_id', writeRuleId, x.rule_id, x),
460-
'engine_kind': _atd_write_required_field('RuleIdAndEngineKind', 'engine_kind', writeEngineKind, x.engine_kind, x),
461-
};
455+
return ((x, context) => [writeRuleId(x[0], x), writeEngineKind(x[1], x)])(x, context);
462456
}
463457

464458
export function readRuleIdAndEngineKind(x: any, context: any = x): RuleIdAndEngineKind {
465-
return {
466-
rule_id: _atd_read_required_field('RuleIdAndEngineKind', 'rule_id', readRuleId, x['rule_id'], x),
467-
engine_kind: _atd_read_required_field('RuleIdAndEngineKind', 'engine_kind', readEngineKind, x['engine_kind'], x),
468-
};
459+
return ((x, context): [RuleId, EngineKind] => { _atd_check_json_tuple(2, x, context); return [readRuleId(x[0], x), readEngineKind(x[1], x)] })(x, context);
469460
}
470461

471462
export function writeEngineKind(x: EngineKind, context: any = x): any {

semgrep_output_v1_j.ml

+50-140
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,7 @@ type sca_info = Semgrep_output_v1_t.sca_info = {
196196
type rule_id_dict = Semgrep_output_v1_t.rule_id_dict = { id: rule_id }
197197
[@@deriving show]
198198

199-
type rule_id_and_engine_kind = Semgrep_output_v1_t.rule_id_and_engine_kind = {
200-
rule_id: rule_id;
201-
engine_kind: engine_kind
202-
}
199+
type rule_id_and_engine_kind = Semgrep_output_v1_t.rule_id_and_engine_kind
203200
[@@deriving show]
204201

205202
type raw_json = Yojson.Basic.t [@@deriving show]
@@ -6122,29 +6119,21 @@ let read_rule_id_dict = (
61226119
)
61236120
let rule_id_dict_of_string s =
61246121
read_rule_id_dict (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
6125-
let write_rule_id_and_engine_kind : _ -> rule_id_and_engine_kind -> _ = (
6126-
fun ob (x : rule_id_and_engine_kind) ->
6127-
Bi_outbuf.add_char ob '{';
6128-
let is_first = ref true in
6129-
if !is_first then
6130-
is_first := false
6131-
else
6132-
Bi_outbuf.add_char ob ',';
6133-
Bi_outbuf.add_string ob "\"rule_id\":";
6122+
let write_rule_id_and_engine_kind = (
6123+
fun ob x ->
6124+
Bi_outbuf.add_char ob '[';
6125+
(let x, _ = x in
61346126
(
61356127
write_rule_id
6136-
)
6137-
ob x.rule_id;
6138-
if !is_first then
6139-
is_first := false
6140-
else
6141-
Bi_outbuf.add_char ob ',';
6142-
Bi_outbuf.add_string ob "\"engine_kind\":";
6128+
) ob x
6129+
);
6130+
Bi_outbuf.add_char ob ',';
6131+
(let _, x = x in
61436132
(
61446133
write_engine_kind
6145-
)
6146-
ob x.engine_kind;
6147-
Bi_outbuf.add_char ob '}';
6134+
) ob x
6135+
);
6136+
Bi_outbuf.add_char ob ']';
61486137
)
61496138
let string_of_rule_id_and_engine_kind ?(len = 1024) x =
61506139
let ob = Bi_outbuf.create len in
@@ -6153,125 +6142,46 @@ let string_of_rule_id_and_engine_kind ?(len = 1024) x =
61536142
let read_rule_id_and_engine_kind = (
61546143
fun p lb ->
61556144
Yojson.Safe.read_space p lb;
6156-
Yojson.Safe.read_lcurl p lb;
6157-
let field_rule_id = ref (None) in
6158-
let field_engine_kind = ref (None) in
6159-
try
6160-
Yojson.Safe.read_space p lb;
6161-
Yojson.Safe.read_object_end lb;
6162-
Yojson.Safe.read_space p lb;
6163-
let f =
6164-
fun s pos len ->
6165-
if pos < 0 || len < 0 || pos + len > String.length s then
6166-
invalid_arg "out-of-bounds substring position or length";
6167-
match len with
6168-
| 7 -> (
6169-
if String.unsafe_get s pos = 'r' && String.unsafe_get s (pos+1) = 'u' && String.unsafe_get s (pos+2) = 'l' && String.unsafe_get s (pos+3) = 'e' && String.unsafe_get s (pos+4) = '_' && String.unsafe_get s (pos+5) = 'i' && String.unsafe_get s (pos+6) = 'd' then (
6170-
0
6171-
)
6172-
else (
6173-
-1
6174-
)
6175-
)
6176-
| 11 -> (
6177-
if String.unsafe_get s pos = 'e' && String.unsafe_get s (pos+1) = 'n' && String.unsafe_get s (pos+2) = 'g' && String.unsafe_get s (pos+3) = 'i' && String.unsafe_get s (pos+4) = 'n' && String.unsafe_get s (pos+5) = 'e' && String.unsafe_get s (pos+6) = '_' && String.unsafe_get s (pos+7) = 'k' && String.unsafe_get s (pos+8) = 'i' && String.unsafe_get s (pos+9) = 'n' && String.unsafe_get s (pos+10) = 'd' then (
6178-
1
6179-
)
6180-
else (
6181-
-1
6182-
)
6183-
)
6184-
| _ -> (
6185-
-1
6186-
)
6187-
in
6188-
let i = Yojson.Safe.map_ident p f lb in
6189-
Atdgen_runtime.Oj_run.read_until_field_value p lb;
6190-
(
6191-
match i with
6192-
| 0 ->
6193-
field_rule_id := (
6194-
Some (
6195-
(
6196-
read_rule_id
6197-
) p lb
6198-
)
6199-
);
6200-
| 1 ->
6201-
field_engine_kind := (
6202-
Some (
6203-
(
6204-
read_engine_kind
6205-
) p lb
6206-
)
6207-
);
6208-
| _ -> (
6209-
Yojson.Safe.skip_json p lb
6210-
)
6211-
);
6212-
while true do
6213-
Yojson.Safe.read_space p lb;
6214-
Yojson.Safe.read_object_sep p lb;
6145+
let std_tuple = Yojson.Safe.start_any_tuple p lb in
6146+
let len = ref 0 in
6147+
let end_of_tuple = ref false in
6148+
(try
6149+
let x0 =
6150+
let x =
6151+
(
6152+
read_rule_id
6153+
) p lb
6154+
in
6155+
incr len;
62156156
Yojson.Safe.read_space p lb;
6216-
let f =
6217-
fun s pos len ->
6218-
if pos < 0 || len < 0 || pos + len > String.length s then
6219-
invalid_arg "out-of-bounds substring position or length";
6220-
match len with
6221-
| 7 -> (
6222-
if String.unsafe_get s pos = 'r' && String.unsafe_get s (pos+1) = 'u' && String.unsafe_get s (pos+2) = 'l' && String.unsafe_get s (pos+3) = 'e' && String.unsafe_get s (pos+4) = '_' && String.unsafe_get s (pos+5) = 'i' && String.unsafe_get s (pos+6) = 'd' then (
6223-
0
6224-
)
6225-
else (
6226-
-1
6227-
)
6228-
)
6229-
| 11 -> (
6230-
if String.unsafe_get s pos = 'e' && String.unsafe_get s (pos+1) = 'n' && String.unsafe_get s (pos+2) = 'g' && String.unsafe_get s (pos+3) = 'i' && String.unsafe_get s (pos+4) = 'n' && String.unsafe_get s (pos+5) = 'e' && String.unsafe_get s (pos+6) = '_' && String.unsafe_get s (pos+7) = 'k' && String.unsafe_get s (pos+8) = 'i' && String.unsafe_get s (pos+9) = 'n' && String.unsafe_get s (pos+10) = 'd' then (
6231-
1
6232-
)
6233-
else (
6234-
-1
6235-
)
6236-
)
6237-
| _ -> (
6238-
-1
6239-
)
6157+
Yojson.Safe.read_tuple_sep2 p std_tuple lb;
6158+
x
6159+
in
6160+
let x1 =
6161+
let x =
6162+
(
6163+
read_engine_kind
6164+
) p lb
62406165
in
6241-
let i = Yojson.Safe.map_ident p f lb in
6242-
Atdgen_runtime.Oj_run.read_until_field_value p lb;
6243-
(
6244-
match i with
6245-
| 0 ->
6246-
field_rule_id := (
6247-
Some (
6248-
(
6249-
read_rule_id
6250-
) p lb
6251-
)
6252-
);
6253-
| 1 ->
6254-
field_engine_kind := (
6255-
Some (
6256-
(
6257-
read_engine_kind
6258-
) p lb
6259-
)
6260-
);
6261-
| _ -> (
6262-
Yojson.Safe.skip_json p lb
6263-
)
6264-
);
6265-
done;
6266-
assert false;
6267-
with Yojson.End_of_object -> (
6268-
(
6269-
{
6270-
rule_id = (match !field_rule_id with Some x -> x | None -> Atdgen_runtime.Oj_run.missing_field p "rule_id");
6271-
engine_kind = (match !field_engine_kind with Some x -> x | None -> Atdgen_runtime.Oj_run.missing_field p "engine_kind");
6272-
}
6273-
: rule_id_and_engine_kind)
6274-
)
6166+
incr len;
6167+
(try
6168+
Yojson.Safe.read_space p lb;
6169+
Yojson.Safe.read_tuple_sep2 p std_tuple lb;
6170+
with Yojson.End_of_tuple -> end_of_tuple := true);
6171+
x
6172+
in
6173+
if not !end_of_tuple then (
6174+
try
6175+
while true do
6176+
Yojson.Safe.skip_json p lb;
6177+
Yojson.Safe.read_space p lb;
6178+
Yojson.Safe.read_tuple_sep2 p std_tuple lb;
6179+
done
6180+
with Yojson.End_of_tuple -> ()
6181+
);
6182+
(x0, x1)
6183+
with Yojson.End_of_tuple ->
6184+
Atdgen_runtime.Oj_run.missing_tuple_fields p !len [ 0; 1 ]);
62756185
)
62766186
let rule_id_and_engine_kind_of_string s =
62776187
read_rule_id_and_engine_kind (Yojson.Safe.init_lexer ()) (Lexing.from_string s)

semgrep_output_v1_j.mli

+1-4
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,7 @@ type sca_info = Semgrep_output_v1_t.sca_info = {
196196
type rule_id_dict = Semgrep_output_v1_t.rule_id_dict = { id: rule_id }
197197
[@@deriving show]
198198

199-
type rule_id_and_engine_kind = Semgrep_output_v1_t.rule_id_and_engine_kind = {
200-
rule_id: rule_id;
201-
engine_kind: engine_kind
202-
}
199+
type rule_id_and_engine_kind = Semgrep_output_v1_t.rule_id_and_engine_kind
203200
[@@deriving show]
204201

205202
type raw_json = Yojson.Basic.t [@@deriving show]

0 commit comments

Comments
 (0)