From a488532a87a1ba1ff102d66a759fab16b4653b70 Mon Sep 17 00:00:00 2001 From: Samuel Date: Wed, 4 Dec 2019 12:09:37 +0100 Subject: [PATCH 1/3] Add warning for keyword in message member Signed-off-by: Samuel --- .../rosidl_generator_py/generate_py_impl.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py b/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py index b799aaa7..b098dd03 100644 --- a/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py +++ b/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py @@ -12,9 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from ast import literal_eval +import keyword import os import pathlib +import sys +from ast import literal_eval from rosidl_cmake import convert_camel_case_to_lower_case_underscore from rosidl_cmake import expand_template @@ -31,6 +33,7 @@ from rosidl_parser.definition import IdlContent from rosidl_parser.definition import IdlLocator from rosidl_parser.definition import INTEGER_TYPES +from rosidl_parser.definition import Message from rosidl_parser.definition import NamespacedType from rosidl_parser.parser import parse_idl_file @@ -73,6 +76,18 @@ def generate_py(generator_arguments_file, typesupport_impls): idl_file = parse_idl_file(locator) idl_content.elements += idl_file.content.elements + # NOTE(sam): remove when a language specific name mangling is implemented + for message in idl_content.get_elements_of_type(Message): + for member in message.structure.members: + msg_name = message.structure.namespaced_type.name + if (keyword.iskeyword(member.name)): + print(('Member name "{}" in the message "{}" is a ' + 'reserved keyword in Python and is not supported ' + 'at the moment. Please use a different name.') + .format(member.name, msg_name), file=sys.stderr) + + # TODO(sam): add reseved keyword warnings for services and actions + for subfolder in modules.keys(): with open(os.path.join(args['output_dir'], subfolder, '__init__.py'), 'w') as f: for idl_stem in sorted(modules[subfolder]): From 69a7a2806471fc0b10c9d412eb6f6277aeec66e3 Mon Sep 17 00:00:00 2001 From: Samuel Lindgren Date: Wed, 22 Jan 2020 23:15:33 +0100 Subject: [PATCH 2/3] Add keyword warnings for services and actions Signed-off-by: Samuel Lindgren --- .../rosidl_generator_py/generate_py_impl.py | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py b/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py index b098dd03..cca1a513 100644 --- a/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py +++ b/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py @@ -26,6 +26,7 @@ from rosidl_parser.definition import AbstractGenericString from rosidl_parser.definition import AbstractNestedType from rosidl_parser.definition import AbstractSequence +from rosidl_parser.definition import Action from rosidl_parser.definition import Array from rosidl_parser.definition import BasicType from rosidl_parser.definition import CHARACTER_TYPES @@ -35,6 +36,7 @@ from rosidl_parser.definition import INTEGER_TYPES from rosidl_parser.definition import Message from rosidl_parser.definition import NamespacedType +from rosidl_parser.definition import Service from rosidl_parser.parser import parse_idl_file SPECIAL_NESTED_BASIC_TYPES = { @@ -77,16 +79,45 @@ def generate_py(generator_arguments_file, typesupport_impls): idl_content.elements += idl_file.content.elements # NOTE(sam): remove when a language specific name mangling is implemented + + def print_warning_if_reserved_keyword(member_name, interface_type, interface_name): + if (keyword.iskeyword(member.name)): + print( + "Member name '{}' in the {} '{}' is a " + 'reserved keyword in Python and is not supported ' + 'at the moment. Please use a different name.' + .format(member_name, interface_type, interface_name), + file=sys.stderr) + for message in idl_content.get_elements_of_type(Message): for member in message.structure.members: - msg_name = message.structure.namespaced_type.name - if (keyword.iskeyword(member.name)): - print(('Member name "{}" in the message "{}" is a ' - 'reserved keyword in Python and is not supported ' - 'at the moment. Please use a different name.') - .format(member.name, msg_name), file=sys.stderr) - - # TODO(sam): add reseved keyword warnings for services and actions + print_warning_if_reserved_keyword( + member.name, 'message', + message.structure.namespaced_type.name) + + for service in idl_content.get_elements_of_type(Service): + for member in service.request_message.structure.members: + print_warning_if_reserved_keyword( + member.name, 'service request', + service.namespaced_type.name) + for member in service.response_message.structure.members: + print_warning_if_reserved_keyword( + member.name, 'service response', + service.namespaced_type.name) + + for action in idl_content.get_elements_of_type(Action): + for member in action.goal.structure.members: + print_warning_if_reserved_keyword( + member.name, 'action goal', + action.namespaced_type.name) + for member in action.feedback.structure.members: + print_warning_if_reserved_keyword( + member.name, 'action feedback', + action.namespaced_type.name) + for member in action.result.structure.members: + print_warning_if_reserved_keyword( + member.name, 'action result', + action.namespaced_type.name) for subfolder in modules.keys(): with open(os.path.join(args['output_dir'], subfolder, '__init__.py'), 'w') as f: From 4afae400b5c761068deef2ba14f4257c07a70c61 Mon Sep 17 00:00:00 2001 From: Samuel Lindgren Date: Thu, 30 Jan 2020 16:39:26 +0000 Subject: [PATCH 3/3] Fix import order Signed-off-by: Samuel Lindgren --- rosidl_generator_py/rosidl_generator_py/generate_py_impl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py b/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py index cca1a513..809a5cfa 100644 --- a/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py +++ b/rosidl_generator_py/rosidl_generator_py/generate_py_impl.py @@ -12,11 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +from ast import literal_eval import keyword import os import pathlib import sys -from ast import literal_eval from rosidl_cmake import convert_camel_case_to_lower_case_underscore from rosidl_cmake import expand_template