Skip to content

Commit e72475f

Browse files
committed
feat: add 24 semantic edge builders with tests and xfail support
1 parent 4def8f6 commit e72475f

File tree

112 files changed

+26672
-8
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+26672
-8
lines changed

src/treemapper/diffctx/config/weights.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,82 @@ class EdgeWeightConfig:
6767
"swift_type": EdgeWeightConfig(0.60, 0.40),
6868
"swift_func": EdgeWeightConfig(0.55, 0.40),
6969
"swift_same_module": EdgeWeightConfig(0.45, 0.40),
70+
"zig_import": EdgeWeightConfig(0.65, 0.40),
71+
"zig_type": EdgeWeightConfig(0.60, 0.40),
72+
"zig_fn": EdgeWeightConfig(0.55, 0.40),
73+
"haskell_import": EdgeWeightConfig(0.70, 0.40),
74+
"haskell_type": EdgeWeightConfig(0.65, 0.40),
75+
"haskell_fn": EdgeWeightConfig(0.60, 0.40),
76+
"haskell_instance": EdgeWeightConfig(0.55, 0.40),
77+
"clojure_require": EdgeWeightConfig(0.65, 0.40),
78+
"clojure_fn": EdgeWeightConfig(0.60, 0.40),
79+
"clojure_protocol": EdgeWeightConfig(0.55, 0.40),
80+
"proto_import": EdgeWeightConfig(0.65, 0.40),
81+
"proto_message_ref": EdgeWeightConfig(0.60, 0.40),
82+
"proto_service_rpc": EdgeWeightConfig(0.55, 0.40),
83+
"graphql_import": EdgeWeightConfig(0.60, 0.40),
84+
"graphql_type_ref": EdgeWeightConfig(0.65, 0.40),
85+
"graphql_extend": EdgeWeightConfig(0.55, 0.40),
86+
"sql_fk": EdgeWeightConfig(0.70, 0.40),
87+
"sql_table_ref": EdgeWeightConfig(0.60, 0.40),
88+
"sql_view_source": EdgeWeightConfig(0.65, 0.40),
89+
"sql_migration": EdgeWeightConfig(0.55, 0.40),
90+
"css_import": EdgeWeightConfig(0.55, 0.40),
91+
"lua_require": EdgeWeightConfig(0.65, 0.40),
92+
"lua_fn": EdgeWeightConfig(0.55, 0.40),
93+
"lua_method": EdgeWeightConfig(0.50, 0.40),
94+
"openapi_internal_ref": EdgeWeightConfig(0.65, 0.40),
95+
"openapi_external_ref": EdgeWeightConfig(0.60, 0.40),
96+
"openapi_schema_ref": EdgeWeightConfig(0.55, 0.40),
97+
"erlang_include": EdgeWeightConfig(0.65, 0.40),
98+
"erlang_behaviour": EdgeWeightConfig(0.60, 0.40),
99+
"erlang_call": EdgeWeightConfig(0.55, 0.40),
100+
"elixir_use": EdgeWeightConfig(0.65, 0.40),
101+
"elixir_alias": EdgeWeightConfig(0.60, 0.40),
102+
"elixir_behaviour": EdgeWeightConfig(0.55, 0.40),
103+
"elixir_fn": EdgeWeightConfig(0.50, 0.40),
104+
"dart_import": EdgeWeightConfig(0.65, 0.40),
105+
"dart_export": EdgeWeightConfig(0.60, 0.40),
106+
"dart_type": EdgeWeightConfig(0.60, 0.40),
107+
"dart_fn": EdgeWeightConfig(0.55, 0.40),
108+
"dart_inheritance": EdgeWeightConfig(0.70, 0.40),
109+
"cargo_workspace": EdgeWeightConfig(0.60, 0.40),
110+
"cargo_path_dep": EdgeWeightConfig(0.65, 0.40),
111+
"cargo_entry_point": EdgeWeightConfig(0.55, 0.40),
112+
"ocaml_open": EdgeWeightConfig(0.65, 0.40),
113+
"ocaml_type": EdgeWeightConfig(0.60, 0.40),
114+
"ocaml_fn": EdgeWeightConfig(0.55, 0.40),
115+
"ocaml_module_ref": EdgeWeightConfig(0.60, 0.40),
116+
"r_source": EdgeWeightConfig(0.60, 0.40),
117+
"r_library": EdgeWeightConfig(0.55, 0.40),
118+
"r_fn": EdgeWeightConfig(0.50, 0.40),
119+
"r_s4": EdgeWeightConfig(0.55, 0.40),
120+
"perl_use": EdgeWeightConfig(0.65, 0.40),
121+
"perl_require": EdgeWeightConfig(0.60, 0.40),
122+
"perl_fn": EdgeWeightConfig(0.55, 0.40),
123+
"perl_method": EdgeWeightConfig(0.50, 0.40),
124+
"perl_inheritance": EdgeWeightConfig(0.65, 0.40),
125+
"nim_import": EdgeWeightConfig(0.65, 0.40),
126+
"nim_type": EdgeWeightConfig(0.60, 0.40),
127+
"nim_fn": EdgeWeightConfig(0.55, 0.40),
128+
"julia_using": EdgeWeightConfig(0.65, 0.40),
129+
"julia_include": EdgeWeightConfig(0.60, 0.40),
130+
"julia_type": EdgeWeightConfig(0.60, 0.40),
131+
"julia_fn": EdgeWeightConfig(0.55, 0.40),
132+
"ansible_include": EdgeWeightConfig(0.60, 0.40),
133+
"ansible_role": EdgeWeightConfig(0.55, 0.40),
134+
"bazel_deps": EdgeWeightConfig(0.65, 0.40),
135+
"bazel_load": EdgeWeightConfig(0.60, 0.40),
136+
"bazel_srcs": EdgeWeightConfig(0.55, 0.40),
137+
"nix_import": EdgeWeightConfig(0.60, 0.40),
138+
"dbt_ref": EdgeWeightConfig(0.65, 0.40),
139+
"dbt_source": EdgeWeightConfig(0.60, 0.40),
140+
"dbt_macro": EdgeWeightConfig(0.55, 0.40),
141+
"latex_input": EdgeWeightConfig(0.65, 0.40),
142+
"latex_package": EdgeWeightConfig(0.55, 0.40),
143+
"latex_bib": EdgeWeightConfig(0.55, 0.40),
144+
"prisma_schema": EdgeWeightConfig(0.65, 0.40),
145+
"prisma_client": EdgeWeightConfig(0.55, 0.40),
70146
}
71147

