Skip to content

Commit 81d0147

Browse files
EdwardJXLicodegen-bot
andauthored
Add disable_graph Option / Feature Flag (#189)
# Motivation This adds the ability to turn off import and symbol resolution during codebase parsing. Motivation is to create a (more) lightweight editor for any file-independent changes that do not require the dependency or usage graph. Prelim testing shows a 25% - 35% in memory usage as well as a 65%-85% reduction in parse times. Co-authored-by: codegen-bot <team+codegenbot@codegen.sh>
1 parent 6b2d9c8 commit 81d0147

File tree

2 files changed

+33
-27
lines changed

2 files changed

+33
-27
lines changed

src/codegen/sdk/codebase/codebase_graph.py

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -457,35 +457,40 @@ def _process_diff_files(self, files_to_sync: Mapping[SyncType, list[Path]], incr
457457
# Step 8: Add internal import resolution edges for new and updated files
458458
if not skip_uncache:
459459
uncache_all()
460-
self._computing = True
461-
try:
462-
logger.info(f"> Computing import resolution edges for {counter[NodeType.IMPORT]} imports")
463-
for node in to_resolve:
464-
if node.node_type == NodeType.IMPORT:
465-
node._remove_internal_edges(EdgeType.IMPORT_SYMBOL_RESOLUTION)
466-
node.add_symbol_resolution_edge()
467-
to_resolve.extend(node.symbol_usages)
468-
if counter[NodeType.EXPORT] > 0:
469-
logger.info(f"> Computing export dependencies for {counter[NodeType.EXPORT]} exports")
460+
461+
if self.config.feature_flags.disable_graph:
462+
logger.warning("Graph generation is disabled. Skipping import and symbol resolution")
463+
self._computing = False
464+
else:
465+
self._computing = True
466+
try:
467+
logger.info(f"> Computing import resolution edges for {counter[NodeType.IMPORT]} imports")
470468
for node in to_resolve:
471-
if node.node_type == NodeType.EXPORT:
472-
node._remove_internal_edges(EdgeType.EXPORT)
473-
node.compute_export_dependencies()
469+
if node.node_type == NodeType.IMPORT:
470+
node._remove_internal_edges(EdgeType.IMPORT_SYMBOL_RESOLUTION)
471+
node.add_symbol_resolution_edge()
474472
to_resolve.extend(node.symbol_usages)
475-
if counter[NodeType.SYMBOL] > 0:
476-
from codegen.sdk.core.interfaces.inherits import Inherits
477-
478-
logger.info("> Computing superclass dependencies")
479-
for symbol in to_resolve:
480-
if isinstance(symbol, Inherits):
481-
symbol._remove_internal_edges(EdgeType.SUBCLASS)
482-
symbol.compute_superclass_dependencies()
483-
484-
if not skip_uncache:
485-
uncache_all()
486-
self._compute_dependencies(to_resolve, incremental)
487-
finally:
488-
self._computing = False
473+
if counter[NodeType.EXPORT] > 0:
474+
logger.info(f"> Computing export dependencies for {counter[NodeType.EXPORT]} exports")
475+
for node in to_resolve:
476+
if node.node_type == NodeType.EXPORT:
477+
node._remove_internal_edges(EdgeType.EXPORT)
478+
node.compute_export_dependencies()
479+
to_resolve.extend(node.symbol_usages)
480+
if counter[NodeType.SYMBOL] > 0:
481+
from codegen.sdk.core.interfaces.inherits import Inherits
482+
483+
logger.info("> Computing superclass dependencies")
484+
for symbol in to_resolve:
485+
if isinstance(symbol, Inherits):
486+
symbol._remove_internal_edges(EdgeType.SUBCLASS)
487+
symbol.compute_superclass_dependencies()
488+
489+
if not skip_uncache:
490+
uncache_all()
491+
self._compute_dependencies(to_resolve, incremental)
492+
finally:
493+
self._computing = False
489494

490495
def _compute_dependencies(self, to_update: list[Importable], incremental: bool):
491496
seen = set()

src/codegen/sdk/codebase/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class GSFeatureFlags(BaseModel):
4242
full_range_index: bool = False
4343
ignore_process_errors: bool = True # Ignore errors from dependency manager and language engine
4444
import_resolution_overrides: dict[str, str] = {} # Override import resolution for specific modules
45+
disable_graph: bool = False # Turn of graph generation entirely. Speeds up parsing but disables usages and dependencies
4546

4647

4748
DefaultFlags = GSFeatureFlags(sync_enabled=False)

0 commit comments

Comments
 (0)