Skip to content

Commit 1a085d2

Browse files
authored
Rename CodebaseGraph to CodebaseContext (#405)
`CodebaseGraph` is misleading and has been a deprecated term since the Codebase Initialization Refactor.
1 parent 1a5d9ed commit 1a085d2

File tree

228 files changed

+1422
-1314
lines changed

Some content is hidden

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

228 files changed

+1422
-1314
lines changed

src/codegen/runner/diff/get_raw_diff.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def patch_to_limited_diff_string(patch, codebase: Codebase, max_lines=10000):
2727

2828
# Add flags that are not in the diff
2929
filenames = [patched_file.path for patched_file in patch]
30-
flags_not_in_diff = list(filter(lambda flag: flag.symbol.filepath not in filenames, codebase.G.flags._flags))
30+
flags_not_in_diff = list(filter(lambda flag: flag.symbol.filepath not in filenames, codebase.ctx.flags._flags))
3131

3232
for flag in flags_not_in_diff:
3333
filename = flag.symbol.filepath
@@ -39,7 +39,7 @@ def patch_to_limited_diff_string(patch, codebase: Codebase, max_lines=10000):
3939
patch.append(patched_file)
4040

4141
for patched_file in patch:
42-
filtered_flags = filter(lambda flag: flag.symbol.filepath == patched_file.path, codebase.G.flags._flags)
42+
filtered_flags = filter(lambda flag: flag.symbol.filepath == patched_file.path, codebase.ctx.flags._flags)
4343
sorted_flags = list(map(lambda flag: flag.symbol.start_point.row + 1, filtered_flags))
4444
sorted_flags.sort()
4545

src/codegen/runner/sandbox/executor.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ async def find_flags(self, execute_func: Callable) -> list[CodeFlag]:
3636
"""Runs the execute_func in find_mode to find flags"""
3737
self.codebase.set_find_mode(True)
3838
await self._execute_with_try_catch(execute_func, commit=False)
39-
code_flags = self.codebase.G.flags._flags
40-
logger.info(f"> Found {len(self.codebase.G.flags._flags)} CodeFlags")
39+
code_flags = self.codebase.ctx.flags._flags
40+
logger.info(f"> Found {len(self.codebase.ctx.flags._flags)} CodeFlags")
4141
return code_flags
4242

4343
async def find_flag_groups(self, code_flags: list[CodeFlag], grouping_config: GroupingConfig) -> list[Group]:
@@ -77,7 +77,7 @@ async def execute_flag_groups(self, commit_msg: str, execute_func: Callable, fla
7777
run_results.append(run_result)
7878
head_branches.append(created_branch)
7979

80-
self.codebase.G.flags._flags.clear()
80+
self.codebase.ctx.flags._flags.clear()
8181
return run_results, head_branches
8282

8383
async def execute(self, execute_func: Callable, group: Group | None = None, session_options: SessionOptions = SessionOptions()) -> CodemodRunResult:
@@ -155,7 +155,7 @@ async def _get_structured_run_output(self, result: CodemodRunResult) -> CodemodR
155155
"messageType": str(flag.message_type),
156156
"messageRecipient": flag.message_recipient,
157157
}
158-
for flag in self.codebase.G.flags._flags
158+
for flag in self.codebase.ctx.flags._flags
159159
]
160160
result.flags = flags
161161
if result.observation_meta is None:

src/codegen/runner/sandbox/middlewares.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,6 @@ async def cleanup_after_codemod(self, is_exception: bool = False):
6969
if is_exception:
7070
# TODO: instead of committing transactions, we should just rollback
7171
logger.info("Committing pending transactions due to exception")
72-
self.runner.codebase.G.commit_transactions(sync_graph=False)
72+
self.runner.codebase.ctx.commit_transactions(sync_graph=False)
7373
self.runner.reset_runner()
7474
self.server_info.is_running_codemod = False

src/codegen/runner/sandbox/runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,5 +112,5 @@ async def create_branch(self, request: CreateBranchRequest) -> CreateBranchRespo
112112
response.results = run_results
113113
response.branches = branches
114114

115-
self.codebase.G.flags._flags.clear()
115+
self.codebase.ctx.flags._flags.clear()
116116
return response

src/codegen/sdk/code_generation/doc_utils/generate_docs_json.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from codegen.sdk.core.placeholder.placeholder_type import TypePlaceholder
99

