From 4ea4ab05497e59966dad0df56709df3152139e6c Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 27 May 2022 13:26:54 +0200 Subject: qtpy2cpp: Improve error handling Format messages in a file:line: format. Fix an error causing an exception. Task-number: PYSIDE-1945 Change-Id: I16a1fd6daa96521adfe53f23090f61fbbc581e84 Reviewed-by: Cristian Maureira-Fredes Reviewed-by: Shyamnath Premnadh (cherry picked from commit 9d2779a12f1c71db26b3ddc81c6006d7f7244772) Reviewed-by: Qt Cherry-pick Bot --- tools/qtpy2cpp.py | 4 ++-- tools/qtpy2cpp_lib/formatter.py | 2 +- tools/qtpy2cpp_lib/visitor.py | 17 ++++++++++------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/tools/qtpy2cpp.py b/tools/qtpy2cpp.py index 3862176fc..a41226a04 100644 --- a/tools/qtpy2cpp.py +++ b/tools/qtpy2cpp.py @@ -81,7 +81,7 @@ if __name__ == '__main__': ast_tree = ConvertVisitor.create_ast(input_file) if args.stdout: sys.stdout.write(f'// Converted from {input_file}\n') - ConvertVisitor(sys.stdout).visit(ast_tree) + ConvertVisitor(input_file, sys.stdout).visit(ast_tree) sys.exit(0) target_file = file_root + '.cpp' @@ -95,5 +95,5 @@ if __name__ == '__main__': with open(target_file, "w") as file: file.write(f'// Converted from {input_file}\n') - ConvertVisitor(file).visit(ast_tree) + ConvertVisitor(input_file, file).visit(ast_tree) logger.info(f"Wrote {target_file} ...") diff --git a/tools/qtpy2cpp_lib/formatter.py b/tools/qtpy2cpp_lib/formatter.py index 2b77d3ee1..ae79bbef0 100644 --- a/tools/qtpy2cpp_lib/formatter.py +++ b/tools/qtpy2cpp_lib/formatter.py @@ -69,7 +69,7 @@ def format_inheritance(class_def_node): def format_for_target(target_node): if isinstance(target_node, ast.Tuple): # for i,e in enumerate() result = '' - for i, el in enumerate(target_node): + for i, el in enumerate(target_node.elts): if i > 0: result += ', ' result += format_reference(el) diff --git a/tools/qtpy2cpp_lib/visitor.py b/tools/qtpy2cpp_lib/visitor.py index 280bb51f4..f5476ac10 100644 --- a/tools/qtpy2cpp_lib/visitor.py +++ b/tools/qtpy2cpp_lib/visitor.py @@ -63,9 +63,10 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter): debug = False - def __init__(self, output_file): + def __init__(self, file_name, output_file): ast.NodeVisitor.__init__(self) CppFormatter.__init__(self, output_file) + self._file_name = file_name self._class_scope = [] # List of class names self._stack = [] # nodes self._debug_indent = 0 @@ -87,9 +88,10 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter): super().generic_visit(node) except Exception as e: line_no = node.lineno if hasattr(node, 'lineno') else -1 - message = 'Error "{}" at line {}'.format(str(e), line_no) + error_message = str(e) + message = f'{self._file_name}:{line_no}: Error "{error_message}"' warnings.warn(message) - self._output_file.write(f'\n// {message}\n') + self._output_file.write(f'\n// {error_message}\n') del self._stack[-1] if self.debug: self._debug_leave(node) @@ -101,13 +103,14 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter): def visit_Assign(self, node): self._output_file.write('\n') self.INDENT() + line_no = node.lineno if hasattr(node, 'lineno') else -1 for target in node.targets: if isinstance(target, ast.Tuple): - warnings.warn('List assignment not handled (line {}).'. - format(node.lineno)) + w = f"{self._file_name}:{line_no}: List assignment not handled." + warnings.warn(w) elif isinstance(target, ast.Subscript): - warnings.warn('Subscript assignment not handled (line {}).'. - format(node.lineno)) + w = f"{self._file_name}:{line_no}: Subscript assignment not handled." + warnings.warn(w) else: self._output_file.write(format_reference(target)) self._output_file.write(' = ') -- cgit v1.2.3