# -*- coding: utf-8 -*- # Copyright (c) 2006-2010, 2012-2014 LOGILAB S.A. (Paris, FRANCE) # Copyright (c) 2008 pyves@crater.logilab.fr # Copyright (c) 2010 Julien Jehannet # Copyright (c) 2013 Google, Inc. # Copyright (c) 2013 John McGehee # Copyright (c) 2014-2020 Claudiu Popa # Copyright (c) 2014 Brett Cannon # Copyright (c) 2014 Arun Persaud # Copyright (c) 2015 Aru Sahni # Copyright (c) 2015 John Kirkham # Copyright (c) 2015 Ionel Cristian Maries # Copyright (c) 2016 Erik # Copyright (c) 2016 Alexander Todorov # Copyright (c) 2016 Moises Lopez # Copyright (c) 2017-2019 Ville Skyttä # Copyright (c) 2017 hippo91 # Copyright (c) 2017 ahirnish # Copyright (c) 2017 Łukasz Rogalski # Copyright (c) 2018, 2020 Anthony Sottile # Copyright (c) 2018 Jim Robertson # Copyright (c) 2018 ssolanki # Copyright (c) 2018 Bryce Guinta # Copyright (c) 2018 Sushobhit <31987769+sushobhit27@users.noreply.github.com> # Copyright (c) 2018 Gary Tyler McLeod # Copyright (c) 2018 Konstantin # Copyright (c) 2018 Nick Drozd # Copyright (c) 2019-2020 Pierre Sassoulas # Copyright (c) 2019 Janne Rönkkö # Copyright (c) 2019 Ashley Whetter # Copyright (c) 2019 Hugo van Kemenade # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html # For details: https://github.com/PyCQA/pylint/blob/master/COPYING import os import pickle import sys from pylint.config.configuration_mixin import ConfigurationMixIn from pylint.config.find_default_config_files import find_default_config_files from pylint.config.man_help_formatter import _ManHelpFormatter from pylint.config.option import Option from pylint.config.option_manager_mixin import OptionsManagerMixIn from pylint.config.option_parser import OptionParser from pylint.config.options_provider_mixin import OptionsProviderMixIn, UnsupportedAction __all__ = [ "UnsupportedAction", "ConfigurationMixIn", "OptionsManagerMixIn", ] USER_HOME = os.path.expanduser("~") if "PYLINTHOME" in os.environ: PYLINT_HOME = os.environ["PYLINTHOME"] if USER_HOME == "~": USER_HOME = os.path.dirname(PYLINT_HOME) elif USER_HOME == "~": PYLINT_HOME = ".pylint.d" else: PYLINT_HOME = os.path.join(USER_HOME, ".pylint.d") def _get_pdata_path(base_name, recurs): base_name = base_name.replace(os.sep, "_") return os.path.join(PYLINT_HOME, "%s%s%s" % (base_name, recurs, ".stats")) def load_results(base): data_file = _get_pdata_path(base, 1) try: with open(data_file, "rb") as stream: return pickle.load(stream) except Exception: # pylint: disable=broad-except return {} def save_results(results, base): if not os.path.exists(PYLINT_HOME): try: os.mkdir(PYLINT_HOME) except OSError: print("Unable to create directory %s" % PYLINT_HOME, file=sys.stderr) data_file = _get_pdata_path(base, 1) try: with open(data_file, "wb") as stream: pickle.dump(results, stream) except OSError as ex: print("Unable to create file %s: %s" % (data_file, ex), file=sys.stderr) def find_pylintrc(): """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 PYLINTRC = find_pylintrc() ENV_HELP = ( """ The following environment variables are used: * PYLINTHOME Path to the directory where persistent data for the run will be stored. If not found, it defaults to ~/.pylint.d/ or .pylint.d (in the current working directory). * PYLINTRC Path to the configuration file. See the documentation for the method used to search for configuration file. """ % globals() # type: ignore )