1010
ATTRIBUTES_TO_IGNORE = [
11-
"G",
11+
"ctx",
1212
"node_id",
1313
"angular",
1414
"model_config",
@@ -19,7 +19,6 @@
1919
"node_type",
2020
"ts_node",
2121
"file_node_id",
22-
"G",
2322
"statement_type",
2423
"assignment_types",
2524
]

src/codegen/sdk/codebase/codebase_analysis.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010

1111
def get_codebase_summary(codebase: Codebase) -> str:
12-
node_summary = f"""Contains {len(codebase.G.get_nodes())} nodes
12+
node_summary = f"""Contains {len(codebase.ctx.get_nodes())} nodes
1313
- {len(list(codebase.files))} files
1414
- {len(list(codebase.imports))} imports
1515
- {len(list(codebase.external_modules))} external_modules
@@ -19,10 +19,10 @@ def get_codebase_summary(codebase: Codebase) -> str:
1919
\t- {len(list(codebase.global_vars))} global_vars
2020
\t- {len(list(codebase.interfaces))} interfaces
2121
"""
22-
edge_summary = f"""Contains {len(codebase.G.edges)} edges
23-
- {len([x for x in codebase.G.edges if x[2].type == EdgeType.SYMBOL_USAGE])} symbol -> used symbol
24-
- {len([x for x in codebase.G.edges if x[2].type == EdgeType.IMPORT_SYMBOL_RESOLUTION])} import -> used symbol
25-
- {len([x for x in codebase.G.edges if x[2].type == EdgeType.EXPORT])} export -> exported symbol
22+
edge_summary = f"""Contains {len(codebase.ctx.edges)} edges
23+
- {len([x for x in codebase.ctx.edges if x[2].type == EdgeType.SYMBOL_USAGE])} symbol -> used symbol
24+
- {len([x for x in codebase.ctx.edges if x[2].type == EdgeType.IMPORT_SYMBOL_RESOLUTION])} import -> used symbol
25+
- {len([x for x in codebase.ctx.edges if x[2].type == EdgeType.EXPORT])} export -> exported symbol
2626
"""
2727

2828
return f"{node_summary}\n{edge_summary}"

src/codegen/sdk/codebase/codebase_graph.py renamed to src/codegen/sdk/codebase/codebase_context.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def get_node_classes(programming_language: ProgrammingLanguage) -> NodeClasses:
7676
raise ValueError(msg)
7777

7878

79-
class CodebaseGraph:
79+
class CodebaseContext:
8080
"""MultiDiGraph Wrapper with TransactionManager"""
8181

8282
# =====[ __init__ attributes ]=====

src/codegen/sdk/codebase/config_parser.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44
from codegen.sdk.enums import ProgrammingLanguage
55

66
if TYPE_CHECKING:
7-
from codegen.sdk.codebase.codebase_graph import CodebaseGraph
7+
from codegen.sdk.codebase.codebase_context import CodebaseContext
88

99

1010
class ConfigParser(ABC):
1111
def __init__(self):
1212
pass
1313

1414
@abstractmethod
15-
def parse_configs(self, codebase_graph: "CodebaseGraph"): ...
15+
def parse_configs(self, codebase_context: "CodebaseContext"): ...
1616

1717

18-
def get_config_parser_for_language(language: ProgrammingLanguage, codebase_graph: "CodebaseGraph") -> ConfigParser | None:
18+
def get_config_parser_for_language(language: ProgrammingLanguage, codebase_context: "CodebaseContext") -> ConfigParser | None:
1919
from codegen.sdk.typescript.config_parser import TSConfigParser
2020

2121
if language == ProgrammingLanguage.TYPESCRIPT:
22-
return TSConfigParser(codebase_graph)
22+
return TSConfigParser(codebase_context)
2323

2424
return None

