From 6167df4992ecbdc4e9b99bf9269eff02a26f30b6 Mon Sep 17 00:00:00 2001 From: Peter Law Date: Fri, 15 May 2020 16:58:34 +0100 Subject: [PATCH] Show a nicer message when duplicate entry points are found This removes the stack trace from the message printed, which is somewhat more friendly, though still treats this misconfiguration as a catastrophic error. --- src/flake8/exceptions.py | 2 +- src/flake8/main/application.py | 11 +++++++---- tests/unit/test_application.py | 12 ++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/flake8/exceptions.py b/src/flake8/exceptions.py index 92bb276..3d5af70 100644 --- a/src/flake8/exceptions.py +++ b/src/flake8/exceptions.py @@ -18,7 +18,7 @@ class ExecutionError(Flake8Exception): """Exception raised during execution of Flake8.""" -class DuplicatePluginEntryPoint(Flake8Exception): +class DuplicatePluginEntryPoint(ExecutionError): """Exception raised when a plugin entry point is already taken.""" FORMAT = ( diff --git a/src/flake8/main/application.py b/src/flake8/main/application.py index 001ad6c..8740bfa 100644 --- a/src/flake8/main/application.py +++ b/src/flake8/main/application.py @@ -121,15 +121,18 @@ class Application(object): This should be the last thing called on the application instance. It will check certain options and exit appropriately. """ + if self.catastrophic_failure: + # Don't rely on any attributes being set if things failued + # catastrophically + raise SystemExit(True) + if self.options.count: print(self.result_count) if self.options.exit_zero: - raise SystemExit(self.catastrophic_failure) + raise SystemExit(False) else: - raise SystemExit( - (self.result_count > 0) or self.catastrophic_failure - ) + raise SystemExit(self.result_count > 0) def find_plugins(self, config_finder): # type: (config.ConfigFileFinder) -> None diff --git a/tests/unit/test_application.py b/tests/unit/test_application.py index 51adefb..0683603 100644 --- a/tests/unit/test_application.py +++ b/tests/unit/test_application.py @@ -48,6 +48,18 @@ def test_exit_does_raise(result_count, catastrophic, exit_zero, value, assert excinfo.value.args[0] is value +def test_exit_raises(application): + """Verify Application.exit raises SystemExit under configuration failure.""" + application.catastrophic_failure = True + # Note: no application.options set -- configuration issues can lead to + # errors before it's assigned. + + with pytest.raises(SystemExit) as excinfo: + application.exit() + + assert excinfo.value.args[0] is True + + def test_warns_on_unknown_formatter_plugin_name(application): """Verify we log a warning with an unfound plugin.""" default = mock.Mock()