Skip to content

Commit 42e2178

Browse files
committed
refactor
1 parent 3c30736 commit 42e2178

2 files changed

Lines changed: 186 additions & 44 deletions

File tree

long_functions.csv

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
path,name,length,start,end
2+
mypy/main.py,define_options,880,465,1344
3+
mypy/options.py,__init__,329,93,421
4+
mypy/meet.py,is_overlapping_types,322,324,645
5+
mypy/checker.py,check_func_def,303,1296,1598
6+
mypy/constraints.py,visit_instance,274,762,1035
7+
mypy/test/teststubtest.py,test_has_runtime_final_decorator,254,1778,2031
8+
mypyc/irbuild/ll_builder.py,_construct_varargs,234,723,956
9+
mypy/messages.py,format_type_inner,228,2555,2782
10+
mypy/messages.py,report_protocol_problems,228,2118,2345
11+
mypy/plugins/dataclasses.py,collect_attributes,228,523,750
12+
mypy/messages.py,incompatible_argument,224,620,843
13+
mypy/modulefinder.py,_find_module,220,399,618
14+
mypy/typeanal.py,visit_unbound_type_nonoptional,216,298,513
15+
mypy/main.py,process_options,212,1347,1558
16+
mypy/messages.py,has_no_attr,206,362,567
17+
mypyc/build.py,mypycify,206,481,686
18+
mypy/semanal.py,check_and_set_up_type_alias,203,3956,4158
19+
mypyc/test/test_run.py,run_case_step,202,195,396
20+
mypy/checkmember.py,analyze_class_attribute_access,200,1132,1331
21+
mypy/typeanal.py,try_analyze_special_unbound_type,200,589,788
22+
mypy/test/typefixture.py,__init__,200,48,247
23+
mypy/subtypes.py,are_parameters_compatible,194,1747,1940
24+
mypy/exprtotype.py,expr_to_unanalyzed_type,189,64,252
25+
mypy/test/teststubtest.py,test_type_alias,188,1152,1339
26+
mypy/test/data.py,parse_test_case,186,57,242
27+
mypy/checker.py,find_isinstance_check_helper,183,6286,6468
28+
mypy/checker.py,check_assignment,181,3225,3405
29+
mypy/checkexpr.py,check_callable_call,180,1652,1831
30+
mypy/plugins/functools.py,handle_partial_with_callee,180,151,330
31+
mypy/checker.py,check_method_override_for_base_with_name,178,2269,2446
32+
mypyc/codegen/emitclass.py,generate_class,178,224,401
33+
mypy/checkexpr.py,check_op_reversible,175,3954,4128
34+
mypy/plugins/dataclasses.py,transform,174,231,404
35+
mypyc/codegen/emit.py,emit_cast,168,556,723
36+
mypy/build.py,load_graph,167,3098,3264
37+
mypy/constraints.py,infer_constraints_for_callable,167,110,276
38+
mypy/subtypes.py,visit_instance,167,475,641
39+
mypy/stubdoc.py,add_token,165,188,352
40+
mypy/checker.py,check_override,163,2464,2626
41+
mypy/checkpattern.py,visit_class_pattern,163,536,698
42+
mypy/semanal_namedtuple.py,build_namedtuple_typeinfo,163,502,664
43+
mypyc/codegen/emit.py,emit_unbox,161,838,998
44+
mypy/constraints.py,visit_callable_type,160,1078,1237
45+
mypy/fastparse.py,do_func_def,160,929,1088
46+
mypyc/irbuild/for_helpers.py,make_for_loop_generator,157,413,569
47+
mypy/test/teststubgen.py,test_infer_sig_from_docstring,157,222,378
48+
misc/perf_compare.py,main,155,115,269
49+
mypy/subtypes.py,is_callable_compatible,153,1567,1719
50+
mypy/checkexpr.py,visit_call_expr_inner,151,507,657
51+
mypy/checkexpr.py,visit_comparison_expr,148,3561,3708
52+
mypy/fastparse.py,fix_function_overloads,147,638,784
53+
mypy/typeanal.py,instantiate_type_alias,145,2091,2235
54+
mypy/checkexpr.py,check_overload_call,142,2672,2813
55+
mypy/semanal.py,visit_call_expr,142,5741,5882
56+
mypy/test/teststubtest.py,test_enum,142,1343,1484
57+
mypy/build.py,validate_meta,141,1455,1595
58+
mypyc/codegen/emitmodule.py,generate_shared_lib_init,141,772,912
59+
mypy/checkexpr.py,check_argument_types,139,2486,2624
60+
mypy/checkexpr.py,infer_function_type_arguments,138,2057,2194
61+
mypy/checker.py,refine_identity_comparison_expression,137,6837,6973
62+
mypyc/codegen/emitmodule.py,generate_c_for_modules,137,540,676
63+
mypyc/ir/class_ir.py,__init__,137,88,224
64+
mypy/stubgen.py,parse_options,136,1898,2033
65+
mypy/stubtest.py,test_stubs,135,2224,2358
66+
mypy/checkmember.py,analyze_member_var_access,132,522,653
67+
mypy/test/teststubtest.py,test_overload,132,745,876
68+
mypy/checker.py,check_overlapping_overloads,130,874,1003
69+
mypy/checkexpr.py,dangerous_comparison,130,3726,3855
70+
mypy/build.py,__init__,129,633,761
71+
mypy/build.py,write_cache,128,1607,1734
72+
mypy/stubtest.py,get_mypy_type_of_runtime_value,127,1875,2001
73+
mypy/checkpattern.py,visit_sequence_pattern,125,230,354
74+
mypy/dmypy_server.py,fine_grained_increment_follow_imports,125,601,725
75+
mypyc/irbuild/statement.py,emit_yield_from_or_await,125,1101,1225
76+
mypy/typeanal.py,analyze_unbound_type_without_type_info,122,912,1033
77+
mypy/checkexpr.py,check_call,121,1530,1650
78+
mypy/subtypes.py,is_protocol_implementation,120,1158,1277
79+
mypyc/irbuild/classdef.py,transform_class_def,120,88,207
80+
mypyc/irbuild/function.py,gen_func_item,120,169,288
81+
mypy/server/update.py,update_module_isolated,120,561,680
82+
mypy/checker.py,refine_parent_types,119,6699,6817
83+
mypy/semanal_namedtuple.py,parse_namedtuple_args,119,338,456
84+
mypy/stubtest.py,_verify_signature,118,1055,1172
85+
mypy/test/meta/test_update_data.py,test_update_data,116,20,135
86+
mypy/semanal.py,analyze_func_def,115,934,1048
87+
mypy/checker.py,comparison_type_narrowing_helper,114,6470,6583
88+
mypy/main.py,main,114,62,175
89+
mypy/build.py,__init__,113,1961,2073
90+
mypy/checker.py,check_return_stmt,113,4895,5007
91+
mypyc/irbuild/ll_builder.py,binary_op,113,1393,1505
92+
mypy/test/test_find_sources.py,test_find_sources_exclude,113,264,376
93+
mypy/semanal_typeddict.py,analyze_typeddict_classdef,111,70,180
94+
mypy/plugins/enums.py,enum_value_callback,111,160,270
95+
mypy/semanal.py,visit_type_alias_stmt,110,5551,5660
96+
mypy/checkexpr.py,check_op,109,4130,4238
97+
mypyc/analysis/dataflow.py,run_analysis,109,514,622
98+
misc/incremental_checker.py,main,108,395,502
99+
mypy/checker.py,check_simple_assignment,108,4587,4694
100+
mypy/checkexpr.py,visit_op_expr,108,3452,3559
101+
mypy/semanal_namedtuple.py,check_namedtuple,108,222,329
102+
mypy/stubgenc.py,infer_c_method_args,108,939,1046
103+
mypyc/irbuild/prepare.py,prepare_class_def,108,348,455
104+
mypy/checkmember.py,analyze_descriptor_access,107,664,770
105+
mypy/config_parser.py,parse_section,107,483,589
106+
mypy/stubgenc.py,get_default_function_sig,107,270,376
107+
mypy/constraints.py,_infer_constraints,106,323,428
108+
mypy/join.py,join_tuples,106,455,560
109+
mypyc/irbuild/statement.py,transform_try_finally_stmt_async,106,758,863
110+
mypy/meet.py,narrow_declared_type,105,116,220
111+
mypy/stubgenc.py,generate_class_stub,105,804,908
112+
mypy/test/teststubtest.py,test_property,105,880,984
113+
mypy/build.py,process_stale_scc,104,3458,3561
114+
mypy/checkexpr.py,visit_tuple_expr,104,5147,5250
115+
mypy/messages.py,pretty_callable,103,2951,3053
116+
mypy/semanal_enum.py,parse_enum_call_args,102,157,258
117+
mypy/stubtest.py,verify_typeinfo,102,609,710
118+
mypy/checker.py,intersect_instances,101,5810,5910
119+
mypy/checkexpr.py,union_overload_result,101,3017,3117
120+
mypy/constraints.py,visit_tuple_type,101,1250,1350
121+
mypy/errors.py,add_error_info,101,603,703
122+
mypy/server/astdiff.py,snapshot_definition,101,231,331

