Skip to content

Commit 69a7a28

Browse files
committed
Add keyword warnings for services and actions
Signed-off-by: Samuel Lindgren <[email protected]>
1 parent a488532 commit 69a7a28

File tree

1 file changed

+39
-8
lines changed

1 file changed

+39
-8
lines changed

rosidl_generator_py/rosidl_generator_py/generate_py_impl.py

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from rosidl_parser.definition import AbstractGenericString
2727
from rosidl_parser.definition import AbstractNestedType
2828
from rosidl_parser.definition import AbstractSequence
29+
from rosidl_parser.definition import Action
2930
from rosidl_parser.definition import Array
3031
from rosidl_parser.definition import BasicType
3132
from rosidl_parser.definition import CHARACTER_TYPES
@@ -35,6 +36,7 @@
3536
from rosidl_parser.definition import INTEGER_TYPES
3637
from rosidl_parser.definition import Message
3738
from rosidl_parser.definition import NamespacedType
39+
from rosidl_parser.definition import Service
3840
from rosidl_parser.parser import parse_idl_file
3941

4042
SPECIAL_NESTED_BASIC_TYPES = {
@@ -77,16 +79,45 @@ def generate_py(generator_arguments_file, typesupport_impls):
7779
idl_content.elements += idl_file.content.elements
7880

7981
# NOTE(sam): remove when a language specific name mangling is implemented
82+
83+
def print_warning_if_reserved_keyword(member_name, interface_type, interface_name):
84+
if (keyword.iskeyword(member.name)):
85+
print(
86+
"Member name '{}' in the {} '{}' is a "
87+
'reserved keyword in Python and is not supported '
88+
'at the moment. Please use a different name.'
89+
.format(member_name, interface_type, interface_name),
90+
file=sys.stderr)
91+
8092
for message in idl_content.get_elements_of_type(Message):
8193
for member in message.structure.members:
82-
msg_name = message.structure.namespaced_type.name
83-
if (keyword.iskeyword(member.name)):
84-
print(('Member name "{}" in the message "{}" is a '
85-
'reserved keyword in Python and is not supported '
86-
'at the moment. Please use a different name.')
87-
.format(member.name, msg_name), file=sys.stderr)
88-
89-
# TODO(sam): add reseved keyword warnings for services and actions
94+
print_warning_if_reserved_keyword(
95+
member.name, 'message',
96+
message.structure.namespaced_type.name)
97+
98+
for service in idl_content.get_elements_of_type(Service):
99+
for member in service.request_message.structure.members:
100+
print_warning_if_reserved_keyword(
101+
member.name, 'service request',
102+
service.namespaced_type.name)
103+
for member in service.response_message.structure.members:
104+
print_warning_if_reserved_keyword(
105+
member.name, 'service response',
106+
service.namespaced_type.name)
107+
108+
for action in idl_content.get_elements_of_type(Action):
109+
for member in action.goal.structure.members:
110+
print_warning_if_reserved_keyword(
111+
member.name, 'action goal',
112+
action.namespaced_type.name)
113+
for member in action.feedback.structure.members:
114+
print_warning_if_reserved_keyword(
115+
member.name, 'action feedback',
116+
action.namespaced_type.name)
117+
for member in action.result.structure.members:
118+
print_warning_if_reserved_keyword(
119+
member.name, 'action result',
120+
action.namespaced_type.name)
90121

91122
for subfolder in modules.keys():
92123
with open(os.path.join(args['output_dir'], subfolder, '__init__.py'), 'w') as f:

0 commit comments

Comments
 (0)