diff --git a/pylint/config/config_file_parser.py b/pylint/config/config_file_parser.py index efc085e5901..a992b08e05d 100644 --- a/pylint/config/config_file_parser.py +++ b/pylint/config/config_file_parser.py @@ -106,7 +106,7 @@ def parse_config_file( raise OSError(f"The config file {file_path} doesn't exist!") if verbose: - print(f"Using config file {file_path}", file=sys.stderr) + print(f"Loading config file {file_path}", file=sys.stderr) if file_path.suffix == ".toml": return _RawConfParser.parse_toml_file(file_path) diff --git a/pylint/config/config_initialization.py b/pylint/config/config_initialization.py index c656b8f11e5..42f7c9a1a35 100644 --- a/pylint/config/config_initialization.py +++ b/pylint/config/config_initialization.py @@ -83,6 +83,9 @@ def _config_initialization( args_list = _order_all_first(args_list, joined=True) parsed_args_list = linter._parse_command_line_configuration(args_list) + # save preprocessed Runner.verbose to config + linter.config.verbose = verbose_mode + # Remove the positional arguments separator from the list of arguments if it exists try: parsed_args_list.remove("--") diff --git a/pylint/lint/pylinter.py b/pylint/lint/pylinter.py index 36bc77feb92..140849ee812 100644 --- a/pylint/lint/pylinter.py +++ b/pylint/lint/pylinter.py @@ -639,7 +639,11 @@ def register_local_config(self, file_or_dir: str) -> None: original_config_ref = self.config self.config = copy.deepcopy(self.config) _config_initialization( - self, self._cli_args, reporter=self.reporter, config_file=local_conf + self, + self._cli_args, + reporter=self.reporter, + config_file=local_conf, + verbose_mode=self.config.verbose, ) self._directory_namespaces[basedir.resolve()] = (self.config, {}) # keep dict keys reverse-sorted so that @@ -958,24 +962,29 @@ def set_current_module(self, modname: str, filepath: str | None = None) -> None: # If there is an actual filepath we might need to update the config attribute if filepath and self.config.use_local_configs: self.register_local_config(filepath) - namespace = self._get_namespace_for_file( + config_path, namespace = self._get_namespace_for_file( Path(filepath), self._directory_namespaces ) if namespace: - self.config = namespace or self._base_config + self.config = namespace + if self.config.verbose: + print( + f"Using config from {config_path} for {modname}", + file=sys.stderr, + ) def _get_namespace_for_file( self, filepath: Path, namespaces: DirectoryNamespaceDict - ) -> argparse.Namespace | None: + ) -> tuple[Path | None, argparse.Namespace | None]: filepath = filepath.resolve() for directory in namespaces: if _is_relative_to(filepath, directory): - namespace = self._get_namespace_for_file( + _, namespace = self._get_namespace_for_file( filepath, namespaces[directory][1] ) if namespace is None: - return namespaces[directory][0] - return None + return directory, namespaces[directory][0] + return None, None @contextlib.contextmanager def _astroid_module_checker( diff --git a/tests/config/test_config.py b/tests/config/test_config.py index 872b568a610..4400d05c06f 100644 --- a/tests/config/test_config.py +++ b/tests/config/test_config.py @@ -178,7 +178,7 @@ def test_short_verbose(capsys: CaptureFixture) -> None: """Check that we correctly handle the -v flag.""" Run([str(EMPTY_MODULE), "-v"], exit=False) output = capsys.readouterr() - assert "Using config file" in output.err + assert "Loading config file" in output.err def test_argument_separator() -> None: diff --git a/tests/config/test_per_directory_config.py b/tests/config/test_per_directory_config.py index 4f13153e0f1..e6c617144df 100644 --- a/tests/config/test_per_directory_config.py +++ b/tests/config/test_per_directory_config.py @@ -240,3 +240,13 @@ def test_register_local_config_accepts_directory( assert level1_dir.is_dir() linter.register_local_config(str(level1_dir)) assert level1_dir in linter._directory_namespaces.keys() + + +def test_local_config_verbose( + _create_subconfig_test_fs: tuple[Path, ...], capsys: CaptureFixture +) -> None: + """Check --verbose flag prints message about current config for each file.""" + level1_dir, *tmp_files = _create_subconfig_test_fs + LintRun(["--verbose", "--use-local-configs=y", str(tmp_files[1])], exit=False) + output = capsys.readouterr() + assert f"Using config from {level1_dir / 'sub'}" in output.err