src/codegen/sdk/codebase/factory/get_session.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from codegen.git.repo_operator.local_repo_operator import LocalRepoOperator
88
from codegen.git.schemas.repo_config import BaseRepoConfig
9-
from codegen.sdk.codebase.codebase_graph import CodebaseGraph
9+
from codegen.sdk.codebase.codebase_context import CodebaseContext
1010
from codegen.sdk.codebase.config import CodebaseConfig, GSFeatureFlags, ProjectConfig, SessionOptions, TestFlags
1111
from codegen.sdk.codebase.factory.codebase_factory import CodebaseFactory
1212
from codegen.sdk.core.codebase import Codebase, PyCodebaseType, TSCodebaseType
@@ -108,12 +108,12 @@ def get_codebase_graph_session(
108108
files: dict[str, str] = {},
109109
sync_graph: bool = True,
110110
session_options: SessionOptions = SessionOptions(),
111-
) -> Generator[CodebaseGraph, None, None]:
111+
) -> Generator[CodebaseContext, None, None]:
112112
"""Gives you a Codebase2 operating on the files you provided as a dict"""
113113
op = LocalRepoOperator.create_from_files(repo_path=tmpdir, files=files)
114114
config = CodebaseConfig(feature_flags=TestFlags)
115115
projects = [ProjectConfig(repo_operator=op, programming_language=programming_language)]
116-
graph = CodebaseGraph(projects=projects, config=config)
116+
graph = CodebaseContext(projects=projects, config=config)
117117
with graph.session(sync_graph=sync_graph, session_options=session_options):
118118
try:
119119
yield graph

src/codegen/sdk/codebase/node_classes/py_node_classes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
from codegen.sdk.python.statements.import_statement import PyImportStatement
3232

3333

34-
def parse_subscript(node: TSNode, file_node_id, G, parent):
34+
def parse_subscript(node: TSNode, file_node_id, ctx, parent):
3535
if (node.prev_named_sibling and node.prev_named_sibling.text.decode("utf-8") == "TypeAlias") or isinstance(parent, Type):
36-
return PyGenericType(node, file_node_id, G, parent)
37-
return SubscriptExpression(node, file_node_id, G, parent)
36+
return PyGenericType(node, file_node_id, ctx, parent)
37+
return SubscriptExpression(node, file_node_id, ctx, parent)
3838

3939

