|
13 | 13 | # limitations under the License. |
14 | 14 |
|
15 | 15 | from ast import literal_eval |
| 16 | +import keyword |
16 | 17 | import os |
17 | 18 | import pathlib |
| 19 | +import sys |
18 | 20 |
|
19 | 21 | from rosidl_cmake import convert_camel_case_to_lower_case_underscore |
20 | 22 | from rosidl_cmake import expand_template |
|
24 | 26 | from rosidl_parser.definition import AbstractGenericString |
25 | 27 | from rosidl_parser.definition import AbstractNestedType |
26 | 28 | from rosidl_parser.definition import AbstractSequence |
| 29 | +from rosidl_parser.definition import Action |
27 | 30 | from rosidl_parser.definition import Array |
28 | 31 | from rosidl_parser.definition import BasicType |
29 | 32 | from rosidl_parser.definition import CHARACTER_TYPES |
30 | 33 | from rosidl_parser.definition import FLOATING_POINT_TYPES |
31 | 34 | from rosidl_parser.definition import IdlContent |
32 | 35 | from rosidl_parser.definition import IdlLocator |
33 | 36 | from rosidl_parser.definition import INTEGER_TYPES |
| 37 | +from rosidl_parser.definition import Message |
34 | 38 | from rosidl_parser.definition import NamespacedType |
| 39 | +from rosidl_parser.definition import Service |
35 | 40 | from rosidl_parser.parser import parse_idl_file |
36 | 41 |
|
37 | 42 | SPECIAL_NESTED_BASIC_TYPES = { |
@@ -73,6 +78,47 @@ def generate_py(generator_arguments_file, typesupport_impls): |
73 | 78 | idl_file = parse_idl_file(locator) |
74 | 79 | idl_content.elements += idl_file.content.elements |
75 | 80 |
|
| 81 | + # 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 | + |
| 92 | + for message in idl_content.get_elements_of_type(Message): |
| 93 | + for member in message.structure.members: |
| 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) |
| 121 | + |
76 | 122 | for subfolder in modules.keys(): |
77 | 123 | with open(os.path.join(args['output_dir'], subfolder, '__init__.py'), 'w') as f: |
78 | 124 | for idl_stem in sorted(modules[subfolder]): |
|
0 commit comments