Skip to content

Commit 86fda48

Browse files
authored
Feature flag generics support (#304)
1 parent 1bce8ad commit 86fda48

File tree

4 files changed

+15
-13
lines changed

4 files changed

+15
-13
lines changed

scripts/profiling/profile.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import typer
66

77

8-
def profile(repo: str, memory: bool = False):
8+
def profile(repo: str, memory: bool = False, extra_repos: bool = True):
99
type = "mem" if memory else "cpu"
1010
base = f".profiles/{type}/{repo}"
1111
os.makedirs(base, exist_ok=True)
1212
output = f"{base}/raw.austin"
1313
compressed = f"{base}/compressed.austin"
1414
image = f"{base}/parse.svg"
15-
test = Popen(["pytest", "tests/integration/codemod/test_parse.py", "--extra-repos=true", "--durations=100", "-k", repo])
15+
test = Popen(["pytest", "tests/integration/codemod/test_parse.py", "--durations=100", "-k", repo, "--extra-repos=True" if extra_repos else ""])
1616
try:
1717
command = ["sudo", "austin", "-p", str(test.pid), "-o", output]
1818
if memory:

src/codegen/sdk/codebase/config.py

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

4950

5051
DefaultFlags = GSFeatureFlags(sync_enabled=False)

src/codegen/sdk/core/detached_symbols/function_call.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -518,16 +518,17 @@ def _resolved_types(self) -> Generator[ResolutionStack[Self], None, None]:
518518
if generic := function_def_frame.generics.get(return_type.source, None):
519519
yield from self.with_resolution_frame(generic, direct=function_def_frame.direct)
520520
return
521-
for arg in self.args:
522-
if arg.parameter and (type := arg.parameter.type):
523-
if type.source == return_type.source:
524-
yield from self.with_resolution_frame(arg.value, direct=function_def_frame.direct)
525-
return
526-
if isinstance(type, GenericType):
527-
for param in type.parameters:
528-
if param.source == return_type.source:
529-
yield from self.with_resolution_frame(arg.value, direct=function_def_frame.direct)
530-
return
521+
if self.G.config.feature_flags.generics:
522+
for arg in self.args:
523+
if arg.parameter and (type := arg.parameter.type):
524+
if type.source == return_type.source:
525+
yield from self.with_resolution_frame(arg.value, direct=function_def_frame.direct)
526+
return
527+
if isinstance(type, GenericType):
528+
for param in type.parameters:
529+
if param.source == return_type.source:
530+
yield from self.with_resolution_frame(arg.value, direct=function_def_frame.direct)
531+
return
531532

532533
yield from self.with_resolution_frame(return_type, direct=False)
533534
elif isinstance(function_def, Class):

src/codegen/sdk/core/interfaces/chainable.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def with_resolution_frame(self, child: Editable, *args, generic_parameters: list
5050
assert resolution is not self
5151
generics = generics or resolution.generics
5252
if generic_parameters:
53-
if isinstance(resolution.top.node, SupportsGenerics):
53+
if isinstance(resolution.top.node, SupportsGenerics) and self.G.config.feature_flags.generics:
5454
generics = {k: v for v, k in zip(generic_parameters, resolution.top.node.generics)}
5555
elif not generics:
5656
generics = {i: v for i, v in enumerate(generic_parameters)}

0 commit comments

Comments
 (0)