Skip to content

Commit 62da35b

Browse files
authored
parser: ensure prefix is separated when traversing (#353)
1 parent 69f4192 commit 62da35b

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

src/betterproto/plugin/parser.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ def _traverse(
4444
for i, item in enumerate(items):
4545
# Adjust the name since we flatten the hierarchy.
4646
# Todo: don't change the name, but include full name in returned tuple
47-
item.name = next_prefix = prefix + item.name
47+
item.name = next_prefix = f"{prefix}_{item.name}"
4848
yield item, path + [i]
4949

5050
if isinstance(item, DescriptorProto):
5151
for enum in item.enum_type:
52-
enum.name = next_prefix + enum.name
52+
enum.name = f"{next_prefix}_{enum.name}"
5353
yield enum, path + [i, 4]
5454

5555
if item.nested_type:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// https://github.com/danielgtaylor/python-betterproto/issues/344
2+
syntax = "proto3";
3+
4+
package casing_inner_class;
5+
6+
message Test {
7+
message inner_class {
8+
sint32 old_exp = 1;
9+
}
10+
inner_class inner = 2;
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import tests.output_betterproto.casing_inner_class as casing_inner_class
2+
3+
4+
def test_message_casing_inner_class_name():
5+
assert hasattr(
6+
casing_inner_class, "TestInnerClass"
7+
), "Inline defined Message is correctly converted to CamelCase"
8+
9+
10+
def test_message_casing_inner_class_attributes():
11+
message = casing_inner_class.Test()
12+
assert hasattr(
13+
message.inner, "old_exp"
14+
), "Inline defined Message attribute is snake_case"

0 commit comments

Comments
 (0)