mypy/test/data.py

Lines changed: 64 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from dataclasses import dataclass
1515
from pathlib import Path
1616
from re import Pattern
17-
from typing import Any, Final, NamedTuple, NoReturn, Union
17+
from typing import Any, Callable, Final, NamedTuple, NoReturn, Union
1818
from typing_extensions import TypeAlias as _TypeAlias
1919

2020
import pytest
@@ -54,6 +54,66 @@ def _file_arg_to_module(filename: str) -> str:
5454
return ".".join(parts)
5555

5656

57+
def _handle_out_section(
58+
item: TestItem,
59+
case: DataDrivenTestCase,
60+
output: list[str],
61+
output2: dict[int, list[str]],
62+
out_section_missing: bool,
63+
item_fail: Callable[[str], NoReturn],
64+
) -> bool:
65+
"""Handle an "out" / "outN" section from a test item.
66+
67+
Mutates `output` (in-place) or `output2` and returns the updated
68+
`out_section_missing` flag.
69+
"""
70+
if item.arg is None:
71+
args = []
72+
else:
73+
args = item.arg.split(",")
74+
75+
version_check = True
76+
for arg in args:
77+
if arg.startswith("version"):
78+
compare_op = arg[7:9]
79+
if compare_op not in {">=", "=="}:
80+
item_fail("Only >= and == version checks are currently supported")
81+
version_str = arg[9:]
82+
try:
83+
version = tuple(int(x) for x in version_str.split("."))
84+
except ValueError:
85+
item_fail(f"{version_str!r} is not a valid python version")
86+
if compare_op == ">=":
87+
if version <= defaults.PYTHON3_VERSION:
88+
item_fail(
89+
f"{arg} always true since minimum runtime version is {defaults.PYTHON3_VERSION}"
90+
)
91+
version_check = sys.version_info >= version
92+
elif compare_op == "==":
93+
if version < defaults.PYTHON3_VERSION:
94+
item_fail(
95+
f"{arg} always false since minimum runtime version is {defaults.PYTHON3_VERSION}"
96+
)
97+
if not 1 < len(version) < 4:
98+
item_fail(
99+
f'Only minor or patch version checks are currently supported with "==": {version_str!r}'
100+
)
101+
version_check = sys.version_info[: len(version)] == version
102+
if version_check:
103+
tmp_output = [expand_variables(line) for line in item.data]
104+
if os.path.sep == "\\" and case.normalize_output:
105+
tmp_output = [fix_win_path(line) for line in tmp_output]
106+
if item.id == "out" or item.id == "out1":
107+
# modify in place so caller's `output` reference is preserved
108+
output[:] = tmp_output
109+
else:
110+
passnum = int(item.id[len("out") :])
111+
assert passnum > 1
112+
output2[passnum] = tmp_output
113+
out_section_missing = False
114+
return out_section_missing
115+
116+
57117
def parse_test_case(case: DataDrivenTestCase) -> None:
58118
"""Parse and prepare a single case from suite with test case descriptions.
59119
@@ -150,49 +210,9 @@ def _item_fail(msg: str) -> NoReturn:
150210
full = join(base_path, m.group(1))
151211
deleted_paths.setdefault(num, set()).add(full)
152212
elif re.match(r"out[0-9]*$", item.id):
153-
if item.arg is None:
154-
args = []
155-
else:
156-
args = item.arg.split(",")
157-
158-
version_check = True
159-
for arg in args:
160-
if arg.startswith("version"):
161-
compare_op = arg[7:9]
162-
if compare_op not in {">=", "=="}:
163-
_item_fail("Only >= and == version checks are currently supported")
164-
version_str = arg[9:]
165-
try:
166-
version = tuple(int(x) for x in version_str.split("."))
167-
except ValueError:
168-
_item_fail(f"{version_str!r} is not a valid python version")
169-
if compare_op == ">=":
170-
if version <= defaults.PYTHON3_VERSION:
171-
_item_fail(
172-
f"{arg} always true since minimum runtime version is {defaults.PYTHON3_VERSION}"
173-
)
174-
version_check = sys.version_info >= version
175-
elif compare_op == "==":
176-
if version < defaults.PYTHON3_VERSION:
177-
_item_fail(
178-
f"{arg} always false since minimum runtime version is {defaults.PYTHON3_VERSION}"
179-
)
180-
if not 1 < len(version) < 4:
181-
_item_fail(
182-
f'Only minor or patch version checks are currently supported with "==": {version_str!r}'
183-
)
184-
version_check = sys.version_info[: len(version)] == version
185-
if version_check:
186-
tmp_output = [expand_variables(line) for line in item.data]
187-
if os.path.sep == "\\" and case.normalize_output:
188-
tmp_output = [fix_win_path(line) for line in tmp_output]
189-
if item.id == "out" or item.id == "out1":
190-
output = tmp_output
191-
else:
192-
passnum = int(item.id[len("out") :])
193-
assert passnum > 1
194-
output2[passnum] = tmp_output
195-
out_section_missing = False
213+
out_section_missing = _handle_out_section(
214+
item, case, output, output2, out_section_missing, _item_fail
215+
)
196216
elif item.id == "triggered" and item.arg is None:
197217
triggered = item.data
198218
else:

0 commit comments

Comments
 (0)