649 lines
16 KiB
Python
649 lines
16 KiB
Python
"""Generic abstract syntax tree node visitor"""
|
|
|
|
from abc import abstractmethod
|
|
from typing import TypeVar, Generic
|
|
from typing_extensions import TYPE_CHECKING
|
|
from mypy_extensions import trait, mypyc_attr
|
|
|
|
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_unicode_expr(self, o: 'mypy.nodes.UnicodeExpr') -> 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_backquote_expr(self, o: 'mypy.nodes.BackquoteExpr') -> 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_print_stmt(self, o: 'mypy.nodes.PrintStmt') -> T:
|
|
pass
|
|
|
|
@abstractmethod
|
|
def visit_exec_stmt(self, o: 'mypy.nodes.ExecStmt') -> 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
|
|
"""
|
|
|
|
# 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_print_stmt(self, o: 'mypy.nodes.PrintStmt') -> T:
|
|
pass
|
|
|
|
def visit_exec_stmt(self, o: 'mypy.nodes.ExecStmt') -> 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_unicode_expr(self, o: 'mypy.nodes.UnicodeExpr') -> 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_backquote_expr(self, o: 'mypy.nodes.BackquoteExpr') -> 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
|