From 9d20cd6304af6738b49a091450ff9da7e55e1372 Mon Sep 17 00:00:00 2001 From: Michael Hohn Date: Fri, 24 Oct 2025 10:57:54 -0700 Subject: [PATCH] whole-file sarif-size --- bin/sarif-size | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 bin/sarif-size diff --git a/bin/sarif-size b/bin/sarif-size new file mode 100755 index 0000000..9f606b1 --- /dev/null +++ b/bin/sarif-size @@ -0,0 +1,36 @@ +#!/usr/bin/env python +import orjson +import sys + +def sizeof(x): + t = type(x) + if t is dict: + return sum(len(k) + sizeof(v) for k, v in x.items()) + if t is list: + return sum(sizeof(v) for v in x) + if t is str: + return len(x) + return 8 # numbers, bools, null + +def walk(x, path="root"): + if isinstance(x, dict): + yield path, sizeof(x) + for k,v in x.items(): + yield from walk(v, f"{path}.{k}") + elif isinstance(x, list): + yield path, sizeof(x) + for i,v in enumerate(x): + yield from walk(v, f"{path}[{i}]") + +# with open(sys.stdin, 'rb') as f: +# data_bytes = f.read() + +data_bytes = sys.stdin.buffer.read() + +parsed_data = orjson.loads(data_bytes) + +sizes = sorted(walk(parsed_data), key=lambda kv: kv[1], reverse=True) +for p, s in sizes[:50]: + print(f"{s:10d} {p}") + +