diff --git a/pylsp/plugins/flake8_lint.py b/pylsp/plugins/flake8_lint.py index 3707222f..5c77e1d3 100644 --- a/pylsp/plugins/flake8_lint.py +++ b/pylsp/plugins/flake8_lint.py @@ -31,8 +31,20 @@ def pylsp_lint(workspace, document): per_file_ignores = settings.get("perFileIgnores") if per_file_ignores: + prev_file_pat = None for path in per_file_ignores: - file_pat, errors = path.split(":") + try: + file_pat, errors = path.split(":") + prev_file_pat = file_pat + except ValueError: + # It's legal to just specify another error type for the same + # file pattern: + if prev_file_pat is None: + log.warning( + "skipping a Per-file-ignore with no file pattern") + continue + file_pat = prev_file_pat + errors = path if PurePath(document.path).match(file_pat): ignores.extend(errors.split(",")) diff --git a/test/plugins/test_flake8_lint.py b/test/plugins/test_flake8_lint.py index 59a776a1..a72383ec 100644 --- a/test/plugins/test_flake8_lint.py +++ b/test/plugins/test_flake8_lint.py @@ -158,3 +158,25 @@ def test_flake8_per_file_ignores(workspace): assert not res os.unlink(os.path.join(workspace.root_path, "setup.cfg")) + + +def test_per_file_ignores_alternative_syntax(workspace): + config_str = r"""[flake8] +per-file-ignores = **/__init__.py:F401,E402 + """ + + doc_str = "print('hi')\nimport os\n" + + doc_uri = uris.from_fs_path(os.path.join(workspace.root_path, "blah/__init__.py")) + workspace.put_document(doc_uri, doc_str) + + flake8_settings = get_flake8_cfg_settings(workspace, config_str) + + assert "perFileIgnores" in flake8_settings + assert len(flake8_settings["perFileIgnores"]) == 2 + + doc = workspace.get_document(doc_uri) + res = flake8_lint.pylsp_lint(workspace, doc) + assert not res + + os.unlink(os.path.join(workspace.root_path, "setup.cfg"))