From 31aa9fd58ec88b4155cc909840e813849acb9f54 Mon Sep 17 00:00:00 2001 From: Yang Fan <2022112761@stu.hit.edu.cn> Date: Thu, 23 Jul 2026 23:34:39 +0800 Subject: [PATCH] Avoid printing autoimport syntax errors --- rope/contrib/autoimport/parse.py | 2 +- ropetest/contrib/autoimport/parsetest.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/rope/contrib/autoimport/parse.py b/rope/contrib/autoimport/parse.py index 58ee8fcbd..d468fe90b 100644 --- a/rope/contrib/autoimport/parse.py +++ b/rope/contrib/autoimport/parse.py @@ -47,7 +47,7 @@ def get_names_from_file( try: root_node = ast.parse(module.read_bytes()) except SyntaxError as error: - print(error) + logger.debug("Skipping invalid source file %s: %s", module, error) return for node in ast.iter_child_nodes(root_node): if isinstance(node, ast.Assign): diff --git a/ropetest/contrib/autoimport/parsetest.py b/ropetest/contrib/autoimport/parsetest.py index 2f59c91d3..cbc9a16e4 100644 --- a/ropetest/contrib/autoimport/parsetest.py +++ b/ropetest/contrib/autoimport/parsetest.py @@ -1,3 +1,5 @@ +import logging + from rope.contrib.autoimport import parse from rope.contrib.autoimport.defs import Name, NameType, PartialName, Source @@ -7,6 +9,17 @@ def test_typing_names(typing_path): assert PartialName("Text", NameType.Variable) in names +def test_invalid_source_file_is_skipped_without_writing_to_stdout(tmp_path, caplog, capsys): + source = tmp_path / "invalid.py" + source.write_text("€ = 2\n", encoding="utf-8") + + with caplog.at_level(logging.DEBUG, logger=parse.__name__): + assert list(parse.get_names_from_file(source)) == [] + + assert capsys.readouterr().out == "" + assert f"Skipping invalid source file {source}" in caplog.text + + def test_find_sys(): names = list(parse.get_names_from_compiled("sys", Source.BUILTIN)) assert Name("exit", "sys", "sys", Source.BUILTIN, NameType.Function) in names