4040
PyExpressionMap = {

src/codegen/sdk/codebase/range_index.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def nodes(self) -> list[Editable]:
4343
def children(self) -> dict[Editable, list[Editable]]:
4444
ret = defaultdict(list)
4545
for node in self.nodes:
46-
# if node.G.config.feature_flags.debug:
46+
# if node.ctx.config.feature_flags.debug:
4747
# assert node.parent != node, node.__class__
4848
if node.parent != node:
4949
ret[node.parent].append(node)

src/codegen/sdk/codebase/transactions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ def __init__(
262262
priority: int = 0,
263263
) -> None:
264264
super().__init__(0, 0, file.path, priority=priority, new_content=new_file_path)
265-
self.new_file_path = file.G.to_absolute(new_file_path)
265+
self.new_file_path = file.ctx.to_absolute(new_file_path)
266266
self.file = file
267267

268268
def execute(self) -> None:

src/codegen/sdk/codebase/validation.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ class PostInitValidationStatus(StrEnum):
3030

3131
def post_init_validation(codebase: CodebaseType) -> PostInitValidationStatus:
3232
"""Post codebase._init_graph verifies that the built graph is valid."""
33-
from codegen.sdk.codebase.codebase_graph import GLOBAL_FILE_IGNORE_LIST
33+
from codegen.sdk.codebase.codebase_context import GLOBAL_FILE_IGNORE_LIST
3434

3535
# Verify the graph has nodes
36-
if len(codebase.G.nodes) == 0:
36+
if len(codebase.ctx.nodes) == 0:
3737
return PostInitValidationStatus.NO_NODES
3838

3939
# Verify the graph has the same number of files as there are in the repo
40-
if len(codebase.files) != len(list(codebase.op.iter_files(codebase.G.projects[0].subdirectories, extensions=codebase.G.extensions, ignore_list=GLOBAL_FILE_IGNORE_LIST))):
40+
if len(codebase.files) != len(list(codebase.op.iter_files(codebase.ctx.projects[0].subdirectories, extensions=codebase.ctx.extensions, ignore_list=GLOBAL_FILE_IGNORE_LIST))):
4141
return PostInitValidationStatus.MISSING_FILES
4242

4343
# Verify import resolution
@@ -64,14 +64,14 @@ def post_reset_validation(init_nodes, nodes, init_edges, edges, repo_name: str,
6464

6565
def post_sync_validation(codebase: CodebaseType) -> bool:
6666
"""Post codebase.sync, checks that the codebase graph is in a valid state (i.e. not corrupted by codebase.sync)"""
67-
if len(codebase.G.all_syncs) > 0 or len(codebase.G.pending_syncs) > 0 or len(codebase.G.transaction_manager.to_commit()) > 0:
67+
if len(codebase.ctx.all_syncs) > 0 or len(codebase.ctx.pending_syncs) > 0 or len(codebase.ctx.transaction_manager.to_commit()) > 0:
6868
msg = "Can only be called on a reset codebase"
6969
raise NotImplementedError(msg)
70-
if not codebase.G.config.feature_flags.track_graph:
70+
if not codebase.ctx.config.feature_flags.track_graph:
7171
msg = "Can only be called with track_graph=true"
7272
raise NotImplementedError(msg)
73-
return len(dict.fromkeys(codebase.G.old_graph.nodes())) == len(dict.fromkeys(codebase.G.nodes)) and len(dict.fromkeys(codebase.G.old_graph.weighted_edge_list())) == len(
74-
dict.fromkeys(codebase.G.edges)
73+
return len(dict.fromkeys(codebase.ctx.old_graph.nodes())) == len(dict.fromkeys(codebase.ctx.nodes)) and len(dict.fromkeys(codebase.ctx.old_graph.weighted_edge_list())) == len(
74+
dict.fromkeys(codebase.ctx.edges)
7575
)
7676

7777

@@ -140,7 +140,7 @@ def get_nodes_error(init_nodes, nodes):
140140
from codegen.sdk.core.external_module import ExternalModule
141141

142142
if isinstance(node, ExternalModule):
143-
message += "External Module persisted with following dependencies: " + str(list((node.G.get_node(source), edge) for source, _, edge in node.G.in_edges(node.node_id)))
143+
message += "External Module persisted with following dependencies: " + str(list((node.ctx.get_node(source), edge) for source, _, edge in node.ctx.in_edges(node.node_id)))
144144
return message
145145

146146

src/codegen/sdk/core/assignment.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
from tree_sitter import Node as TSNode
2929

30-
from codegen.sdk.codebase.codebase_graph import CodebaseGraph
30+
from codegen.sdk.codebase.codebase_context import CodebaseContext
3131
from codegen.sdk.codebase.resolution_stack import ResolutionStack
3232
from codegen.sdk.core.expressions.type import Type
3333
from codegen.sdk.core.interfaces.editable import Editable
@@ -58,37 +58,37 @@ class Assignment(Symbol[Parent, ...], Typeable[Parent, ...], HasValue, Generic[P
5858
_left: Expression[Self]
5959
symbol_type = SymbolType.GlobalVar
6060

61-
def __init__(self, ts_node: TSNode, file_node_id: NodeId, G: CodebaseGraph, parent: Parent, left: TSNode, value: TSNode, name_node: TSNode, type: Type | None = None) -> None:
61+
def __init__(self, ts_node: TSNode, file_node_id: NodeId, ctx: CodebaseContext, parent: Parent, left: TSNode, value: TSNode, name_node: TSNode, type: Type | None = None) -> None:
6262
self._unique_node = name_node # HACK: This prevents deduplication of Assignments
63-
super().__init__(ts_node, file_node_id, G, parent=parent, name_node=name_node, name_node_type=Name)
63+
super().__init__(ts_node, file_node_id, ctx, parent=parent, name_node=name_node, name_node_type=Name)
6464
self._left = self._parse_expression(left, default=Name)
6565
self._value_node = self._parse_expression(value)
6666
self.type = type
6767
if self.type is None:
6868
self._init_type()
6969

7070
@classmethod
71-
def _from_left_and_right_nodes(cls, ts_node: TSNode, file_node_id: NodeId, G: CodebaseGraph, parent: Parent, left_node: TSNode, right_node: TSNode) -> list[Assignment]:
72-
left = G.parser.parse_expression(left_node, file_node_id, G, parent)
73-
value = G.parser.parse_expression(right_node, file_node_id, G, parent)
71+
def _from_left_and_right_nodes(cls, ts_node: TSNode, file_node_id: NodeId, ctx: CodebaseContext, parent: Parent, left_node: TSNode, right_node: TSNode) -> list[Assignment]:
72+
left = ctx.parser.parse_expression(left_node, file_node_id, ctx, parent)
73+
value = ctx.parser.parse_expression(right_node, file_node_id, ctx, parent)
7474

7575
if isinstance(left, Collection | Dict):
7676
assignments = []
7777
for var in left.symbols:
7878
# Make a deep copy of the value expression for each child
79-
value = G.parser.parse_expression(right_node, file_node_id, G, parent)
80-
assignments.extend(cls._from_value_expression(ts_node, file_node_id, G, parent, left, value, var.ts_node))
79+
value = ctx.parser.parse_expression(right_node, file_node_id, ctx, parent)
80+
assignments.extend(cls._from_value_expression(ts_node, file_node_id, ctx, parent, left, value, var.ts_node))
8181
return sort_editables(assignments)
82-
return cls._from_value_expression(ts_node, file_node_id, G, parent, left, value, left_node)
82+
return cls._from_value_expression(ts_node, file_node_id, ctx, parent, left, value, left_node)
8383

8484
@classmethod
8585
def _from_value_expression(
86-
cls, ts_node: TSNode, file_node_id: NodeId, G: CodebaseGraph, parent: Parent, left: Expression[Self], value: Expression[Self] | list[Expression], name_node: TSNode
86+
cls, ts_node: TSNode, file_node_id: NodeId, ctx: CodebaseContext, parent: Parent, left: Expression[Self], value: Expression[Self] | list[Expression], name_node: TSNode
8787
) -> list[Assignment]:
88-
assignments = [cls(ts_node, file_node_id, G, parent, left, value, name_node)]
88+
assignments = [cls(ts_node, file_node_id, ctx, parent, left, value, name_node)]
8989
if value and isinstance(value, MultiExpression) and isinstance(value.expressions[0], Assignment):
9090
for expr in value.expressions:
91-
assignments.extend(cls._from_value_expression(expr.ts_node, file_node_id, G, parent, expr.left, expr.value, expr.get_name().ts_node))
91+
assignments.extend(cls._from_value_expression(expr.ts_node, file_node_id, ctx, parent, expr.left, expr.value, expr.get_name().ts_node))
9292
return sort_editables(assignments)
9393

9494
@noapidoc

src/codegen/sdk/core/autocommit/decorators.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def wrapper(wrapped: Callable[P, T], instance: "Editable", args, kwargs) -> T:
4747
instance = args[0]
4848
if instance.removed:
4949
logger.warning("Editing a removed node")
50-
autocommit = instance.G._autocommit
50+
autocommit = instance.ctx._autocommit
5151
logger.debug("Writing node %r,%r", instance, wrapped)
5252
with autocommit.write_state(instance, commit=commit):
5353
return wrapped(*args, **kwargs)
@@ -69,9 +69,9 @@ def remover(
6969
if instance is None:
7070
instance = args[0]
7171
logger.debug("Removing node %r, %r", instance, wrapped)
72-
with instance.G._autocommit.write_state(instance):
72+
with instance.ctx._autocommit.write_state(instance):
7373
ret = wrapped(*args, **kwargs)
74-
# instance.G._autocommit.set_pending(instance, REMOVED)
74+
# instance.ctx._autocommit.set_pending(instance, REMOVED)
7575
instance.removed = True
7676
return ret
7777

@@ -86,7 +86,7 @@ def repr_func(
8686
"""Indicates the method is use in debugging/logs."""
8787
if instance is None:
8888
instance = args[0]
89-
autocommit = instance.G._autocommit
89+
autocommit = instance.ctx._autocommit
9090
old_state = autocommit.enter_state(AutoCommitState.Special)
9191
try:
9292
ret = wrapped(*args, **kwargs)
@@ -108,8 +108,8 @@ def mover(
108108
"""
109109
if instance is None:
110110
instance = args[0]
111-
with instance.G._autocommit.write_state(instance, move=True):
111+
with instance.ctx._autocommit.write_state(instance, move=True):
112112
file_node_id, node_id = wrapped(*args, **kwargs)
113-
instance.G._autocommit.set_pending(instance, node_id, file_node_id)
113+
instance.ctx._autocommit.set_pending(instance, node_id, file_node_id)
114114
instance.removed = False
115115
return None

0 commit comments

Comments
 (0)