Skip to content

Commit 6c1b18d

Browse files
committed
Fix operator precedence in test-unit parser and nested node removal
1 parent 4e9ae32 commit 6c1b18d

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

swesmith/bug_gen/procedural/ruby/base.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ def walk(n):
4545
def replace_node(code: str, node, replacement: str) -> str:
4646
"""Replace a tree-sitter node's text via byte offsets."""
4747
code_bytes = code.encode("utf8")
48-
new_bytes = (code_bytes[:node.start_byte]
49-
+ replacement.encode("utf8") + code_bytes[node.end_byte:])
48+
new_bytes = (
49+
code_bytes[: node.start_byte]
50+
+ replacement.encode("utf8")
51+
+ code_bytes[node.end_byte :]
52+
)
5053
return new_bytes.decode("utf8")
5154

5255
def _remove_matching_nodes(
@@ -64,6 +67,7 @@ def _remove_matching_nodes(
6467
def collect(n):
6568
if n.type in node_types and self.flip():
6669
removals.append(n)
70+
return # skip children to avoid stale byte offsets on nested removals
6771
for child in n.children:
6872
collect(child)
6973

@@ -74,7 +78,9 @@ def collect(n):
7478

7579
source_bytes = code_entity.src_code.encode("utf8")
7680
for node in sorted(removals, key=lambda x: x.start_byte, reverse=True):
77-
source_bytes = source_bytes[:node.start_byte] + source_bytes[node.end_byte:]
81+
source_bytes = (
82+
source_bytes[: node.start_byte] + source_bytes[node.end_byte :]
83+
)
7884

7985
modified_code = source_bytes.decode("utf8")
8086

swesmith/profiles/ruby.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ def parse_log_ruby_test(log: str) -> dict[str, str]:
7373
current_class = stripped[:-1]
7474
continue
7575
# test-unit verbose: " test_name: .: (0.001234)"
76-
if current_class and ".: (" in stripped or "F: (" in stripped or "E: (" in stripped:
76+
if current_class and (
77+
".: (" in stripped or "F: (" in stripped or "E: (" in stripped
78+
):
7779
match = re.match(r"^(\S+):\s+([.FE]):\s+\(", stripped)
7880
if match:
79-
test_name = f"{current_class}#{ match.group(1)}"
81+
test_name = f"{current_class}#{match.group(1)}"
8082
status_char = match.group(2)
8183
if status_char == ".":
8284
test_status_map[test_name] = TestStatus.PASSED.value

0 commit comments

Comments
 (0)