Skip to content

Commit 20cf9bc

Browse files
coadometa-codesync[bot]
authored andcommitted
Move scope string generation logic to the base class (#56085)
Summary: Pull Request resolved: #56085 Changelog: [Internal] Moves the logic responsible for generating a string view of the scope's body to the base class to reduce duplication. Similarly, moves the logic responsible for qualifying template arguments to the `Extensible` class. Reviewed By: cipolleschi Differential Revision: D96455746 fbshipit-source-id: 1d800c7992080e02831f61fee4aaa9cb31f8fc9a
1 parent 3a14967 commit 20cf9bc

7 files changed

Lines changed: 36 additions & 99 deletions

File tree

scripts/cxx-api/parser/scope/base_scope_kind.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from abc import ABC, abstractmethod
99
from typing import TYPE_CHECKING, TypeVar
1010

11-
from natsort import natsort_keygen
11+
from natsort import natsort_keygen, natsorted
1212

1313
if TYPE_CHECKING:
1414
from .scope import Scope
@@ -29,6 +29,18 @@ def close(self, scope: Scope) -> None:
2929
"""Called when the scope is closed. Override to perform cleanup."""
3030
pass
3131

32+
def _format_scope_body(self, scope: Scope, member_suffix: str = "") -> str:
33+
"""Format the members list inside a scope's braces."""
34+
stringified_members = [
35+
member.to_string(2) + member_suffix for member in scope.get_members()
36+
]
37+
stringified_members = natsorted(stringified_members)
38+
result = "{"
39+
if stringified_members:
40+
result += "\n" + "\n".join(stringified_members)
41+
result += "\n}"
42+
return result
43+
3244
def print_scope(self, scope: Scope) -> None:
3345
print(self.to_string(scope))
3446

scripts/cxx-api/parser/scope/category_scope_kind.py

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
from typing import TYPE_CHECKING
99

10-
from natsort import natsorted
11-
1210
from .base_scope_kind import ScopeKind
1311

1412
if TYPE_CHECKING:
@@ -22,16 +20,5 @@ def __init__(self, class_name: str, category_name: str) -> None:
2220
self.category_name: str = category_name
2321

2422
def to_string(self, scope: Scope) -> str:
25-
result = f"{self.name} {self.class_name}({self.category_name}) {{"
26-
27-
stringified_members = []
28-
for member in scope.get_members():
29-
stringified_members.append(member.to_string(2))
30-
stringified_members = natsorted(stringified_members)
31-
result += ("\n" if len(stringified_members) > 0 else "") + "\n".join(
32-
stringified_members
33-
)
34-
35-
result += "\n}"
36-
37-
return result
23+
header = f"{self.name} {self.class_name}({self.category_name}) "
24+
return header + self._format_scope_body(scope)

scripts/cxx-api/parser/scope/enum_scope_kind.py

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
from typing import TYPE_CHECKING
99

10-
from natsort import natsorted
11-
1210
from .base_scope_kind import ScopeKind
1311

1412
if TYPE_CHECKING:
@@ -21,22 +19,6 @@ def __init__(self) -> None:
2119
self.type: str | None = None
2220

2321
def to_string(self, scope: Scope) -> str:
24-
result = ""
2522
inheritance_string = f" : {self.type}" if self.type else ""
26-
27-
result += (
28-
"\n" + f"{self.name} {scope.get_qualified_name()}{inheritance_string} {{"
29-
)
30-
31-
stringified_members = []
32-
for member in scope.get_members():
33-
stringified_members.append(member.to_string(2) + ",")
34-
35-
stringified_members = natsorted(stringified_members)
36-
result += ("\n" if len(stringified_members) > 0 else "") + "\n".join(
37-
stringified_members
38-
)
39-
40-
result += "\n}"
41-
42-
return result
23+
header = f"\n{self.name} {scope.get_qualified_name()}{inheritance_string} "
24+
return header + self._format_scope_body(scope, member_suffix=",")

scripts/cxx-api/parser/scope/extendable.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ def add_base(self, base: Base | list[Base]) -> None:
2626
else:
2727
self.base_classes.append(base)
2828

29+
def qualify_base_classes(self, scope) -> None:
30+
"""Qualify base class names and their template arguments."""
31+
from ..utils import qualify_type_str
32+
33+
for base in self.base_classes:
34+
base.name = qualify_type_str(base.name, scope)
35+
2936
def get_inheritance_string(self) -> str:
3037
bases = []
3138
for base in self.base_classes:

scripts/cxx-api/parser/scope/interface_scope_kind.py

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77

88
from typing import TYPE_CHECKING
99

10-
from natsort import natsorted
11-
12-
from ..utils import qualify_type_str
1310
from .base_scope_kind import ScopeKind
1411
from .extendable import Extendable
1512

@@ -23,24 +20,9 @@ def __init__(self) -> None:
2320
Extendable.__init__(self)
2421

2522
def close(self, scope: Scope) -> None:
26-
"""Qualify base class names and their template arguments."""
27-
for base in self.base_classes:
28-
base.name = qualify_type_str(base.name, scope)
23+
self.qualify_base_classes(scope)
2924

3025
def to_string(self, scope: Scope) -> str:
31-
result = ""
32-
33-
inheritance_string = self.get_inheritance_string()
34-
result += f"{self.name} {scope.get_qualified_name()}{inheritance_string} {{"
35-
36-
stringified_members = []
37-
for member in scope.get_members():
38-
stringified_members.append(member.to_string(2))
39-
stringified_members = natsorted(stringified_members)
40-
result += ("\n" if len(stringified_members) > 0 else "") + "\n".join(
41-
stringified_members
42-
)
43-
44-
result += "\n}"
45-
46-
return result
26+
inheritance = self.get_inheritance_string()
27+
header = f"{self.name} {scope.get_qualified_name()}{inheritance} "
28+
return header + self._format_scope_body(scope)

scripts/cxx-api/parser/scope/protocol_scope_kind.py

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77

88
from typing import TYPE_CHECKING
99

10-
from natsort import natsorted
11-
12-
from ..utils import qualify_type_str
1310
from .base_scope_kind import ScopeKind
1411
from .extendable import Extendable
1512

@@ -23,24 +20,9 @@ def __init__(self) -> None:
2320
Extendable.__init__(self)
2421

2522
def close(self, scope: Scope) -> None:
26-
"""Qualify base class names and their template arguments."""
27-
for base in self.base_classes:
28-
base.name = qualify_type_str(base.name, scope)
23+
self.qualify_base_classes(scope)
2924

3025
def to_string(self, scope: Scope) -> str:
31-
result = ""
32-
33-
inheritance_string = self.get_inheritance_string()
34-
result += f"{self.name} {scope.get_qualified_name()}{inheritance_string} {{"
35-
36-
stringified_members = []
37-
for member in scope.get_members():
38-
stringified_members.append(member.to_string(2))
39-
stringified_members = natsorted(stringified_members)
40-
result += ("\n" if len(stringified_members) > 0 else "") + "\n".join(
41-
stringified_members
42-
)
43-
44-
result += "\n}"
45-
46-
return result
26+
inheritance = self.get_inheritance_string()
27+
header = f"{self.name} {scope.get_qualified_name()}{inheritance} "
28+
return header + self._format_scope_body(scope)

scripts/cxx-api/parser/scope/struct_like_scope_kind.py

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
from enum import Enum
99
from typing import TYPE_CHECKING
1010

11-
from natsort import natsorted
12-
1311
from ..template import Template, TemplateList
14-
from ..utils import qualify_type_str
1512
from .base_scope_kind import ScopeKind
1613
from .extendable import Extendable
1714

@@ -45,27 +42,15 @@ def add_template(self, template: Template | [Template]) -> None:
4542
self.template_list.add(template)
4643

4744
def close(self, scope: Scope) -> None:
48-
"""Qualify base class names and their template arguments."""
49-
for base in self.base_classes:
50-
base.name = qualify_type_str(base.name, scope)
45+
self.qualify_base_classes(scope)
5146

5247
def to_string(self, scope: Scope) -> str:
5348
result = ""
5449

5550
if self.template_list is not None:
5651
result += "\n" + self.template_list.to_string() + "\n"
5752

58-
inheritance_string = self.get_inheritance_string()
59-
result += f"{self.name} {scope.get_qualified_name()}{inheritance_string} {{"
60-
61-
stringified_members = []
62-
for member in scope.get_members():
63-
stringified_members.append(member.to_string(2))
64-
stringified_members = natsorted(stringified_members)
65-
result += ("\n" if len(stringified_members) > 0 else "") + "\n".join(
66-
stringified_members
67-
)
68-
69-
result += "\n}"
70-
53+
inheritance = self.get_inheritance_string()
54+
result += f"{self.name} {scope.get_qualified_name()}{inheritance} "
55+
result += self._format_scope_body(scope)
7156
return result

0 commit comments

Comments
 (0)