Skip to content

Upgrading pylint 2 to 3

Breaking2.17.7 → 3.3.9Breaking1Platform2New18Changed10Fixed92Other3

Fetching 34 releases from GitHub…23 / 34
BreakingUpgrade verdict

1 breaking change and 2 platform requirement changes.

  • The symilar command now handles its options differently, so its help and error messages look different and it exits with code 2 on errors.
  • Pylint can no longer run on Python 3.8, but you can still lint Python 3.8 code by setting --py-version=3.8.
  • Pylint can now run on Python 3.13.
3 items need code or config changes

Python requirement changed in 3.3.0: >=3.7.2 → >=3.9.0.

Installs 6 packages in all (was 8).

Breaking1
Migrates symilar from getopt to argparse, changing error and help output and exit codes to 2.
symilar--ignore-comments
Platform2
Removes support for launching pylint with Python 3.8; code targeting 3.8 can still be linted with --py-version=3.8.
--py-version
Adds support for Python 3.13.

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • removed: function run_epylint(argv: Sequence[str] | None=…) -> NoReturn
  • removed: export MapReduceMixin
  • removed: method BasicChecker.leave_tryfinally(_: nodes.TryFinally) -> None
  • removed: method BasicChecker.visit_tryfinally(node: nodes.TryFinally) -> None
  • added: method BasicChecker.leave_try(_: nodes.Try) -> None
  • added: method BasicChecker.visit_try(node: nodes.Try) -> None
  • added: class FunctionChecker(_BasicChecker)
  • added: field FunctionChecker.msgs
  • added: method FunctionChecker.visit_asyncfunctiondef(node: nodes.AsyncFunctionDef) -> None
  • added: method FunctionChecker.visit_functiondef(node: nodes.FunctionDef) -> None
  • added: field TypeVarVariance.inferred
  • removed: method BaseChecker.get_message_definition(msgid: str) -> MessageDefinition
  • added: variable ALLOWED_PROPERTIES
  • added: class DataclassChecker(BaseChecker)
  • added: field DataclassChecker.msgs
  • added: field DataclassChecker.name
  • added: function register(linter: PyLinter) -> None
  • added: method DataclassChecker.visit_call(node: nodes.Call) -> None
  • added: field DeprecatedMixin.DEPRECATED_ATTRIBUTE_MESSAGE: dict[str, MessageDefinitionTuple]
  • added: method DeprecatedMixin.check_deprecated_attribute(node: astroid.Attribute) -> None
  • added: method DeprecatedMixin.deprecated_attributes() -> Iterable[str]
  • added: method DeprecatedMixin.visit_attribute(node: astroid.Attribute) -> None
  • removed: method MisdesignChecker.visit_tryexcept(node: nodes.TryExcept) -> None
  • removed: method MisdesignChecker.visit_tryfinally(node: nodes.TryFinally) -> None
  • added: method MisdesignChecker.visit_try(node: nodes.Try) -> None
  • added: variable ATTRS_DECORATORS
  • added: variable ATTRS_IMPORT
  • added: variable TYPING_EXTENSIONS_TYPEDDICT
  • removed: field DunderCallChecker.priority
  • removed: static method DunderCallChecker.within_dunder_def(node: nodes.NodeNG) -> bool
  • added: static method DunderCallChecker.is_lambda_rule_exception(ancestor: nodes.NodeNG, node: nodes.NodeNG) -> bool
  • added: static method DunderCallChecker.within_dunder_or_lambda_def(node: nodes.NodeNG) -> bool
  • removed: method ExceptionsChecker.visit_tryexcept(node: nodes.TryExcept) -> None
  • added: method ExceptionsChecker.visit_try(node: nodes.Try) -> None
  • added: method ExceptionsChecker.visit_trystar(node: nodes.TryStar) -> None
  • removed: field ImportsChecker.visit_tryexcept
  • removed: field ImportsChecker.visit_tryfinally
  • changed: method ImportsChecker.compute_first_non_import_node(node: nodes.If | nodes.Expr | nodes.Comprehension | nodes.IfExp | nodes.Assign | nodes.AssignAttr | nodes.TryExcept | nodes.TryFinally) -> None → method ImportsChecker.compute_first_non_import_node(node: nodes.If | nodes.Expr | nodes.Comprehension | nodes.IfExp | nodes.Assign | nodes.AssignAttr | nodes.Try) -> None
  • added: field ImportsChecker.visit_try
  • added: method ImportsChecker.get_map_data() -> tuple[defaultdict[str, set[str]], defaultdict[str, set[str]]]
  • added: method ImportsChecker.reduce_map_data(linter: PyLinter, data: list[tuple[defaultdict[str, set[str]], defaultdict[str, set[str]]]]) -> None
  • removed: class MapReduceMixin
  • removed: constructor MapReduceMixin() -> None
  • removed: method MapReduceMixin.get_map_data() -> Any
  • removed: method MapReduceMixin.reduce_map_data(linter: PyLinter, data: list[Any]) -> None
  • removed: field RefactoringChecker.visit_tryfinally
  • removed: method RefactoringChecker.visit_tryexcept(node: nodes.TryExcept | nodes.TryFinally) -> None
  • added: method RefactoringChecker.visit_try(node: nodes.Try) -> None
  • added: method RefactoringChecker.visit_yield(node: nodes.Yield) -> None
  • removed: class Commonality(NamedTuple)
  • removed: class CplSuccessiveLinesLimits
  • removed: class LineSet
  • removed: class LineSetStartCouple(NamedTuple)
  • removed: class LineSpecifs(NamedTuple)
  • removed: class LinesChunk
  • removed: class Similar
  • removed: class SimilarChecker(BaseRawFileChecker, Similar)
  • removed: class SuccessiveLinesLimits
  • removed: constructor CplSuccessiveLinesLimits(first_file: SuccessiveLinesLimits, second_file: SuccessiveLinesLimits, effective_cmn_lines_nb: int) -> None
  • removed: constructor LineSet(name: str, lines: list[str], ignore_comments: bool=…, ignore_docstrings: bool=…, ignore_imports: bool=…, ignore_signatures: bool=…, line_enabled_callback: Callable[[str, int], bool] | None=…) -> None
  • removed: constructor LinesChunk(fileid: str, num_line: int, *lines: Iterable[str]) -> None
  • removed: constructor Similar(min_lines: int=…, ignore_comments: bool=…, ignore_docstrings: bool=…, ignore_imports: bool=…, ignore_signatures: bool=…) -> None
  • removed: constructor SimilarChecker(linter: PyLinter) -> None
  • removed: constructor SuccessiveLinesLimits(start: LineNumber, end: LineNumber) -> None
  • removed: field Commonality.cmn_lines_nb: int
  • removed: field Commonality.fst_file_end: LineNumber
  • removed: field Commonality.fst_file_start: LineNumber
  • removed: field Commonality.fst_lset: LineSet
  • removed: field Commonality.snd_file_end: LineNumber
  • removed: field Commonality.snd_file_start: LineNumber
  • removed: field Commonality.snd_lset: LineSet
  • removed: field LineSetStartCouple.fst_lineset_index: Index
  • removed: field LineSetStartCouple.snd_lineset_index: Index
  • removed: field LineSpecifs.line_number: LineNumber
  • removed: field LineSpecifs.text: str
  • removed: field SimilarChecker.msgs
  • removed: field SimilarChecker.name
  • removed: field SimilarChecker.options: Options
  • removed: field SimilarChecker.reports
  • removed: function Run(argv: Sequence[str] | None=…) -> NoReturn
  • removed: function filter_noncode_lines(ls_1: LineSet, stindex_1: Index, ls_2: LineSet, stindex_2: Index, common_lines_nb: int) -> int
  • removed: function hash_lineset(lineset: LineSet, min_common_lines: int=…) -> tuple[HashToIndex_T, IndexToLines_T]
  • removed: function register(linter: PyLinter) -> None
  • removed: function remove_successive(all_couples: CplIndexToCplLines_T) -> None
  • removed: function report_similarities(sect: Section, stats: LinterStats, old_stats: LinterStats | None) -> None
  • removed: function stripped_lines(lines: Iterable[str], ignore_comments: bool, ignore_docstrings: bool, ignore_imports: bool, ignore_signatures: bool, line_enabled_callback: Callable[[str, int], bool] | None=…) -> list[LineSpecifs]
  • removed: function usage(status: int=…) -> NoReturn
  • removed: method LineSetStartCouple.increment(value: Index) -> LineSetStartCouple
  • removed: method Similar.append_stream(streamid: str, stream: STREAM_TYPES, encoding: str | None=…) -> None
  • removed: method Similar.combine_mapreduce_data(linesets_collection: list[list[LineSet]]) -> None
  • removed: method Similar.get_map_data() -> list[LineSet]
  • removed: method Similar.run() -> None
  • removed: method SimilarChecker.close() -> None
  • removed: method SimilarChecker.get_map_data() -> list[LineSet]
  • removed: method SimilarChecker.open() -> None
  • removed: method SimilarChecker.process_module(node: nodes.Module) -> None
  • removed: method SimilarChecker.reduce_map_data(linter: PyLinter, data: list[list[LineSet]]) -> None
  • removed: property LineSet.real_lines -> list[str]
  • removed: property LineSet.stripped_lines -> list[LineSpecifs]
  • removed: property SuccessiveLinesLimits.end -> LineNumber
  • removed: property SuccessiveLinesLimits.start -> LineNumber
  • removed: variable CplIndexToCplLines_T
  • removed: variable DEFAULT_MIN_SIMILARITY_LINE
  • removed: variable HashToIndex_T
  • removed: variable Index
  • removed: variable IndexToLines_T
  • removed: variable LineNumber
  • removed: variable LinesChunkLimits_T
  • removed: variable MSGS: dict[str, MessageDefinitionTuple]
  • removed: variable REGEX_FOR_LINES_WITH_CONTENT
  • removed: variable STREAM_TYPES
  • added: method StdlibChecker.deprecated_attributes() -> Iterable[str]
  • added: variable DEPRECATED_ATTRIBUTES: DeprecationDict
  • added: variable PATHLIB_MODULE
  • added: class Commonality(NamedTuple)
  • added: class CplSuccessiveLinesLimits
  • added: class LineSet
  • added: class LineSetStartCouple(NamedTuple)
  • added: class LineSpecifs(NamedTuple)
  • added: class LinesChunk
  • added: class SimilaritiesChecker(BaseRawFileChecker, Symilar)
  • added: class SuccessiveLinesLimits
  • added: class Symilar
  • added: constructor CplSuccessiveLinesLimits(first_file: SuccessiveLinesLimits, second_file: SuccessiveLinesLimits, effective_cmn_lines_nb: int) -> None
  • added: constructor LineSet(name: str, lines: list[str], ignore_comments: bool=…, ignore_docstrings: bool=…, ignore_imports: bool=…, ignore_signatures: bool=…, line_enabled_callback: Callable[[str, int], bool] | None=…) -> None
  • added: constructor LinesChunk(fileid: str, num_line: int, *lines: Iterable[str]) -> None
  • added: constructor SimilaritiesChecker(linter: PyLinter) -> None
  • added: constructor SuccessiveLinesLimits(start: LineNumber, end: LineNumber) -> None
  • added: constructor Symilar(min_lines: int=…, ignore_comments: bool=…, ignore_docstrings: bool=…, ignore_imports: bool=…, ignore_signatures: bool=…) -> None
  • added: field Commonality.cmn_lines_nb: int
  • added: field Commonality.fst_file_end: LineNumber
  • added: field Commonality.fst_file_start: LineNumber
  • added: field Commonality.fst_lset: LineSet
  • added: field Commonality.snd_file_end: LineNumber
  • added: field Commonality.snd_file_start: LineNumber
  • added: field Commonality.snd_lset: LineSet
  • added: field LineSetStartCouple.fst_lineset_index: Index
  • added: field LineSetStartCouple.snd_lineset_index: Index
  • added: field LineSpecifs.line_number: LineNumber
  • added: field LineSpecifs.text: str
  • added: field SimilaritiesChecker.IGNORE_COMMENTS_HELP
  • added: field SimilaritiesChecker.IGNORE_DOCSTRINGS_HELP
  • added: field SimilaritiesChecker.IGNORE_IMPORTS_HELP
  • added: field SimilaritiesChecker.IGNORE_SIGNATURES_HELP
  • added: field SimilaritiesChecker.MIN_SIMILARITY_HELP
  • added: field SimilaritiesChecker.msgs
  • added: field SimilaritiesChecker.name
  • added: field SimilaritiesChecker.options: Options
  • added: field SimilaritiesChecker.reports
  • added: function Run(argv: Sequence[str] | None=…) -> NoReturn
  • added: function filter_noncode_lines(ls_1: LineSet, stindex_1: Index, ls_2: LineSet, stindex_2: Index, common_lines_nb: int) -> int
  • added: function hash_lineset(lineset: LineSet, min_common_lines: int=…) -> tuple[HashToIndex_T, IndexToLines_T]
  • added: function register(linter: PyLinter) -> None
  • added: function remove_successive(all_couples: CplIndexToCplLines_T) -> None
  • added: function report_similarities(sect: Section, stats: LinterStats, old_stats: LinterStats | None) -> None
  • added: function stripped_lines(lines: Iterable[str], ignore_comments: bool, ignore_docstrings: bool, ignore_imports: bool, ignore_signatures: bool, line_enabled_callback: Callable[[str, int], bool] | None=…) -> list[LineSpecifs]
  • added: method LineSetStartCouple.increment(value: Index) -> LineSetStartCouple
  • added: method SimilaritiesChecker.close() -> None
  • added: method SimilaritiesChecker.get_map_data() -> list[LineSet]
  • added: method SimilaritiesChecker.open() -> None
  • added: method SimilaritiesChecker.process_module(node: nodes.Module) -> None
  • added: method SimilaritiesChecker.reduce_map_data(linter: PyLinter, data: list[list[LineSet]]) -> None
  • added: method Symilar.append_stream(streamid: str, stream: STREAM_TYPES, encoding: str | None=…) -> None
  • added: method Symilar.combine_mapreduce_data(linesets_collection: list[list[LineSet]]) -> None
  • added: method Symilar.get_map_data() -> list[LineSet]
  • added: method Symilar.run() -> None
  • added: property LineSet.real_lines -> list[str]
  • added: property LineSet.stripped_lines -> list[LineSpecifs]
  • added: property SuccessiveLinesLimits.end -> LineNumber
  • added: property SuccessiveLinesLimits.start -> LineNumber
  • added: variable CplIndexToCplLines_T
  • added: variable DEFAULT_MIN_SIMILARITY_LINE
  • added: variable HashToIndex_T
  • added: variable Index
  • added: variable IndexToLines_T
  • added: variable LineNumber
  • added: variable LinesChunkLimits_T
  • added: variable MSGS: dict[str, MessageDefinitionTuple]
  • added: variable REGEX_FOR_LINES_WITH_CONTENT
  • added: variable STREAM_TYPES
  • added: variable BUILTINS_IMPLICIT_RETURN_NONE
  • added: method UnsupportedVersionChecker.visit_arguments(node: nodes.Arguments) -> None
  • added: method UnsupportedVersionChecker.visit_excepthandler(node: nodes.ExceptHandler) -> None
  • added: method UnsupportedVersionChecker.visit_namedexpr(node: nodes.JoinedStr) -> None
  • added: method UnsupportedVersionChecker.visit_raise(node: nodes.Raise) -> None
  • added: method UnsupportedVersionChecker.visit_trystar(node: nodes.TryStar) -> None
  • added: method UnsupportedVersionChecker.visit_typealias(node: nodes.TypeAlias) -> None
  • added: method UnsupportedVersionChecker.visit_typevar(node: nodes.TypeVar) -> None
  • added: method UnsupportedVersionChecker.visit_typevartuple(node: nodes.TypeVarTuple) -> None
  • removed: function check_messages(*messages: str) -> Callable[[AstCallbackMethod[_CheckerT, _NodeT]], AstCallbackMethod[_CheckerT, _NodeT]]
  • removed: function is_class_subscriptable_pep585_with_postponed_evaluation_enabled(value: nodes.ClassDef, node: nodes.NodeNG) -> bool
  • removed: function is_defined(name: str, node: nodes.NodeNG) -> bool
  • removed: function is_inside_lambda(node: nodes.NodeNG) -> bool
  • removed: function is_node_in_guarded_import_block(node: nodes.NodeNG) -> bool
  • removed: function is_node_in_typing_guarded_import_block(node: nodes.NodeNG) -> bool
  • removed: function is_typing_guard(node: nodes.If) -> bool
  • changed: function find_except_wrapper_node_in_scope(node: nodes.NodeNG) -> nodes.ExceptHandler | nodes.TryExcept | None → function find_except_wrapper_node_in_scope(node: nodes.NodeNG) -> nodes.ExceptHandler | None
  • changed: function find_try_except_wrapper_node(node: nodes.NodeNG) -> nodes.ExceptHandler | nodes.TryExcept | None → function find_try_except_wrapper_node(node: nodes.NodeNG) -> nodes.ExceptHandler | nodes.Try | None
  • changed: function in_for_else_branch(parent: nodes.NodeNG, stmt: nodes.Statement) -> bool → function in_for_else_branch(parent: nodes.NodeNG, stmt: Statement) -> bool
  • changed: function is_module_ignored(module: nodes.Module, ignored_modules: Iterable[str]) -> bool → function is_module_ignored(qualified_module_name: str, ignored_modules: Iterable[str]) -> bool
  • changed: function safe_infer(node: nodes.NodeNG, context: InferenceContext | None=…, *, compare_constants: bool=…) -> InferenceResult | None → function safe_infer(node: nodes.NodeNG, context: InferenceContext | None=…, *, compare_constants: bool=…, compare_constructors: bool=…) -> InferenceResult | None
  • changed: function unimplemented_abstract_methods(node: nodes.ClassDef, is_abstract_cb: nodes.FunctionDef=…) -> dict[str, nodes.FunctionDef] → function unimplemented_abstract_methods(node: nodes.ClassDef, is_abstract_cb: nodes.FunctionDef | None=…) -> dict[str, nodes.FunctionDef]
  • added: function class_constructors_are_ambiguous(class1: nodes.ClassDef, class2: nodes.ClassDef) -> bool
  • added: function function_arguments_are_ambiguous(func1: nodes.FunctionDef, func2: nodes.FunctionDef) -> bool
  • added: function is_enum_member(node: nodes.AssignName) -> bool
  • added: function is_node_in_pep695_type_context(node: nodes.NodeNG) -> nodes.NodeNG | None
  • added: function overridden_method(klass: nodes.LocalsDictNodeNG, name: str | None) -> nodes.FunctionDef | None
  • added: function subscript_chain_is_equal(left: nodes.Subscript, right: nodes.Subscript) -> bool
  • removed: function overridden_method(klass: nodes.LocalsDictNodeNG, name: str | None) -> nodes.FunctionDef | None
  • removed: export ConfigurationMixIn
  • removed: export Option
  • removed: export OptionParser
  • removed: export OptionsManagerMixIn
  • removed: export OptionsProviderMixIn
  • removed: export PYLINTRC
  • removed: export PYLINT_HOME
  • removed: export USER_HOME
  • removed: export UnsupportedAction
  • removed: export find_pylintrc
  • removed: function load_results(base: str) -> LinterStats | None
  • removed: function save_results(results: LinterStats, base: str) -> None
  • removed: variable ConfigProvider
  • removed: class UnsupportedAction(Exception)
  • removed: constructor UnsupportedAction(*args: object) -> None
  • added: variable PylintConfigFileData
  • removed: class ConfigurationMixIn(OptionsManagerMixIn, OptionsProviderMixIn)
  • removed: constructor ConfigurationMixIn(*args: Any, **kwargs: Any) -> None
  • removed: function find_pylintrc() -> str | None
  • added: variable PYPROJECT_NAME
  • removed: class Option(optparse.Option)
  • removed: constructor Option(*opts: Any, **attrs: Any) -> None
  • removed: field Option.ATTRS
  • removed: field Option.TYPES
  • removed: field Option.TYPE_CHECKER
  • removed: method Option.process(opt: Any, value: Any, values: Any, parser: Any) -> int
  • removed: variable VALIDATORS: dict[str, Callable[[Any, str, Any], Any] | Callable[[Any], Any]]
  • removed: class OptionsManagerMixIn
  • removed: constructor OptionsManagerMixIn(usage: str) -> None
  • removed: method OptionsManagerMixIn.add_optik_option(provider: OptionsProviderMixin, optikcontainer: Any, opt: str, optdict: OptionDict) -> None
  • removed: method OptionsManagerMixIn.add_option_group(group_name: str, _: Any, options: Any, provider: OptionsProviderMixin) -> None
  • removed: method OptionsManagerMixIn.cb_set_provider_option(option: Option, opt: str, value: Any, parser: Any) -> None
  • removed: method OptionsManagerMixIn.generate_config(stream: TextIO | None=…, skipsections: tuple[str, ...]=…) -> None
  • removed: method OptionsManagerMixIn.global_set_option(opt: str, value: Any) -> None
  • removed: method OptionsManagerMixIn.help(level: int=…) -> str
  • removed: method OptionsManagerMixIn.load_command_line_configuration(args: list[str] | None=…) -> list[str]
  • removed: method OptionsManagerMixIn.load_config_file() -> None
  • removed: method OptionsManagerMixIn.load_configuration(**kwargs: Any) -> None
  • removed: method OptionsManagerMixIn.load_configuration_from_config(config: dict[str, Any]) -> None
  • removed: method OptionsManagerMixIn.load_provider_defaults() -> None
  • removed: method OptionsManagerMixIn.optik_option(provider: OptionsProviderMixin, opt: str, optdict: OptionDict) -> tuple[list[str], OptionDict]
  • removed: method OptionsManagerMixIn.read_config_file(config_file: Path | None=…, verbose: bool=…) -> None
  • removed: method OptionsManagerMixIn.register_options_provider(provider: OptionsProviderMixin, own_group: bool=…) -> None
  • removed: method OptionsManagerMixIn.reset_parsers(usage: str=…) -> None
  • removed: class OptionParser(optparse.OptionParser)
  • removed: constructor OptionParser(option_class, *args, **kwargs)
  • removed: method OptionParser.format_option_help(formatter=…)
  • removed: class OptionsProviderMixIn
  • removed: class UnsupportedAction(Exception)
  • removed: constructor OptionsProviderMixIn()
  • removed: field OptionsProviderMixIn.level
  • removed: field OptionsProviderMixIn.name
  • removed: field OptionsProviderMixIn.options: Options
  • removed: method OptionsProviderMixIn.get_option_def(opt)
  • removed: method OptionsProviderMixIn.load_defaults()
  • removed: method OptionsProviderMixIn.option_attrname(opt, optdict=…)
  • removed: method OptionsProviderMixIn.option_value(opt)
  • removed: method OptionsProviderMixIn.options_and_values(options=…)
  • removed: method OptionsProviderMixIn.options_by_section()
  • removed: method OptionsProviderMixIn.set_option(optname, value, action=…, optdict=…)
  • removed: variable OLD_DEFAULT_PYLINT_HOME
  • removed: variable PY38_PLUS
  • removed: variable PY39_PLUS
  • removed: variable USER_HOME
  • added: variable MAX_NUMBER_OF_IMPORT_SHOWN
  • added: variable PY311_PLUS
  • added: variable PY312_PLUS
  • added: variable UNNECESSARY_DUNDER_CALL_LAMBDA_EXCEPTIONS
  • removed: function Run(argv: Sequence[str] | None=…) -> NoReturn
  • removed: function lint(filename: str, options: Sequence[str]=…) -> int
  • removed: function py_run(command_options: str=…, return_std: Literal[False]=…, stdout: TextIO | int | None=…, stderr: TextIO | int | None=…) -> None | (command_options: str, return_std: Literal[True], stdout: TextIO | int | None=…, stderr: TextIO | int | None=…) -> tuple[StringIO, StringIO]
  • removed: field BroadTryClauseChecker.visit_tryfinally
  • removed: method BroadTryClauseChecker.visit_tryexcept(node: nodes.TryExcept | nodes.TryFinally) -> None
  • added: method BroadTryClauseChecker.visit_try(node: nodes.Try) -> None
  • added: method CodeStyleChecker.visit_call(node: nodes.Call) -> None
  • removed: class CompareToZeroChecker(checkers.BaseChecker)
  • removed: field CompareToZeroChecker.msgs
  • removed: field CompareToZeroChecker.name
  • removed: field CompareToZeroChecker.options
  • removed: function register(linter: PyLinter) -> None
  • removed: method CompareToZeroChecker.visit_compare(node: nodes.Compare) -> None
  • removed: field DunderChecker.priority
  • removed: class CompareToEmptyStringChecker(checkers.BaseChecker)
  • removed: field CompareToEmptyStringChecker.msgs
  • removed: field CompareToEmptyStringChecker.name
  • removed: field CompareToEmptyStringChecker.options
  • removed: function register(linter: PyLinter) -> None
  • removed: method CompareToEmptyStringChecker.visit_compare(node: nodes.Compare) -> None
  • removed: method OverlappingExceptionsChecker.visit_tryexcept(node: nodes.TryExcept) -> None
  • added: method OverlappingExceptionsChecker.visit_try(node: nodes.Try) -> None
  • added: method TypingChecker.visit_subscript(node: nodes.Subscript) -> None
  • removed: class IAstroidChecker(IChecker)
  • removed: class IChecker(Interface)
  • removed: class IRawChecker(IChecker)
  • removed: class IReporter(Interface)
  • removed: class ITokenChecker(IChecker)
  • removed: method IChecker.close() -> None
  • removed: method IChecker.open() -> None
  • removed: method IRawChecker.process_module(node: nodes.Module) -> None
  • removed: method IReporter.display_reports(layout: Section) -> None
  • removed: method IReporter.handle_message(msg: Message) -> None
  • removed: method ITokenChecker.process_tokens(tokens: list[TokenInfo]) -> None
  • removed: export _patch_sys_path
  • removed: export fix_import_path
  • removed: function get_python_path(filepath: str) -> str
  • removed: method PyLinter.check_single_file(name: str, filepath: str, modname: str) -> None
  • removed: property PyLinter.option_groups -> tuple[tuple[str, str], ...]
  • changed: method PyLinter.check(files_or_modules: Sequence[str] | str) -> None → method PyLinter.check(files_or_modules: Sequence[str]) -> None
  • changed: method PyLinter.generate_reports() -> int | None → method PyLinter.generate_reports(verbose: bool=…) -> int | None
  • changed: method PyLinter.load_plugin_modules(modnames: list[str]) -> None → method PyLinter.load_plugin_modules(modnames: Iterable[str], force: bool=…) -> None
  • changed: method PyLinter.set_current_module(modname: str | None, filepath: str | None=…) -> None → method PyLinter.set_current_module(modname: str, filepath: str | None=…) -> None
  • removed: variable UNUSED_PARAM_SENTINEL
  • changed: constructor Run(args: Sequence[str], reporter: BaseReporter | None=…, exit: bool=…, do_exit: Any=…) -> None → constructor Run(args: Sequence[str], reporter: BaseReporter | None=…, exit: bool=…) -> None
  • removed: function fix_import_path(args: Sequence[str]) -> Iterator[None]
  • changed: constructor Message(msg_id: str, symbol: str, location: tuple[str, str, str, str, int, int] | MessageLocationTuple, msg: str, confidence: Confidence | None) -> None → constructor Message(msg_id: str, symbol: str, location: MessageLocationTuple, msg: str, confidence: Confidence | None) -> None
  • changed: method MessageDefinition.may_be_emitted(py_version: tuple[int, ...] | sys._version_info | None=…) -> bool → method MessageDefinition.may_be_emitted(py_version: tuple[int, ...] | sys._version_info) -> bool
  • changed: method DiaDefGenerator.get_ancestors(node: nodes.ClassDef, level: int) -> Generator[nodes.ClassDef, None, None] → method DiaDefGenerator.get_ancestors(node: nodes.ClassDef, level: int) -> Generator[nodes.ClassDef]
  • changed: method DiaDefGenerator.get_associated(klass_node: nodes.ClassDef, level: int) -> Generator[nodes.ClassDef, None, None] → method DiaDefGenerator.get_associated(klass_node: nodes.ClassDef, level: int) -> Generator[nodes.ClassDef]
  • removed: function interfaces(node: nodes.ClassDef) -> Generator[Any, None, None]
  • changed: function project_from_files(files: list[str], func_wrapper: _WrapperFuncT=…, project_name: str=…, black_list: tuple[str, ...]=…) -> Project → function project_from_files(files: list[str], func_wrapper: _WrapperFuncT=…, project_name: str=…, black_list: tuple[str, ...]=…, verbose: bool=…) -> Project
  • removed: field EdgeType.IMPLEMENTS
  • removed: field NodeType.INTERFACE
  • added: field EdgeType.TYPE_DEPENDENCY
  • removed: function is_interface(node: nodes.ClassDef) -> bool
  • removed: class VCGPrinter(Printer)
  • removed: method VCGPrinter.emit_edge(from_node: str, to_node: str, type_: EdgeType, label: str | None=…) -> None
  • removed: method VCGPrinter.emit_node(name: str, type_: NodeType, properties: NodeProperties | None=…) -> None
  • removed: variable ARROWS: dict[EdgeType, dict[str, str | int]]
  • removed: variable ATTRS_VAL
  • removed: variable EDGE_ATTRS
  • removed: variable GRAPH_ATTRS
  • removed: variable NODE_ATTRS
  • removed: variable ORIENTATION: dict[Layout, str]
  • removed: variable SHAPES: dict[NodeType, str]
  • added: export JSON2Reporter
  • removed: method BaseReporter.set_output(output: TextIO | None=…) -> None
  • removed: class BaseJSONReporter(BaseReporter)
  • removed: field BaseJSONReporter.extension
  • removed: field BaseJSONReporter.name
  • removed: method BaseJSONReporter.display_messages(layout: Section | None) -> None
  • removed: method BaseJSONReporter.display_reports(layout: Section) -> None
  • removed: static method BaseJSONReporter.deserialize(message_as_json: OldJsonExport) -> Message
  • removed: static method BaseJSONReporter.serialize(message: Message) -> OldJsonExport
  • changed: class JSONReporter(BaseJSONReporter) → class JSONReporter(BaseReporter)
  • added: class JSON2Reporter(BaseReporter)
  • added: class JSONMessage(TypedDict)
  • added: field JSON2Reporter.extension
  • added: field JSON2Reporter.name
  • added: field JSONMessage.absolutePath: str
  • added: field JSONMessage.column: int
  • added: field JSONMessage.confidence: str
  • added: field JSONMessage.endColumn: int | None
  • added: field JSONMessage.endLine: int | None
  • added: field JSONMessage.line: int
  • added: field JSONMessage.message: str
  • added: field JSONMessage.messageId: str
  • added: field JSONMessage.module: str
  • added: field JSONMessage.obj: str
  • added: field JSONMessage.path: str
  • added: field JSONMessage.symbol: str
  • added: field JSONMessage.type: str
  • added: field JSONReporter.extension
  • added: field JSONReporter.name
  • added: method JSON2Reporter.display_messages(layout: Section | None) -> None
  • added: method JSON2Reporter.display_reports(layout: Section) -> None
  • added: method JSON2Reporter.serialize_stats() -> dict[str, str | int | dict[str, int]]
  • added: method JSONReporter.display_messages(layout: Section | None) -> None
  • added: method JSONReporter.display_reports(layout: Section) -> None
  • added: static method JSON2Reporter.deserialize(message_as_json: JSONMessage) -> Message
  • added: static method JSON2Reporter.serialize(message: Message) -> JSONMessage
  • changed: constructor ColorizedTextReporter(output: TextIO | None=…, color_mapping: ColorMappingDict | dict[str, tuple[str | None, str]] | None=…) -> None → constructor ColorizedTextReporter(output: TextIO | None=…, color_mapping: ColorMappingDict | None=…) -> None
  • changed: function colorize_ansi(msg: str, msg_style: MessageStyle | None=…) -> str | (msg: str, msg_style: str | None=…, style: str=…, *, color: str | None=…) -> str → function colorize_ansi(msg: str, msg_style: MessageStyle) -> str
  • added: class GithubReporter(TextReporter)
  • added: field GithubReporter.category_map
  • added: field GithubReporter.line_format
  • added: field GithubReporter.name
  • added: method GithubReporter.write_message(msg: Message) -> None
  • changed: method CheckerTestCase.assertAddsMessages(*messages: MessageTest, ignore_position: bool=…) -> Generator[None, None, None] → method CheckerTestCase.assertAddsMessages(*messages: MessageTest, ignore_position: bool=…) -> Generator[None]
  • changed: function run_using_a_configuration_file(configuration_path: Path | str, file_to_lint: str=…) -> tuple[Mock, Mock, Run] → function run_using_a_configuration_file(configuration_path: Path | str, file_to_lint: str=…) -> Run
  • removed: variable SHOULD_BE_IN_THE_SAME_DIRECTORY
  • changed: function get_functional_test_files_from_directory(input_dir: Path | str) -> list[FunctionalTestFile] → function get_functional_test_files_from_directory(input_dir: Path | str, max_file_per_directory: int=…) -> list[FunctionalTestFile]
  • removed: constructor LintModuleOutputUpdate(test_file: FunctionalTestFile, config: Config | None=…) -> None
  • removed: export FunctionalTestFile
  • removed: export NoFileError
  • removed: export parse_python_version
  • changed: constructor PyreverseConfig(mode: str=…, classes: list[str] | None=…, show_ancestors: int | None=…, all_ancestors: bool | None=…, show_associated: int | None=…, all_associated: bool | None=…, show_builtin: bool=…, module_names: bool | None=…, only_classnames: bool=…, output_format: str=…, colorized: bool=…, max_color_depth: int=…, color_palette: tuple[str, ...]=…, ignore_list: tuple[str, ...]=…,… → constructor PyreverseConfig(*, mode: str=…, classes: list[str] | None=…, show_ancestors: int | None=…, all_ancestors: bool | None=…, show_associated: int | None=…, all_associated: bool | None=…, no_standalone: bool=…, show_builtin: bool=…, show_stdlib: bool=…, module_names: bool | None=…, only_classnames: bool=…, output_format: str=…, colorized: bool=…, max_color_depth: int=…, color_palette: tupl…
  • added: field ModuleDescriptionDict.isignored: bool
  • removed: export _format_option_value
  • removed: export get_global_option
  • removed: method FileState.collect_block_lines(msgs_store: MessageDefinitionStore, module_node: nodes.Module) -> None
  • changed: constructor FileState(modname: str | None=…, msg_store: MessageDefinitionStore | None=…, node: nodes.Module | None=…, *, is_base_filestate: bool=…) -> None → constructor FileState(modname: str, msg_store: MessageDefinitionStore, node: nodes.Module | None=…, *, is_base_filestate: bool=…) -> None
  • changed: method LinterStats.get_module_message_count(modname: str, type_name: str) -> int → method LinterStats.get_module_message_count(modname: str, type_name: MessageTypesFullName) -> int
  • changed: function parse_pragma(pylint_pragma: str) -> Generator[PragmaRepresenter, None, None] → function parse_pragma(pylint_pragma: str) -> Generator[PragmaRepresenter]
  • removed: function get_global_option(checker: BaseChecker, option: GLOBAL_OPTION_BOOL, default: bool | None=…) -> bool | (checker: BaseChecker, option: GLOBAL_OPTION_INT, default: int | None=…) -> int | (checker: BaseChecker, option: GLOBAL_OPTION_LIST, default: list[str] | None=…) -> list[str] | (checker: BaseChecker, option: GLOBAL_OPTION_PATTERN, default: Pattern[str] | None=…) -> Pattern[str] | (checke…
  • changed: function cmp(a: int | float, b: int | float) -> int → function cmp(a: float, b: float) -> int
  • changed: function diff_string(old: int | float, new: int | float) -> str → function diff_string(old: float, new: float) -> str