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.
In plain terms
- 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.
Must act 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).
What you must change
Breaking1
Migrates symilar from getopt to argparse, changing error and help output and exit codes to 2.
symilar--ignore-commentsPlatform2
Removes support for launching pylint with Python 3.8; code targeting 3.8 can still be linted with --py-version=3.8.
--py-versionAdds support for Python 3.13.
API changes
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