@@ -1107,19 +1107,27 @@ def get_stub(module: str) -> Optional[nodes.MypyFile]:
1107
1107
return _all_stubs .get (module )
1108
1108
1109
1109
1110
- def get_typeshed_stdlib_modules (custom_typeshed_dir : Optional [str ]) -> List [str ]:
1110
+ def get_typeshed_stdlib_modules (
1111
+ custom_typeshed_dir : Optional [str ],
1112
+ version_info : Optional [Tuple [int , int ]] = None
1113
+ ) -> List [str ]:
1111
1114
"""Returns a list of stdlib modules in typeshed (for current Python version)."""
1112
1115
stdlib_py_versions = mypy .modulefinder .load_stdlib_py_versions (custom_typeshed_dir )
1113
- packages = set ()
1116
+ if version_info is None :
1117
+ version_info = sys .version_info [0 :2 ]
1114
1118
# Typeshed's minimum supported Python 3 is Python 3.6
1115
1119
if sys .version_info < (3 , 6 ):
1116
1120
version_info = (3 , 6 )
1117
- else :
1118
- version_info = sys .version_info [0 :2 ]
1119
- for module , versions in stdlib_py_versions .items ():
1120
- minver , maxver = versions
1121
- if version_info >= minver and (maxver is None or version_info <= maxver ):
1122
- packages .add (module )
1121
+
1122
+ def exists_in_version (module : str ) -> bool :
1123
+ assert version_info is not None
1124
+ parts = module .split ("." )
1125
+ for i in range (len (parts ), 0 , - 1 ):
1126
+ current_module = "." .join (parts [:i ])
1127
+ if current_module in stdlib_py_versions :
1128
+ minver , maxver = stdlib_py_versions [current_module ]
1129
+ return version_info >= minver and (maxver is None or version_info <= maxver )
1130
+ return False
1123
1131
1124
1132
if custom_typeshed_dir :
1125
1133
typeshed_dir = Path (custom_typeshed_dir )
@@ -1132,7 +1140,7 @@ def get_typeshed_stdlib_modules(custom_typeshed_dir: Optional[str]) -> List[str]
1132
1140
if path .stem == "__init__" :
1133
1141
path = path .parent
1134
1142
module = "." .join (path .relative_to (stdlib_dir ).parts [:- 1 ] + (path .stem ,))
1135
- if module . split ( "." )[ 0 ] in packages :
1143
+ if exists_in_version ( module ) :
1136
1144
modules .append (module )
1137
1145
return sorted (modules )
1138
1146
0 commit comments