From a1b52063454f1043fe88e16f546ff046f62c6279 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Wed, 24 May 2023 22:04:43 -0700 Subject: [PATCH] wip --- aider/repomap.py | 49 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/aider/repomap.py b/aider/repomap.py index c31e17813..c4012f7a8 100644 --- a/aider/repomap.py +++ b/aider/repomap.py @@ -3,13 +3,14 @@ import json import sys import subprocess import tiktoken +from collections import defaultdict -from aider import prompts +from aider import prompts, utils # Global cache for tags TAGS_CACHE = {} -# from aider.dump import dump +from aider.dump import dump def to_tree(tags): @@ -170,6 +171,46 @@ class RepoMap: if __name__ == "__main__": + fnames = sys.argv[1:] + rm = RepoMap() - res = rm.get_tags_map(sys.argv[1:]) - print(res) + # res = rm.get_tags_map(fnames) + # print(res) + + defines = defaultdict(set) + references = defaultdict(set) + + for fname in fnames: + data = rm.run_ctags(fname) + + for tag in data: + ident = tag["name"] + defines[ident].add(fname) + dump("def", fname, ident) + + idents = utils.get_name_identifiers(fname) + for ident in idents: + dump("ref", fname, ident) + references[ident].add(fname) + + idents = set(defines.keys()).intersection(set(references.keys())) + + import graphviz + + dot = graphviz.Digraph() + for fname in fnames: + dot.node(fname) + + for ident in idents: + dump(ident) + for refs in references[ident]: + defs = defines[ident] + if len(defs) != 1: + continue + defs = list(defs)[0] + if refs == defs: + continue + dot.edge(refs, defs, label=ident) + print(f"{refs} -{ident}-> {defs}") + + dot.render("tmp", format="png", view=True)