123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
- import configparser
- import os
- from typing import Iterator, Optional
- import toml
- from toml import TomlDecodeError
- def _toml_has_config(path):
- with open(path, encoding="utf-8") as toml_handle:
- try:
- content = toml.load(toml_handle)
- except TomlDecodeError as error:
- print(f"Failed to load '{path}': {error}")
- return False
- try:
- content["tool"]["pylint"]
- except KeyError:
- return False
- return True
- def _cfg_has_config(path):
- parser = configparser.ConfigParser()
- parser.read(path, encoding="utf-8")
- return any(section.startswith("pylint.") for section in parser.sections())
- def find_default_config_files() -> Iterator[str]:
- """Find all possible config files."""
- rc_names = ("pylintrc", ".pylintrc")
- config_names = rc_names + ("pyproject.toml", "setup.cfg")
- for config_name in config_names:
- if os.path.isfile(config_name):
- if config_name.endswith(".toml") and not _toml_has_config(config_name):
- continue
- if config_name.endswith(".cfg") and not _cfg_has_config(config_name):
- continue
- yield os.path.abspath(config_name)
- if os.path.isfile("__init__.py"):
- curdir = os.path.abspath(os.getcwd())
- while os.path.isfile(os.path.join(curdir, "__init__.py")):
- curdir = os.path.abspath(os.path.join(curdir, ".."))
- for rc_name in rc_names:
- rc_path = os.path.join(curdir, rc_name)
- if os.path.isfile(rc_path):
- yield rc_path
- if "PYLINTRC" in os.environ and os.path.exists(os.environ["PYLINTRC"]):
- if os.path.isfile(os.environ["PYLINTRC"]):
- yield os.environ["PYLINTRC"]
- else:
- user_home = os.path.expanduser("~")
- if user_home not in ("~", "/root"):
- home_rc = os.path.join(user_home, ".pylintrc")
- if os.path.isfile(home_rc):
- yield home_rc
- home_rc = os.path.join(user_home, ".config", "pylintrc")
- if os.path.isfile(home_rc):
- yield home_rc
- if os.path.isfile("/etc/pylintrc"):
- yield "/etc/pylintrc"
- def find_pylintrc() -> Optional[str]:
- """search the pylint rc file and return its path if it find it, else None"""
- for config_file in find_default_config_files():
- if config_file.endswith("pylintrc"):
- return config_file
- return None
|