|  | 
| 26 | 26 | from rosidl_parser.definition import AbstractGenericString | 
| 27 | 27 | from rosidl_parser.definition import AbstractNestedType | 
| 28 | 28 | from rosidl_parser.definition import AbstractSequence | 
|  | 29 | +from rosidl_parser.definition import Action | 
| 29 | 30 | from rosidl_parser.definition import Array | 
| 30 | 31 | from rosidl_parser.definition import BasicType | 
| 31 | 32 | from rosidl_parser.definition import CHARACTER_TYPES | 
|  | 
| 35 | 36 | from rosidl_parser.definition import INTEGER_TYPES | 
| 36 | 37 | from rosidl_parser.definition import Message | 
| 37 | 38 | from rosidl_parser.definition import NamespacedType | 
|  | 39 | +from rosidl_parser.definition import Service | 
| 38 | 40 | from rosidl_parser.parser import parse_idl_file | 
| 39 | 41 | 
 | 
| 40 | 42 | SPECIAL_NESTED_BASIC_TYPES = { | 
| @@ -77,16 +79,45 @@ def generate_py(generator_arguments_file, typesupport_impls): | 
| 77 | 79 |         idl_content.elements += idl_file.content.elements | 
| 78 | 80 | 
 | 
| 79 | 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 | + | 
| 80 | 92 |     for message in idl_content.get_elements_of_type(Message): | 
| 81 | 93 |         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) | 
| 90 | 121 | 
 | 
| 91 | 122 |     for subfolder in modules.keys(): | 
| 92 | 123 |         with open(os.path.join(args['output_dir'], subfolder, '__init__.py'), 'w') as f: | 
|  | 
0 commit comments