option_parser.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  2. # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
  3. # Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt
  4. # type: ignore # Deprecated module.
  5. import optparse # pylint: disable=deprecated-module
  6. import warnings
  7. from pylint.config.option import Option
  8. def _level_options(group, outputlevel):
  9. return [
  10. option
  11. for option in group.option_list
  12. if (getattr(option, "level", 0) or 0) <= outputlevel
  13. and option.help is not optparse.SUPPRESS_HELP
  14. ]
  15. class OptionParser(optparse.OptionParser):
  16. def __init__(self, option_class, *args, **kwargs):
  17. # TODO: 3.0: Remove deprecated class
  18. warnings.warn(
  19. "OptionParser has been deprecated and will be removed in pylint 3.0",
  20. DeprecationWarning,
  21. stacklevel=2,
  22. )
  23. super().__init__(option_class=Option, *args, **kwargs) # noqa: B026
  24. def format_option_help(self, formatter=None):
  25. if formatter is None:
  26. formatter = self.formatter
  27. outputlevel = getattr(formatter, "output_level", 0)
  28. formatter.store_option_strings(self)
  29. result = [formatter.format_heading("Options")]
  30. formatter.indent()
  31. if self.option_list:
  32. result.append(optparse.OptionContainer.format_option_help(self, formatter))
  33. result.append("\n")
  34. for group in self.option_groups:
  35. if group.level <= outputlevel and (
  36. group.description or _level_options(group, outputlevel)
  37. ):
  38. result.append(group.format_help(formatter))
  39. result.append("\n")
  40. formatter.dedent()
  41. # Drop the last "\n", or the header if no options or option groups:
  42. return "".join(result[:-1])
  43. def _match_long_opt(self, opt): # pragma: no cover # Unused
  44. """Disable abbreviations."""
  45. if opt not in self._long_opt:
  46. raise optparse.BadOptionError(opt)
  47. return opt