72148

src/treemapper/diffctx/edges/base.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,25 @@ def add_edges_from_ids(
209209
if fid != source_id:
210210
self.add_edge(edges, source_id, fid, weight)
211211

212+
def link_by_name_or_path(
213+
self,
214+
src_id: FragmentId,
215+
ref: str,
216+
idx: FragmentIndex,
217+
edges: EdgeDict,
218+
weight: float | None = None,
219+
filename: str | None = None,
220+
) -> None:
221+
w = weight if weight is not None else self.weight
222+
target = filename if filename is not None else ref.split("/")[-1].lower()
223+
for name, frag_ids in idx.by_name.items():
224+
if name == target:
225+
for fid in frag_ids:
226+
if fid != src_id:
227+
self.add_edge(edges, src_id, fid, w)
228+
return
229+
self.link_by_path_match(src_id, ref, idx, edges, w)
230+
212231
def link_by_path_match(
213232
self,
214233
src_id: FragmentId,
Lines changed: 76 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,117 @@
11
from __future__ import annotations
22

3+
from .ansible import AnsibleEdgeBuilder
4+
from .bazel import BazelEdgeBuilder
35
from .c_family import CFamilyEdgeBuilder
6+
from .cargo import CargoEdgeBuilder
7+
from .clojure import ClojureEdgeBuilder
8+
from .css import CssEdgeBuilder
9+
from .dart import DartEdgeBuilder
10+
from .dbt import DbtEdgeBuilder
411
from .dotnet import DotNetEdgeBuilder
12+
from .elixir import ElixirEdgeBuilder
13+
from .erlang import ErlangEdgeBuilder
514
from .go import GoEdgeBuilder
15+
from .graphql import GraphqlEdgeBuilder
16+
from .haskell import HaskellEdgeBuilder
617
from .javascript import JavaScriptEdgeBuilder
18+
from .julia import JuliaEdgeBuilder
719
from .jvm import JVMEdgeBuilder
20+
from .latex import LatexEdgeBuilder
21+
from .lua import LuaEdgeBuilder
22+
from .nim import NimEdgeBuilder
23+
from .nix import NixEdgeBuilder
24+
from .ocaml import OCamlEdgeBuilder
25+
from .openapi import OpenapiEdgeBuilder
26+
from .perl import PerlEdgeBuilder
827
from .php import PHPEdgeBuilder
28+
from .prisma import PrismaEdgeBuilder
29+
from .protobuf import ProtobufEdgeBuilder
930
from .python import PythonEdgeBuilder
31+
from .r_lang import RLangEdgeBuilder
1032
from .ruby import RubyEdgeBuilder
1133
from .rust import RustEdgeBuilder
1234
from .shell import ShellEdgeBuilder
35+
from .sql import SqlEdgeBuilder
1336
from .swift import SwiftEdgeBuilder
37+
from .zig import ZigEdgeBuilder
1438

1539

1640
def get_semantic_builders() -> list[type]:
1741
return [
42+
AnsibleEdgeBuilder,
43+
BazelEdgeBuilder,
1844
CFamilyEdgeBuilder,
45+
CargoEdgeBuilder,
46+
ClojureEdgeBuilder,
47+
CssEdgeBuilder,
48+
DartEdgeBuilder,
49+
DbtEdgeBuilder,
50+
DotNetEdgeBuilder,
51+
ElixirEdgeBuilder,
52+
ErlangEdgeBuilder,
1953
GoEdgeBuilder,
20-
RustEdgeBuilder,
54+
GraphqlEdgeBuilder,
55+
HaskellEdgeBuilder,
56+
JavaScriptEdgeBuilder,
57+
JuliaEdgeBuilder,
2158
JVMEdgeBuilder,
22-
DotNetEdgeBuilder,
23-
RubyEdgeBuilder,
59+
LatexEdgeBuilder,
60+
LuaEdgeBuilder,
61+
NimEdgeBuilder,
62+
NixEdgeBuilder,
63+
OCamlEdgeBuilder,
64+
OpenapiEdgeBuilder,
65+
PerlEdgeBuilder,
2466
PHPEdgeBuilder,
67+
PrismaEdgeBuilder,
68+
ProtobufEdgeBuilder,
2569
PythonEdgeBuilder,
26-
JavaScriptEdgeBuilder,
70+
RLangEdgeBuilder,
71+
RubyEdgeBuilder,
72+
RustEdgeBuilder,
2773
ShellEdgeBuilder,
74+
SqlEdgeBuilder,
2875
SwiftEdgeBuilder,
76+
ZigEdgeBuilder,
2977
]
3078

3179

3280
__all__ = [
81+
"AnsibleEdgeBuilder",
82+
"BazelEdgeBuilder",
3383
"CFamilyEdgeBuilder",
84+
"CargoEdgeBuilder",
85+
"ClojureEdgeBuilder",
86+
"CssEdgeBuilder",
87+
"DartEdgeBuilder",
88+
"DbtEdgeBuilder",
3489
"DotNetEdgeBuilder",
90+
"ElixirEdgeBuilder",
91+
"ErlangEdgeBuilder",
3592
"GoEdgeBuilder",
93+
"GraphqlEdgeBuilder",
94+
"HaskellEdgeBuilder",
3695
"JVMEdgeBuilder",
3796
"JavaScriptEdgeBuilder",
97+
"JuliaEdgeBuilder",
98+
"LatexEdgeBuilder",
99+
"LuaEdgeBuilder",
100+
"NimEdgeBuilder",
101+
"NixEdgeBuilder",
102+
"OCamlEdgeBuilder",
103+
"OpenapiEdgeBuilder",
38104
"PHPEdgeBuilder",
105+
"PerlEdgeBuilder",
106+
"PrismaEdgeBuilder",
107+
"ProtobufEdgeBuilder",
39108
"PythonEdgeBuilder",
109+
"RLangEdgeBuilder",
40110
"RubyEdgeBuilder",
41111
"RustEdgeBuilder",
42112
"ShellEdgeBuilder",
113+
"SqlEdgeBuilder",
43114
"SwiftEdgeBuilder",
115+
"ZigEdgeBuilder",
44116
"get_semantic_builders",
45117
]

0 commit comments

Comments
 (0)