| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621 |
- """Generic abstract syntax tree node visitor"""
- from __future__ import annotations
- from abc import abstractmethod
- from typing import TYPE_CHECKING, Generic, TypeVar
- from mypy_extensions import mypyc_attr, trait
- if TYPE_CHECKING:
- # break import cycle only needed for mypy
- import mypy.nodes
- import mypy.patterns
- T = TypeVar("T")
- @trait
- @mypyc_attr(allow_interpreted_subclasses=True)
- class ExpressionVisitor(Generic[T]):
- @abstractmethod
- def visit_int_expr(self, o: mypy.nodes.IntExpr) -> T:
- pass
- @abstractmethod
- def visit_str_expr(self, o: mypy.nodes.StrExpr) -> T:
- pass
- @abstractmethod
- def visit_bytes_expr(self, o: mypy.nodes.BytesExpr) -> T:
- pass
- @abstractmethod
- def visit_float_expr(self, o: mypy.nodes.FloatExpr) -> T:
- pass
- @abstractmethod
- def visit_complex_expr(self, o: mypy.nodes.ComplexExpr) -> T:
- pass
- @abstractmethod
- def visit_ellipsis(self, o: mypy.nodes.EllipsisExpr) -> T:
- pass
- @abstractmethod
- def visit_star_expr(self, o: mypy.nodes.StarExpr) -> T:
- pass
- @abstractmethod
- def visit_name_expr(self, o: mypy.nodes.NameExpr) -> T:
- pass
- @abstractmethod
- def visit_member_expr(self, o: mypy.nodes.MemberExpr) -> T:
- pass
- @abstractmethod
- def visit_yield_from_expr(self, o: mypy.nodes.YieldFromExpr) -> T:
- pass
- @abstractmethod
- def visit_yield_expr(self, o: mypy.nodes.YieldExpr) -> T:
- pass
- @abstractmethod
- def visit_call_expr(self, o: mypy.nodes.CallExpr) -> T:
- pass
- @abstractmethod
- def visit_op_expr(self, o: mypy.nodes.OpExpr) -> T:
- pass
- @abstractmethod
- def visit_comparison_expr(self, o: mypy.nodes.ComparisonExpr) -> T:
- pass
- @abstractmethod
- def visit_cast_expr(self, o: mypy.nodes.CastExpr) -> T:
- pass
- @abstractmethod
- def visit_assert_type_expr(self, o: mypy.nodes.AssertTypeExpr) -> T:
- pass
- @abstractmethod
- def visit_reveal_expr(self, o: mypy.nodes.RevealExpr) -> T:
- pass
- @abstractmethod
- def visit_super_expr(self, o: mypy.nodes.SuperExpr) -> T:
- pass
- @abstractmethod
- def visit_unary_expr(self, o: mypy.nodes.UnaryExpr) -> T:
- pass
- @abstractmethod
- def visit_assignment_expr(self, o: mypy.nodes.AssignmentExpr) -> T:
- pass
- @abstractmethod
- def visit_list_expr(self, o: mypy.nodes.ListExpr) -> T:
- pass
- @abstractmethod
- def visit_dict_expr(self, o: mypy.nodes.DictExpr) -> T:
- pass
- @abstractmethod
- def visit_tuple_expr(self, o: mypy.nodes.TupleExpr) -> T:
- pass
- @abstractmethod
- def visit_set_expr(self, o: mypy.nodes.SetExpr) -> T:
- pass
- @abstractmethod
- def visit_index_expr(self, o: mypy.nodes.IndexExpr) -> T:
- pass
- @abstractmethod
- def visit_type_application(self, o: mypy.nodes.TypeApplication) -> T:
- pass
- @abstractmethod
- def visit_lambda_expr(self, o: mypy.nodes.LambdaExpr) -> T:
- pass
- @abstractmethod
- def visit_list_comprehension(self, o: mypy.nodes.ListComprehension) -> T:
- pass
- @abstractmethod
- def visit_set_comprehension(self, o: mypy.nodes.SetComprehension) -> T:
- pass
- @abstractmethod
- def visit_dictionary_comprehension(self, o: mypy.nodes.DictionaryComprehension) -> T:
- pass
- @abstractmethod
- def visit_generator_expr(self, o: mypy.nodes.GeneratorExpr) -> T:
- pass
- @abstractmethod
- def visit_slice_expr(self, o: mypy.nodes.SliceExpr) -> T:
- pass
- @abstractmethod
- def visit_conditional_expr(self, o: mypy.nodes.ConditionalExpr) -> T:
- pass
- @abstractmethod
- def visit_type_var_expr(self, o: mypy.nodes.TypeVarExpr) -> T:
- pass
- @abstractmethod
- def visit_paramspec_expr(self, o: mypy.nodes.ParamSpecExpr) -> T:
- pass
- @abstractmethod
- def visit_type_var_tuple_expr(self, o: mypy.nodes.TypeVarTupleExpr) -> T:
- pass
- @abstractmethod
- def visit_type_alias_expr(self, o: mypy.nodes.TypeAliasExpr) -> T:
- pass
- @abstractmethod
- def visit_namedtuple_expr(self, o: mypy.nodes.NamedTupleExpr) -> T:
- pass
- @abstractmethod
- def visit_enum_call_expr(self, o: mypy.nodes.EnumCallExpr) -> T:
- pass
- @abstractmethod
- def visit_typeddict_expr(self, o: mypy.nodes.TypedDictExpr) -> T:
- pass
- @abstractmethod
- def visit_newtype_expr(self, o: mypy.nodes.NewTypeExpr) -> T:
- pass
- @abstractmethod
- def visit__promote_expr(self, o: mypy.nodes.PromoteExpr) -> T:
- pass
- @abstractmethod
- def visit_await_expr(self, o: mypy.nodes.AwaitExpr) -> T:
- pass
- @abstractmethod
- def visit_temp_node(self, o: mypy.nodes.TempNode) -> T:
- pass
- @trait
- @mypyc_attr(allow_interpreted_subclasses=True)
- class StatementVisitor(Generic[T]):
- # Definitions
- @abstractmethod
- def visit_assignment_stmt(self, o: mypy.nodes.AssignmentStmt) -> T:
- pass
- @abstractmethod
- def visit_for_stmt(self, o: mypy.nodes.ForStmt) -> T:
- pass
- @abstractmethod
- def visit_with_stmt(self, o: mypy.nodes.WithStmt) -> T:
- pass
- @abstractmethod
- def visit_del_stmt(self, o: mypy.nodes.DelStmt) -> T:
- pass
- @abstractmethod
- def visit_func_def(self, o: mypy.nodes.FuncDef) -> T:
- pass
- @abstractmethod
- def visit_overloaded_func_def(self, o: mypy.nodes.OverloadedFuncDef) -> T:
- pass
- @abstractmethod
- def visit_class_def(self, o: mypy.nodes.ClassDef) -> T:
- pass
- @abstractmethod
- def visit_global_decl(self, o: mypy.nodes.GlobalDecl) -> T:
- pass
- @abstractmethod
- def visit_nonlocal_decl(self, o: mypy.nodes.NonlocalDecl) -> T:
- pass
- @abstractmethod
- def visit_decorator(self, o: mypy.nodes.Decorator) -> T:
- pass
- # Module structure
- @abstractmethod
- def visit_import(self, o: mypy.nodes.Import) -> T:
- pass
- @abstractmethod
- def visit_import_from(self, o: mypy.nodes.ImportFrom) -> T:
- pass
- @abstractmethod
- def visit_import_all(self, o: mypy.nodes.ImportAll) -> T:
- pass
- # Statements
- @abstractmethod
- def visit_block(self, o: mypy.nodes.Block) -> T:
- pass
- @abstractmethod
- def visit_expression_stmt(self, o: mypy.nodes.ExpressionStmt) -> T:
- pass
- @abstractmethod
- def visit_operator_assignment_stmt(self, o: mypy.nodes.OperatorAssignmentStmt) -> T:
- pass
- @abstractmethod
- def visit_while_stmt(self, o: mypy.nodes.WhileStmt) -> T:
- pass
- @abstractmethod
- def visit_return_stmt(self, o: mypy.nodes.ReturnStmt) -> T:
- pass
- @abstractmethod
- def visit_assert_stmt(self, o: mypy.nodes.AssertStmt) -> T:
- pass
- @abstractmethod
- def visit_if_stmt(self, o: mypy.nodes.IfStmt) -> T:
- pass
- @abstractmethod
- def visit_break_stmt(self, o: mypy.nodes.BreakStmt) -> T:
- pass
- @abstractmethod
- def visit_continue_stmt(self, o: mypy.nodes.ContinueStmt) -> T:
- pass
- @abstractmethod
- def visit_pass_stmt(self, o: mypy.nodes.PassStmt) -> T:
- pass
- @abstractmethod
- def visit_raise_stmt(self, o: mypy.nodes.RaiseStmt) -> T:
- pass
- @abstractmethod
- def visit_try_stmt(self, o: mypy.nodes.TryStmt) -> T:
- pass
- @abstractmethod
- def visit_match_stmt(self, o: mypy.nodes.MatchStmt) -> T:
- pass
- @trait
- @mypyc_attr(allow_interpreted_subclasses=True)
- class PatternVisitor(Generic[T]):
- @abstractmethod
- def visit_as_pattern(self, o: mypy.patterns.AsPattern) -> T:
- pass
- @abstractmethod
- def visit_or_pattern(self, o: mypy.patterns.OrPattern) -> T:
- pass
- @abstractmethod
- def visit_value_pattern(self, o: mypy.patterns.ValuePattern) -> T:
- pass
- @abstractmethod
- def visit_singleton_pattern(self, o: mypy.patterns.SingletonPattern) -> T:
- pass
- @abstractmethod
- def visit_sequence_pattern(self, o: mypy.patterns.SequencePattern) -> T:
- pass
- @abstractmethod
- def visit_starred_pattern(self, o: mypy.patterns.StarredPattern) -> T:
- pass
- @abstractmethod
- def visit_mapping_pattern(self, o: mypy.patterns.MappingPattern) -> T:
- pass
- @abstractmethod
- def visit_class_pattern(self, o: mypy.patterns.ClassPattern) -> T:
- pass
- @trait
- @mypyc_attr(allow_interpreted_subclasses=True)
- class NodeVisitor(Generic[T], ExpressionVisitor[T], StatementVisitor[T], PatternVisitor[T]):
- """Empty base class for parse tree node visitors.
- The T type argument specifies the return type of the visit
- methods. As all methods defined here return None by default,
- subclasses do not always need to override all the methods.
- TODO: make the default return value explicit, then turn on
- empty body checking in mypy_self_check.ini.
- """
- # Not in superclasses:
- def visit_mypy_file(self, o: mypy.nodes.MypyFile) -> T:
- pass
- # TODO: We have a visit_var method, but no visit_typeinfo or any
- # other non-Statement SymbolNode (accepting those will raise a
- # runtime error). Maybe this should be resolved in some direction.
- def visit_var(self, o: mypy.nodes.Var) -> T:
- pass
- # Module structure
- def visit_import(self, o: mypy.nodes.Import) -> T:
- pass
- def visit_import_from(self, o: mypy.nodes.ImportFrom) -> T:
- pass
- def visit_import_all(self, o: mypy.nodes.ImportAll) -> T:
- pass
- # Definitions
- def visit_func_def(self, o: mypy.nodes.FuncDef) -> T:
- pass
- def visit_overloaded_func_def(self, o: mypy.nodes.OverloadedFuncDef) -> T:
- pass
- def visit_class_def(self, o: mypy.nodes.ClassDef) -> T:
- pass
- def visit_global_decl(self, o: mypy.nodes.GlobalDecl) -> T:
- pass
- def visit_nonlocal_decl(self, o: mypy.nodes.NonlocalDecl) -> T:
- pass
- def visit_decorator(self, o: mypy.nodes.Decorator) -> T:
- pass
- def visit_type_alias(self, o: mypy.nodes.TypeAlias) -> T:
- pass
- def visit_placeholder_node(self, o: mypy.nodes.PlaceholderNode) -> T:
- pass
- # Statements
- def visit_block(self, o: mypy.nodes.Block) -> T:
- pass
- def visit_expression_stmt(self, o: mypy.nodes.ExpressionStmt) -> T:
- pass
- def visit_assignment_stmt(self, o: mypy.nodes.AssignmentStmt) -> T:
- pass
- def visit_operator_assignment_stmt(self, o: mypy.nodes.OperatorAssignmentStmt) -> T:
- pass
- def visit_while_stmt(self, o: mypy.nodes.WhileStmt) -> T:
- pass
- def visit_for_stmt(self, o: mypy.nodes.ForStmt) -> T:
- pass
- def visit_return_stmt(self, o: mypy.nodes.ReturnStmt) -> T:
- pass
- def visit_assert_stmt(self, o: mypy.nodes.AssertStmt) -> T:
- pass
- def visit_del_stmt(self, o: mypy.nodes.DelStmt) -> T:
- pass
- def visit_if_stmt(self, o: mypy.nodes.IfStmt) -> T:
- pass
- def visit_break_stmt(self, o: mypy.nodes.BreakStmt) -> T:
- pass
- def visit_continue_stmt(self, o: mypy.nodes.ContinueStmt) -> T:
- pass
- def visit_pass_stmt(self, o: mypy.nodes.PassStmt) -> T:
- pass
- def visit_raise_stmt(self, o: mypy.nodes.RaiseStmt) -> T:
- pass
- def visit_try_stmt(self, o: mypy.nodes.TryStmt) -> T:
- pass
- def visit_with_stmt(self, o: mypy.nodes.WithStmt) -> T:
- pass
- def visit_match_stmt(self, o: mypy.nodes.MatchStmt) -> T:
- pass
- # Expressions (default no-op implementation)
- def visit_int_expr(self, o: mypy.nodes.IntExpr) -> T:
- pass
- def visit_str_expr(self, o: mypy.nodes.StrExpr) -> T:
- pass
- def visit_bytes_expr(self, o: mypy.nodes.BytesExpr) -> T:
- pass
- def visit_float_expr(self, o: mypy.nodes.FloatExpr) -> T:
- pass
- def visit_complex_expr(self, o: mypy.nodes.ComplexExpr) -> T:
- pass
- def visit_ellipsis(self, o: mypy.nodes.EllipsisExpr) -> T:
- pass
- def visit_star_expr(self, o: mypy.nodes.StarExpr) -> T:
- pass
- def visit_name_expr(self, o: mypy.nodes.NameExpr) -> T:
- pass
- def visit_member_expr(self, o: mypy.nodes.MemberExpr) -> T:
- pass
- def visit_yield_from_expr(self, o: mypy.nodes.YieldFromExpr) -> T:
- pass
- def visit_yield_expr(self, o: mypy.nodes.YieldExpr) -> T:
- pass
- def visit_call_expr(self, o: mypy.nodes.CallExpr) -> T:
- pass
- def visit_op_expr(self, o: mypy.nodes.OpExpr) -> T:
- pass
- def visit_comparison_expr(self, o: mypy.nodes.ComparisonExpr) -> T:
- pass
- def visit_cast_expr(self, o: mypy.nodes.CastExpr) -> T:
- pass
- def visit_assert_type_expr(self, o: mypy.nodes.AssertTypeExpr) -> T:
- pass
- def visit_reveal_expr(self, o: mypy.nodes.RevealExpr) -> T:
- pass
- def visit_super_expr(self, o: mypy.nodes.SuperExpr) -> T:
- pass
- def visit_assignment_expr(self, o: mypy.nodes.AssignmentExpr) -> T:
- pass
- def visit_unary_expr(self, o: mypy.nodes.UnaryExpr) -> T:
- pass
- def visit_list_expr(self, o: mypy.nodes.ListExpr) -> T:
- pass
- def visit_dict_expr(self, o: mypy.nodes.DictExpr) -> T:
- pass
- def visit_tuple_expr(self, o: mypy.nodes.TupleExpr) -> T:
- pass
- def visit_set_expr(self, o: mypy.nodes.SetExpr) -> T:
- pass
- def visit_index_expr(self, o: mypy.nodes.IndexExpr) -> T:
- pass
- def visit_type_application(self, o: mypy.nodes.TypeApplication) -> T:
- pass
- def visit_lambda_expr(self, o: mypy.nodes.LambdaExpr) -> T:
- pass
- def visit_list_comprehension(self, o: mypy.nodes.ListComprehension) -> T:
- pass
- def visit_set_comprehension(self, o: mypy.nodes.SetComprehension) -> T:
- pass
- def visit_dictionary_comprehension(self, o: mypy.nodes.DictionaryComprehension) -> T:
- pass
- def visit_generator_expr(self, o: mypy.nodes.GeneratorExpr) -> T:
- pass
- def visit_slice_expr(self, o: mypy.nodes.SliceExpr) -> T:
- pass
- def visit_conditional_expr(self, o: mypy.nodes.ConditionalExpr) -> T:
- pass
- def visit_type_var_expr(self, o: mypy.nodes.TypeVarExpr) -> T:
- pass
- def visit_paramspec_expr(self, o: mypy.nodes.ParamSpecExpr) -> T:
- pass
- def visit_type_var_tuple_expr(self, o: mypy.nodes.TypeVarTupleExpr) -> T:
- pass
- def visit_type_alias_expr(self, o: mypy.nodes.TypeAliasExpr) -> T:
- pass
- def visit_namedtuple_expr(self, o: mypy.nodes.NamedTupleExpr) -> T:
- pass
- def visit_enum_call_expr(self, o: mypy.nodes.EnumCallExpr) -> T:
- pass
- def visit_typeddict_expr(self, o: mypy.nodes.TypedDictExpr) -> T:
- pass
- def visit_newtype_expr(self, o: mypy.nodes.NewTypeExpr) -> T:
- pass
- def visit__promote_expr(self, o: mypy.nodes.PromoteExpr) -> T:
- pass
- def visit_await_expr(self, o: mypy.nodes.AwaitExpr) -> T:
- pass
- def visit_temp_node(self, o: mypy.nodes.TempNode) -> T:
- pass
- # Patterns
- def visit_as_pattern(self, o: mypy.patterns.AsPattern) -> T:
- pass
- def visit_or_pattern(self, o: mypy.patterns.OrPattern) -> T:
- pass
- def visit_value_pattern(self, o: mypy.patterns.ValuePattern) -> T:
- pass
- def visit_singleton_pattern(self, o: mypy.patterns.SingletonPattern) -> T:
- pass
- def visit_sequence_pattern(self, o: mypy.patterns.SequencePattern) -> T:
- pass
- def visit_starred_pattern(self, o: mypy.patterns.StarredPattern) -> T:
- pass
- def visit_mapping_pattern(self, o: mypy.patterns.MappingPattern) -> T:
- pass
- def visit_class_pattern(self, o: mypy.patterns.ClassPattern) -> T:
- pass
|