Skip to content

Instantly share code, notes, and snippets.

@jubnzv
Created April 23, 2026 07:13
Show Gist options
  • Select an option

  • Save jubnzv/10649e33865430d88de8eaa91fa50e9e to your computer and use it in GitHub Desktop.

Select an option

Save jubnzv/10649e33865430d88de8eaa91fa50e9e to your computer and use it in GitHub Desktop.
Script to rename identifiers in Solidity corpus: https://nowarp.io/blog/compiler-testing-part-1
#!/usr/bin/env python3
import sys
from pathlib import Path
from tree_sitter import Language, Parser
import tree_sitter_solidity
SOL = Language(tree_sitter_solidity.language())
def rename(src: bytes) -> bytes:
parser = Parser(SOL)
tree = parser.parse(src)
spots = []
def walk(node):
if node.type == "identifier":
spots.append((node.start_byte, node.end_byte))
for c in node.children:
walk(c)
walk(tree.root_node)
mapping = {}
for s, e in spots:
name = bytes(src[s:e])
if name not in mapping:
mapping[name] = f"v{len(mapping)}".encode()
out = bytearray(src)
for s, e in sorted(spots, key=lambda x: x[0], reverse=True):
out[s:e] = mapping[bytes(src[s:e])]
return bytes(out)
def main():
src_dir, dst_dir = Path(sys.argv[1]), Path(sys.argv[2])
dst_dir.mkdir(parents=True, exist_ok=True)
for p in sorted(src_dir.iterdir()):
if not p.is_file():
continue
data = p.read_bytes()
try:
(dst_dir / p.name).write_bytes(rename(data))
except Exception as ex:
print(f"skip {p.name}: {ex}", file=sys.stderr)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment