@zzzen/pyright-internal 1.1.255 → 1.2.0-dev.20220703

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1456) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/analyzer/aliasDeclarationUtils.js +2 -2
  4. package/dist/analyzer/analyzerFileInfo.d.ts +1 -1
  5. package/dist/analyzer/analyzerNodeInfo.d.ts +4 -1
  6. package/dist/analyzer/analyzerNodeInfo.js +12 -1
  7. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  8. package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -0
  9. package/dist/analyzer/backgroundAnalysisProgram.js +3 -0
  10. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  11. package/dist/analyzer/binder.d.ts +6 -1
  12. package/dist/analyzer/binder.js +142 -32
  13. package/dist/analyzer/binder.js.map +1 -1
  14. package/dist/analyzer/checker.d.ts +4 -1
  15. package/dist/analyzer/checker.js +144 -73
  16. package/dist/analyzer/checker.js.map +1 -1
  17. package/dist/analyzer/codeFlowUtils.js +33 -0
  18. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  19. package/dist/analyzer/constraintSolver.js +6 -3
  20. package/dist/analyzer/constraintSolver.js.map +1 -1
  21. package/dist/analyzer/dataClasses.js +6 -4
  22. package/dist/analyzer/dataClasses.js.map +1 -1
  23. package/dist/analyzer/declaration.d.ts +18 -6
  24. package/dist/analyzer/declaration.js +25 -5
  25. package/dist/analyzer/declaration.js.map +1 -1
  26. package/dist/analyzer/declarationUtils.d.ts +1 -1
  27. package/dist/analyzer/declarationUtils.js +19 -16
  28. package/dist/analyzer/declarationUtils.js.map +1 -1
  29. package/dist/analyzer/importResult.js +7 -0
  30. package/dist/analyzer/importResult.js.map +1 -1
  31. package/dist/analyzer/importStatementUtils.js +10 -1
  32. package/dist/analyzer/importStatementUtils.js.map +1 -1
  33. package/dist/analyzer/namedTuples.js +1 -1
  34. package/dist/analyzer/namedTuples.js.map +1 -1
  35. package/dist/analyzer/packageTypeReport.js +10 -1
  36. package/dist/analyzer/packageTypeReport.js.map +1 -1
  37. package/dist/analyzer/packageTypeVerifier.js +6 -6
  38. package/dist/analyzer/parseTreeUtils.d.ts +3 -3
  39. package/dist/analyzer/parseTreeUtils.js +27 -13
  40. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  41. package/dist/analyzer/parseTreeWalker.d.ts +4 -1
  42. package/dist/analyzer/parseTreeWalker.js +19 -1
  43. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  44. package/dist/analyzer/program.d.ts +2 -1
  45. package/dist/analyzer/program.js +27 -23
  46. package/dist/analyzer/program.js.map +1 -1
  47. package/dist/analyzer/properties.js +2 -0
  48. package/dist/analyzer/properties.js.map +1 -1
  49. package/dist/analyzer/protocols.d.ts +0 -1
  50. package/dist/analyzer/protocols.js +4 -64
  51. package/dist/analyzer/protocols.js.map +1 -1
  52. package/dist/analyzer/scope.js +22 -1
  53. package/dist/analyzer/scope.js.map +1 -1
  54. package/dist/analyzer/service.d.ts +20 -8
  55. package/dist/analyzer/service.js +39 -19
  56. package/dist/analyzer/service.js.map +1 -1
  57. package/dist/analyzer/sourceFile.js +1 -1
  58. package/dist/analyzer/sourceFile.js.map +1 -1
  59. package/dist/analyzer/sourceFileInfoUtils.d.ts +2 -0
  60. package/dist/analyzer/sourceFileInfoUtils.js +15 -0
  61. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -0
  62. package/dist/analyzer/symbol.d.ts +3 -1
  63. package/dist/analyzer/symbol.js +39 -1
  64. package/dist/analyzer/symbol.js.map +1 -1
  65. package/dist/analyzer/tracePrinter.js +8 -4
  66. package/dist/analyzer/tracePrinter.js.map +1 -1
  67. package/dist/analyzer/typeDocStringUtils.js +11 -3
  68. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  69. package/dist/analyzer/typeEvaluator.js +610 -208
  70. package/dist/analyzer/typeEvaluator.js.map +1 -1
  71. package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -1
  72. package/dist/analyzer/typeEvaluatorTypes.js +65 -1
  73. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  74. package/dist/analyzer/typeEvaluatorWithTracker.js +2 -0
  75. package/dist/analyzer/typeEvaluatorWithTracker.js.map +1 -1
  76. package/dist/analyzer/typeGuards.d.ts +2 -0
  77. package/dist/analyzer/typeGuards.js +113 -69
  78. package/dist/analyzer/typeGuards.js.map +1 -1
  79. package/dist/analyzer/typePrinter.js +27 -2
  80. package/dist/analyzer/typePrinter.js.map +1 -1
  81. package/dist/analyzer/typeStubWriter.d.ts +4 -1
  82. package/dist/analyzer/typeStubWriter.js +36 -0
  83. package/dist/analyzer/typeStubWriter.js.map +1 -1
  84. package/dist/analyzer/typeUtils.js +129 -33
  85. package/dist/analyzer/typeUtils.js.map +1 -1
  86. package/dist/analyzer/typedDicts.js +2 -1
  87. package/dist/analyzer/typedDicts.js.map +1 -1
  88. package/dist/analyzer/types.d.ts +12 -4
  89. package/dist/analyzer/types.js +215 -6
  90. package/dist/analyzer/types.js.map +1 -1
  91. package/dist/backgroundAnalysisBase.d.ts +1 -1
  92. package/dist/commands/commands.js +9 -0
  93. package/dist/commands/commands.js.map +1 -1
  94. package/dist/common/commandLineOptions.js +8 -1
  95. package/dist/common/commandLineOptions.js.map +1 -1
  96. package/dist/common/core.js +7 -1
  97. package/dist/common/core.js.map +1 -1
  98. package/dist/common/diagnostic.js +9 -1
  99. package/dist/common/diagnostic.js.map +1 -1
  100. package/dist/common/host.js +7 -1
  101. package/dist/common/host.js.map +1 -1
  102. package/dist/common/pathUtils.d.ts +1 -0
  103. package/dist/common/pathUtils.js +34 -1
  104. package/dist/common/pathUtils.js.map +1 -1
  105. package/dist/common/stringUtils.d.ts +1 -0
  106. package/dist/common/stringUtils.js +8 -1
  107. package/dist/common/stringUtils.js.map +1 -1
  108. package/dist/languageServerBase.d.ts +10 -3
  109. package/dist/languageServerBase.js +40 -14
  110. package/dist/languageServerBase.js.map +1 -1
  111. package/dist/languageService/analyzerServiceExecutor.js +3 -0
  112. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  113. package/dist/languageService/autoImporter.js +2 -1
  114. package/dist/languageService/autoImporter.js.map +1 -1
  115. package/dist/languageService/callHierarchyProvider.js +9 -9
  116. package/dist/languageService/completionProvider.d.ts +2 -2
  117. package/dist/languageService/completionProvider.js +22 -18
  118. package/dist/languageService/completionProvider.js.map +1 -1
  119. package/dist/languageService/definitionProvider.js +3 -3
  120. package/dist/languageService/documentSymbolCollector.js +1 -1
  121. package/dist/languageService/documentSymbolProvider.js +10 -7
  122. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  123. package/dist/languageService/hoverProvider.js +19 -5
  124. package/dist/languageService/hoverProvider.js.map +1 -1
  125. package/dist/languageService/referencesProvider.js +8 -5
  126. package/dist/languageService/referencesProvider.js.map +1 -1
  127. package/dist/languageService/tooltipUtils.js +1 -1
  128. package/dist/localization/localize.d.ts +27 -0
  129. package/dist/localization/localize.js +16 -0
  130. package/dist/localization/localize.js.map +1 -1
  131. package/dist/localization/package.nls.en-us.json +18 -2
  132. package/dist/parser/parseNodes.d.ts +44 -5
  133. package/dist/parser/parseNodes.js +191 -4
  134. package/dist/parser/parseNodes.js.map +1 -1
  135. package/dist/parser/parser.d.ts +3 -1
  136. package/dist/parser/parser.js +155 -24
  137. package/dist/parser/parser.js.map +1 -1
  138. package/dist/parser/stringTokenUtils.js +8 -1
  139. package/dist/parser/stringTokenUtils.js.map +1 -1
  140. package/dist/parser/tokenizer.js +4 -3
  141. package/dist/parser/tokenizer.js.map +1 -1
  142. package/dist/parser/tokenizerTypes.d.ts +5 -3
  143. package/dist/parser/tokenizerTypes.js +157 -1
  144. package/dist/parser/tokenizerTypes.js.map +1 -1
  145. package/dist/pyright.js +6 -1
  146. package/dist/pyright.js.map +1 -1
  147. package/dist/tests/chainedSourceFiles.test.js +12 -9
  148. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  149. package/dist/tests/checker.test.js +4 -0
  150. package/dist/tests/checker.test.js.map +1 -1
  151. package/dist/tests/config.test.js +14 -13
  152. package/dist/tests/config.test.js.map +1 -1
  153. package/dist/tests/debug.test.js +6 -0
  154. package/dist/tests/debug.test.js.map +1 -1
  155. package/dist/tests/fourslash/completions.autoimport.lib.alias.fourslash.d.ts +1 -0
  156. package/dist/tests/fourslash/completions.autoimport.lib.alias.fourslash.js +53 -0
  157. package/dist/tests/fourslash/completions.autoimport.lib.alias.fourslash.js.map +1 -0
  158. package/dist/tests/fourslash/fourslash.d.ts +16 -0
  159. package/dist/tests/fourslash/hover.class.docString.fourslash.d.ts +1 -0
  160. package/dist/tests/fourslash/hover.class.docString.fourslash.js +24 -0
  161. package/dist/tests/fourslash/hover.class.docString.fourslash.js.map +1 -0
  162. package/dist/tests/harness/fourslash/fourSlashParser.js +6 -0
  163. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  164. package/dist/tests/harness/fourslash/fourSlashTypes.js +19 -1
  165. package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
  166. package/dist/tests/harness/fourslash/testLanguageService.js +9 -1
  167. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  168. package/dist/tests/harness/fourslash/testState.Consts.d.ts +1 -0
  169. package/dist/tests/harness/fourslash/testState.Consts.js +1 -0
  170. package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
  171. package/dist/tests/harness/fourslash/testState.d.ts +4 -3
  172. package/dist/tests/harness/fourslash/testState.js +27 -11
  173. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  174. package/dist/tests/harness/vfs/pathValidation.js +25 -1
  175. package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
  176. package/dist/tests/pathUtils.test.js +17 -0
  177. package/dist/tests/pathUtils.test.js.map +1 -1
  178. package/dist/tests/testUtils.js +1 -1
  179. package/dist/tests/testUtils.js.map +1 -1
  180. package/dist/tests/typeEvaluator1.test.js +9 -1
  181. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  182. package/dist/tests/typeEvaluator2.test.js +9 -1
  183. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  184. package/dist/tests/typeEvaluator3.test.js +4 -0
  185. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  186. package/dist/tests/typeEvaluator5.test.d.ts +1 -0
  187. package/dist/tests/typeEvaluator5.test.js +112 -0
  188. package/dist/tests/typeEvaluator5.test.js.map +1 -0
  189. package/dist/workspaceMap.d.ts +2 -1
  190. package/dist/workspaceMap.js +25 -3
  191. package/dist/workspaceMap.js.map +1 -1
  192. package/package.json +45 -45
  193. package/src/analyzer/aliasDeclarationUtils.ts +0 -169
  194. package/src/analyzer/analysis.ts +0 -92
  195. package/src/analyzer/analyzerFileInfo.ts +0 -56
  196. package/src/analyzer/analyzerNodeInfo.ts +0 -198
  197. package/src/analyzer/backgroundAnalysisProgram.ts +0 -311
  198. package/src/analyzer/binder.ts +0 -4081
  199. package/src/analyzer/checker.ts +0 -5507
  200. package/src/analyzer/circularDependency.ts +0 -52
  201. package/src/analyzer/codeFlowEngine.ts +0 -1548
  202. package/src/analyzer/codeFlowTypes.ts +0 -266
  203. package/src/analyzer/codeFlowUtils.ts +0 -436
  204. package/src/analyzer/commentUtils.ts +0 -174
  205. package/src/analyzer/constraintSolver.ts +0 -926
  206. package/src/analyzer/constructorTransform.ts +0 -317
  207. package/src/analyzer/dataClasses.ts +0 -999
  208. package/src/analyzer/declaration.ts +0 -252
  209. package/src/analyzer/declarationUtils.ts +0 -238
  210. package/src/analyzer/docStringConversion.ts +0 -850
  211. package/src/analyzer/docStringUtils.ts +0 -112
  212. package/src/analyzer/functionTransform.ts +0 -137
  213. package/src/analyzer/importResolver.ts +0 -2308
  214. package/src/analyzer/importResult.ts +0 -98
  215. package/src/analyzer/importStatementUtils.ts +0 -834
  216. package/src/analyzer/namedTuples.ts +0 -422
  217. package/src/analyzer/packageTypeReport.ts +0 -108
  218. package/src/analyzer/packageTypeVerifier.ts +0 -1466
  219. package/src/analyzer/parentDirectoryCache.ts +0 -88
  220. package/src/analyzer/parseTreeCleaner.ts +0 -35
  221. package/src/analyzer/parseTreeUtils.ts +0 -2165
  222. package/src/analyzer/parseTreeWalker.ts +0 -663
  223. package/src/analyzer/patternMatching.ts +0 -1356
  224. package/src/analyzer/program.ts +0 -2778
  225. package/src/analyzer/properties.ts +0 -534
  226. package/src/analyzer/protocols.ts +0 -660
  227. package/src/analyzer/pyTypedUtils.ts +0 -52
  228. package/src/analyzer/pythonPathUtils.ts +0 -201
  229. package/src/analyzer/scope.ts +0 -202
  230. package/src/analyzer/scopeUtils.ts +0 -81
  231. package/src/analyzer/service.ts +0 -1679
  232. package/src/analyzer/sourceFile.ts +0 -1401
  233. package/src/analyzer/sourceMapper.ts +0 -717
  234. package/src/analyzer/staticExpressions.ts +0 -308
  235. package/src/analyzer/symbol.ts +0 -249
  236. package/src/analyzer/symbolNameUtils.ts +0 -50
  237. package/src/analyzer/symbolUtils.ts +0 -49
  238. package/src/analyzer/testWalker.ts +0 -101
  239. package/src/analyzer/tracePrinter.ts +0 -264
  240. package/src/analyzer/typeCache.ts +0 -181
  241. package/src/analyzer/typeDocStringUtils.ts +0 -371
  242. package/src/analyzer/typeEvaluator.ts +0 -23395
  243. package/src/analyzer/typeEvaluatorTypes.ts +0 -452
  244. package/src/analyzer/typeEvaluatorWithTracker.ts +0 -161
  245. package/src/analyzer/typeGuards.ts +0 -1828
  246. package/src/analyzer/typePrinter.ts +0 -807
  247. package/src/analyzer/typeStubWriter.ts +0 -727
  248. package/src/analyzer/typeUtils.ts +0 -3126
  249. package/src/analyzer/typeVarContext.ts +0 -330
  250. package/src/analyzer/typedDicts.ts +0 -950
  251. package/src/analyzer/types.ts +0 -2857
  252. package/src/backgroundAnalysis.ts +0 -49
  253. package/src/backgroundAnalysisBase.ts +0 -606
  254. package/src/backgroundThreadBase.ts +0 -143
  255. package/src/commands/commandController.ts +0 -62
  256. package/src/commands/commandResult.ts +0 -21
  257. package/src/commands/commands.ts +0 -16
  258. package/src/commands/createTypeStub.ts +0 -56
  259. package/src/commands/quickActionCommand.ts +0 -40
  260. package/src/commands/restartServer.ts +0 -20
  261. package/src/common/cancellationUtils.ts +0 -71
  262. package/src/common/chokidarFileWatcherProvider.ts +0 -74
  263. package/src/common/collectionUtils.ts +0 -379
  264. package/src/common/commandLineOptions.ts +0 -132
  265. package/src/common/configOptions.ts +0 -1291
  266. package/src/common/console.ts +0 -201
  267. package/src/common/core.ts +0 -152
  268. package/src/common/crypto.ts +0 -60
  269. package/src/common/debug.ts +0 -144
  270. package/src/common/deferred.ts +0 -78
  271. package/src/common/diagnostic.ts +0 -191
  272. package/src/common/diagnosticRules.ts +0 -80
  273. package/src/common/diagnosticSink.ts +0 -150
  274. package/src/common/editAction.ts +0 -46
  275. package/src/common/extensibility.ts +0 -35
  276. package/src/common/extensions.ts +0 -21
  277. package/src/common/fileBasedCancellationUtils.ts +0 -274
  278. package/src/common/fileSystem.ts +0 -152
  279. package/src/common/fullAccessHost.ts +0 -203
  280. package/src/common/host.ts +0 -49
  281. package/src/common/logTracker.ts +0 -157
  282. package/src/common/lspUtils.ts +0 -18
  283. package/src/common/memUtils.ts +0 -36
  284. package/src/common/pathConsts.ts +0 -16
  285. package/src/common/pathUtils.ts +0 -987
  286. package/src/common/positionUtils.ts +0 -78
  287. package/src/common/progressReporter.ts +0 -53
  288. package/src/common/pythonVersion.ts +0 -74
  289. package/src/common/realFileSystem.ts +0 -433
  290. package/src/common/stringUtils.ts +0 -161
  291. package/src/common/textEditUtils.ts +0 -31
  292. package/src/common/textRange.ts +0 -225
  293. package/src/common/textRangeCollection.ts +0 -122
  294. package/src/common/timing.ts +0 -105
  295. package/src/common/uriParser.ts +0 -26
  296. package/src/common/workspaceEditUtils.ts +0 -100
  297. package/src/languageServerBase.ts +0 -1556
  298. package/src/languageService/analyzerServiceExecutor.ts +0 -144
  299. package/src/languageService/autoImporter.ts +0 -926
  300. package/src/languageService/callHierarchyProvider.ts +0 -476
  301. package/src/languageService/codeActionProvider.ts +0 -85
  302. package/src/languageService/completionProvider.ts +0 -3103
  303. package/src/languageService/definitionProvider.ts +0 -235
  304. package/src/languageService/documentHighlightProvider.ts +0 -61
  305. package/src/languageService/documentSymbolCollector.ts +0 -466
  306. package/src/languageService/documentSymbolProvider.ts +0 -466
  307. package/src/languageService/hoverProvider.ts +0 -499
  308. package/src/languageService/importAdder.ts +0 -437
  309. package/src/languageService/importSorter.ts +0 -196
  310. package/src/languageService/indentationUtils.ts +0 -813
  311. package/src/languageService/quickActions.ts +0 -113
  312. package/src/languageService/referencesProvider.ts +0 -316
  313. package/src/languageService/renameModuleProvider.ts +0 -1400
  314. package/src/languageService/signatureHelpProvider.ts +0 -227
  315. package/src/languageService/tooltipUtils.ts +0 -147
  316. package/src/localization/localize.ts +0 -1272
  317. package/src/localization/package.nls.de.json +0 -3
  318. package/src/localization/package.nls.en-us.json +0 -636
  319. package/src/localization/package.nls.es.json +0 -3
  320. package/src/localization/package.nls.fr.json +0 -3
  321. package/src/localization/package.nls.ja.json +0 -3
  322. package/src/localization/package.nls.ru.json +0 -3
  323. package/src/localization/package.nls.zh-cn.json +0 -3
  324. package/src/localization/package.nls.zh-tw.json +0 -3
  325. package/src/nodeMain.ts +0 -21
  326. package/src/nodeServer.ts +0 -30
  327. package/src/parser/characterStream.ts +0 -145
  328. package/src/parser/characters.ts +0 -285
  329. package/src/parser/parseNodes.ts +0 -2338
  330. package/src/parser/parser.ts +0 -4859
  331. package/src/parser/stringTokenUtils.ts +0 -564
  332. package/src/parser/tokenizer.ts +0 -1379
  333. package/src/parser/tokenizerTypes.ts +0 -420
  334. package/src/parser/unicode.ts +0 -2917
  335. package/src/pyright.ts +0 -824
  336. package/src/pyrightFileSystem.ts +0 -237
  337. package/src/readonlyAugmentedFileSystem.ts +0 -204
  338. package/src/server.ts +0 -298
  339. package/src/tests/chainedSourceFiles.test.ts +0 -183
  340. package/src/tests/checker.test.ts +0 -445
  341. package/src/tests/collectionUtils.test.ts +0 -178
  342. package/src/tests/common.test.ts +0 -117
  343. package/src/tests/config.test.ts +0 -291
  344. package/src/tests/debug.test.ts +0 -120
  345. package/src/tests/deferred.test.ts +0 -54
  346. package/src/tests/diagnosticOverrides.test.ts +0 -104
  347. package/src/tests/docStringConversion.test.ts +0 -823
  348. package/src/tests/docStringUtils.test.ts +0 -57
  349. package/src/tests/documentSymbolCollector.test.ts +0 -735
  350. package/src/tests/filesystem.test.ts +0 -215
  351. package/src/tests/fourSlashParser.test.ts +0 -330
  352. package/src/tests/fourSlashRunner.test.ts +0 -36
  353. package/src/tests/fourslash/completions.autoimport.Lib.Found.Type.fourslash.ts +0 -33
  354. package/src/tests/fourslash/completions.autoimport.Lib.Found.duplication.fourslash.ts +0 -47
  355. package/src/tests/fourslash/completions.autoimport.Lib.NotFound.fourslash.ts +0 -14
  356. package/src/tests/fourslash/completions.autoimport.disabled.fourslash.ts +0 -25
  357. package/src/tests/fourslash/completions.autoimport.duplicates.fourslash.ts +0 -36
  358. package/src/tests/fourslash/completions.autoimport.fourslash.ts +0 -29
  359. package/src/tests/fourslash/completions.autoimport.fromImport.fourslash.ts +0 -130
  360. package/src/tests/fourslash/completions.autoimport.plainText.fourslash.ts +0 -29
  361. package/src/tests/fourslash/completions.autoimport.shadow.fourslash.ts +0 -48
  362. package/src/tests/fourslash/completions.autoimport.submodule.fourslash.ts +0 -31
  363. package/src/tests/fourslash/completions.autoimport.topLevel.fourslash.ts +0 -57
  364. package/src/tests/fourslash/completions.builtinDocstrings.fourslash.ts +0 -117
  365. package/src/tests/fourslash/completions.builtinOverride.fourslash.ts +0 -22
  366. package/src/tests/fourslash/completions.call.stringLiteral.fourslash.ts +0 -55
  367. package/src/tests/fourslash/completions.call.typedDict.fourslash.ts +0 -247
  368. package/src/tests/fourslash/completions.call.typedDict.list.fourslash.ts +0 -163
  369. package/src/tests/fourslash/completions.call.typedDict.states.fourslash.ts +0 -135
  370. package/src/tests/fourslash/completions.classVariable.fourslash.ts +0 -37
  371. package/src/tests/fourslash/completions.comment.fourslash.ts +0 -28
  372. package/src/tests/fourslash/completions.declNames.class.fourslash.ts +0 -35
  373. package/src/tests/fourslash/completions.declNames.exception.fourslash.ts +0 -18
  374. package/src/tests/fourslash/completions.declNames.for.fourslash.ts +0 -30
  375. package/src/tests/fourslash/completions.declNames.importAlias.fourslash.ts +0 -15
  376. package/src/tests/fourslash/completions.declNames.lambda.fourslash.ts +0 -45
  377. package/src/tests/fourslash/completions.declNames.method.fourslash.ts +0 -71
  378. package/src/tests/fourslash/completions.declNames.overload.fourslash.ts +0 -156
  379. package/src/tests/fourslash/completions.declNames.topLevelOverload.fourslash.ts +0 -141
  380. package/src/tests/fourslash/completions.dictionary.keys.complex.fourslash.ts +0 -76
  381. package/src/tests/fourslash/completions.dictionary.keys.expression.fourslash.ts +0 -63
  382. package/src/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.ts +0 -161
  383. package/src/tests/fourslash/completions.dictionary.keys.simple.fourslash.ts +0 -151
  384. package/src/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.ts +0 -116
  385. package/src/tests/fourslash/completions.dictionary.keys.symbols.fourslash.ts +0 -53
  386. package/src/tests/fourslash/completions.enums.members.fourslash.ts +0 -44
  387. package/src/tests/fourslash/completions.excluded.fourslash.ts +0 -12
  388. package/src/tests/fourslash/completions.fourslash.ts +0 -51
  389. package/src/tests/fourslash/completions.fstring.fourslash.ts +0 -33
  390. package/src/tests/fourslash/completions.fstring.stringLiteral.fourslash.ts +0 -96
  391. package/src/tests/fourslash/completions.fuzzyMatching.fourslash.ts +0 -30
  392. package/src/tests/fourslash/completions.importDunderNames.fourslash.ts +0 -31
  393. package/src/tests/fourslash/completions.importSubmodule.fourslash.ts +0 -26
  394. package/src/tests/fourslash/completions.importsDuplicates.fourslash.ts +0 -23
  395. package/src/tests/fourslash/completions.inList.fourslash.ts +0 -33
  396. package/src/tests/fourslash/completions.included.fourslash.ts +0 -12
  397. package/src/tests/fourslash/completions.indexer.keys.getitem.fourslash.ts +0 -57
  398. package/src/tests/fourslash/completions.inherited.function.docFromStub.fourslash.ts +0 -28
  399. package/src/tests/fourslash/completions.inherited.overload.docFromScrWithStub.fourslash.ts +0 -52
  400. package/src/tests/fourslash/completions.inherited.overload.docFromStub.fourslash.ts +0 -53
  401. package/src/tests/fourslash/completions.inherited.property.docFromSrc.fourslash.ts +0 -104
  402. package/src/tests/fourslash/completions.inherited.property.docFromStub.fourslash.ts +0 -108
  403. package/src/tests/fourslash/completions.keywords.pythonVersion.fourslash.ts +0 -72
  404. package/src/tests/fourslash/completions.libCodeAndStub.fourslash.ts +0 -79
  405. package/src/tests/fourslash/completions.libCodeNoStub.fourslash.ts +0 -69
  406. package/src/tests/fourslash/completions.libStub.fourslash.ts +0 -69
  407. package/src/tests/fourslash/completions.literals.fourslash.ts +0 -33
  408. package/src/tests/fourslash/completions.localCode.fourslash.ts +0 -74
  409. package/src/tests/fourslash/completions.moduleContext.UnknownMemberOnInstance.fourslash.ts +0 -17
  410. package/src/tests/fourslash/completions.moduleContext.UnknownStaticFunctionOnClass.fourslash.ts +0 -57
  411. package/src/tests/fourslash/completions.moduleContext.libCodeNoStub.fourslash.ts +0 -30
  412. package/src/tests/fourslash/completions.overloads.fourslash.ts +0 -40
  413. package/src/tests/fourslash/completions.override.default.fourslash.ts +0 -47
  414. package/src/tests/fourslash/completions.override.default.importStub.ts +0 -50
  415. package/src/tests/fourslash/completions.override.default.imported.fourslash.ts +0 -61
  416. package/src/tests/fourslash/completions.override.default.stub.fourslash.ts +0 -47
  417. package/src/tests/fourslash/completions.override.fourslash.ts +0 -47
  418. package/src/tests/fourslash/completions.override.property.fourslash.ts +0 -31
  419. package/src/tests/fourslash/completions.override.property.stub.fourslash.ts +0 -31
  420. package/src/tests/fourslash/completions.override.staticAndClassmethod.fourslash.ts +0 -64
  421. package/src/tests/fourslash/completions.override.stub.fourslash.ts +0 -47
  422. package/src/tests/fourslash/completions.override2.fourslash.ts +0 -71
  423. package/src/tests/fourslash/completions.parameters.fourslash.ts +0 -23
  424. package/src/tests/fourslash/completions.params.fourslash.ts +0 -24
  425. package/src/tests/fourslash/completions.parentFolder.fourslash.ts +0 -17
  426. package/src/tests/fourslash/completions.parentFolders.fourslash.ts +0 -77
  427. package/src/tests/fourslash/completions.plainText.fourslash.ts +0 -34
  428. package/src/tests/fourslash/completions.private.fourslash.ts +0 -64
  429. package/src/tests/fourslash/completions.property.fourslash.ts +0 -28
  430. package/src/tests/fourslash/completions.propertyDocStrings.fourslash.ts +0 -64
  431. package/src/tests/fourslash/completions.self.fourslash.ts +0 -43
  432. package/src/tests/fourslash/completions.stringLiteral.escape.fourslash.ts +0 -71
  433. package/src/tests/fourslash/completions.stringLiteral.fourslash.ts +0 -79
  434. package/src/tests/fourslash/completions.typeAlias.fourslash.ts +0 -29
  435. package/src/tests/fourslash/completions.typeshed.fourslash.ts +0 -9
  436. package/src/tests/fourslash/completions.vardecls.fourslash.ts +0 -40
  437. package/src/tests/fourslash/completions.variableDocStrings.fourslash.ts +0 -69
  438. package/src/tests/fourslash/completions.wildcardimports.fourslash.ts +0 -116
  439. package/src/tests/fourslash/completions.with.fourslash.ts +0 -26
  440. package/src/tests/fourslash/diagnostics.missingModuleSource.fourslash.ts +0 -69
  441. package/src/tests/fourslash/findDefinitions.builtinClass.fourslash.ts +0 -29
  442. package/src/tests/fourslash/findDefinitions.classes.fourslash.ts +0 -101
  443. package/src/tests/fourslash/findDefinitions.definitionFilter.preferSource.fourslash.ts +0 -29
  444. package/src/tests/fourslash/findDefinitions.definitionFilter.preferSource.onlyStubs.ts +0 -24
  445. package/src/tests/fourslash/findDefinitions.definitionFilter.preferStub.fourslash.ts +0 -29
  446. package/src/tests/fourslash/findDefinitions.definitionFilter.preferStub.onlySource.fourslash.ts +0 -25
  447. package/src/tests/fourslash/findDefinitions.fields.fourslash.ts +0 -131
  448. package/src/tests/fourslash/findDefinitions.functions.fourslash.ts +0 -87
  449. package/src/tests/fourslash/findDefinitions.methods.fourslash.ts +0 -162
  450. package/src/tests/fourslash/findDefinitions.modules.fourslash.ts +0 -50
  451. package/src/tests/fourslash/findDefinitions.namespaceImport.fourslash.ts +0 -40
  452. package/src/tests/fourslash/findDefinitions.overloads.fourslash.ts +0 -223
  453. package/src/tests/fourslash/findDefinitions.parameters.fourslash.ts +0 -162
  454. package/src/tests/fourslash/findDefinitions.sourceAndStub.function.fourslash.ts +0 -26
  455. package/src/tests/fourslash/findDefinitions.sourceAndStub.innerClass.fourslash.ts +0 -32
  456. package/src/tests/fourslash/findDefinitions.sourceAndStub.innerClassMethod.fourslash.ts +0 -33
  457. package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClass.fourslash.ts +0 -28
  458. package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClassMethod.fourslash.ts +0 -29
  459. package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClassPropertyReadOnly.fourslash.ts +0 -31
  460. package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClassPropertyReadWrite.fourslash.ts +0 -36
  461. package/src/tests/fourslash/findDefinitions.sourceOnly.class.fourslash.ts +0 -29
  462. package/src/tests/fourslash/findDefinitions.sourceOnly.function1.fourslash.ts +0 -28
  463. package/src/tests/fourslash/findDefinitions.sourceOnly.function2.fourslash.ts +0 -28
  464. package/src/tests/fourslash/findDefinitions.sourceOnly.relativeImport1.fourslash.ts +0 -22
  465. package/src/tests/fourslash/findDefinitions.sourceOnly.relativeImport2.fourslash.ts +0 -22
  466. package/src/tests/fourslash/findDefinitions.stubOnly.fourslash.ts +0 -61
  467. package/src/tests/fourslash/findDefinitions.stubPackages.fourslash.ts +0 -71
  468. package/src/tests/fourslash/findDefinitions.typedDict.keys.fourslash.ts +0 -99
  469. package/src/tests/fourslash/findDefinitions.variables.fourslash.ts +0 -88
  470. package/src/tests/fourslash/findDefinitions.wildcardimports.fourslash.ts +0 -117
  471. package/src/tests/fourslash/findTypeDefinitions.builtinClass.fourslash.ts +0 -26
  472. package/src/tests/fourslash/findTypeDefinitions.classes.fourslash.ts +0 -72
  473. package/src/tests/fourslash/findTypeDefinitions.unions.fourslash.ts +0 -26
  474. package/src/tests/fourslash/findallreferences.classPropertyReadWrite.ts +0 -39
  475. package/src/tests/fourslash/findallreferences.fourslash.ts +0 -34
  476. package/src/tests/fourslash/findallreferences.importalias.fourslash.ts +0 -34
  477. package/src/tests/fourslash/findallreferences.invokedFromLibrary.fourslash.ts +0 -52
  478. package/src/tests/fourslash/findallreferences.module.nested.fourslash.ts +0 -67
  479. package/src/tests/fourslash/findallreferences.modules.duplicated.fourslash.ts +0 -59
  480. package/src/tests/fourslash/findallreferences.modules.fourslash.ts +0 -46
  481. package/src/tests/fourslash/findallreferences.modules.shadow.fourslash.ts +0 -95
  482. package/src/tests/fourslash/findallreferences.openFiles.fourslash.ts +0 -37
  483. package/src/tests/fourslash/findallreferences.parameter.fourslash.ts +0 -24
  484. package/src/tests/fourslash/findallreferences.sourceAndStub.class.fourslash.ts +0 -33
  485. package/src/tests/fourslash/findallreferences.sourceAndStub.classMethod.fourslash.ts +0 -37
  486. package/src/tests/fourslash/findallreferences.sourceAndStub.classPropertyReadOnly.fourslash.ts +0 -40
  487. package/src/tests/fourslash/findallreferences.sourceAndStub.classPropertyReadWrite.fourslash.skip.ts +0 -48
  488. package/src/tests/fourslash/findallreferences.sourceAndStub.function.fourslash.ts +0 -35
  489. package/src/tests/fourslash/findallreferences.variable.fourslash.ts +0 -24
  490. package/src/tests/fourslash/fourslash.ts +0 -411
  491. package/src/tests/fourslash/highlightreferences.attributes.fourslash.ts +0 -31
  492. package/src/tests/fourslash/hover.builtinDocstrings.fourslash.ts +0 -64
  493. package/src/tests/fourslash/hover.classNoInit.fourslash.ts +0 -14
  494. package/src/tests/fourslash/hover.docFromScr.stringFormat.fourslash.ts +0 -52
  495. package/src/tests/fourslash/hover.docFromSrc.fourslash.ts +0 -83
  496. package/src/tests/fourslash/hover.docFromSrc.pkg-vs-module1.fourslash.ts +0 -26
  497. package/src/tests/fourslash/hover.docFromSrc.pkg-vs-module2.fourslash.ts +0 -26
  498. package/src/tests/fourslash/hover.docFromSrc.relativeImport1.fourslash.ts +0 -23
  499. package/src/tests/fourslash/hover.docFromSrc.relativeImport2.fourslash.ts +0 -22
  500. package/src/tests/fourslash/hover.docFromSrc.relativeImport3.fourslash.ts +0 -46
  501. package/src/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.ts +0 -29
  502. package/src/tests/fourslash/hover.docFromSrc.typeshed.fourslash.ts +0 -20
  503. package/src/tests/fourslash/hover.docstring.links.fourslash.ts +0 -12
  504. package/src/tests/fourslash/hover.docstring.overloads.fourslash.ts +0 -41
  505. package/src/tests/fourslash/hover.docstring.split.fourslash.ts +0 -24
  506. package/src/tests/fourslash/hover.fourslash.ts +0 -20
  507. package/src/tests/fourslash/hover.import.django.view.fourslash.ts +0 -27
  508. package/src/tests/fourslash/hover.import.fourslash.ts +0 -11
  509. package/src/tests/fourslash/hover.inherited.docFromSrc.fourslash.ts +0 -63
  510. package/src/tests/fourslash/hover.inherited.docFromSrcWithStub.fourslash.ts +0 -54
  511. package/src/tests/fourslash/hover.inherited.docFromStub.fourslash.ts +0 -42
  512. package/src/tests/fourslash/hover.inherited.overload.docFromSrcWithStub.fourslash.ts +0 -46
  513. package/src/tests/fourslash/hover.inherited.overload.docFromStub.fourslash.ts +0 -47
  514. package/src/tests/fourslash/hover.inherited.property.docFromSrcWithStub.fourslash.ts +0 -87
  515. package/src/tests/fourslash/hover.inherited.property.docFromStub.fourslash.ts +0 -91
  516. package/src/tests/fourslash/hover.init.fourslash.ts +0 -39
  517. package/src/tests/fourslash/hover.libCodeAndStub.fourslash.ts +0 -52
  518. package/src/tests/fourslash/hover.libCodeNoStub.fourslash.ts +0 -41
  519. package/src/tests/fourslash/hover.libStub.fourslash.ts +0 -41
  520. package/src/tests/fourslash/hover.optionalAliasParameter.fourslash.ts +0 -14
  521. package/src/tests/fourslash/hover.plainText.fourslash.ts +0 -21
  522. package/src/tests/fourslash/hover.typedDict.key.fourslash.ts +0 -51
  523. package/src/tests/fourslash/hover.variable.docString.fourslash.ts +0 -41
  524. package/src/tests/fourslash/hover.wildcardimports.fourslash.ts +0 -80
  525. package/src/tests/fourslash/import.publicSymbols.fourslash.ts +0 -65
  526. package/src/tests/fourslash/import.pytyped.dunderAll.fourslash.ts +0 -77
  527. package/src/tests/fourslash/import.pytyped.privateSymbols.fourslash.ts +0 -65
  528. package/src/tests/fourslash/import.pytyped.typeCheckingBasic.fourslash.ts +0 -38
  529. package/src/tests/fourslash/import.pytyped.typeCheckingOff.fourslash.ts +0 -38
  530. package/src/tests/fourslash/import.wildcard.fourslash.ts +0 -27
  531. package/src/tests/fourslash/importnotresolved.fourslash.ts +0 -13
  532. package/src/tests/fourslash/missingModuleSource.disablingInStrictMode.fourslash.ts +0 -20
  533. package/src/tests/fourslash/missingModuleSource.fourslash.ts +0 -14
  534. package/src/tests/fourslash/missingTypeStub.codeAction.fourslash.ts +0 -33
  535. package/src/tests/fourslash/missingTypeStub.command.multipart.fourslash.ts +0 -48
  536. package/src/tests/fourslash/missingTypeStub.command.singlefile.fourslash.ts +0 -38
  537. package/src/tests/fourslash/missingTypeStub.command.singlepart.fourslash.ts +0 -38
  538. package/src/tests/fourslash/missingTypeStub.fourslash.ts +0 -20
  539. package/src/tests/fourslash/missingTypeStub.invokeCodeAction.fourslash.ts +0 -36
  540. package/src/tests/fourslash/noerrors.fourslash.ts +0 -9
  541. package/src/tests/fourslash/orderImports1.command.fourslash.ts +0 -20
  542. package/src/tests/fourslash/orderImports2.command.fourslash.ts +0 -24
  543. package/src/tests/fourslash/rename.externallyHidden.fourslash.ts +0 -24
  544. package/src/tests/fourslash/rename.externallyHidden.params.fourslash.ts +0 -24
  545. package/src/tests/fourslash/rename.fourslash.ts +0 -29
  546. package/src/tests/fourslash/rename.library.fourslash.ts +0 -29
  547. package/src/tests/fourslash/rename.library.sourceAndStub.fourslash.ts +0 -33
  548. package/src/tests/fourslash/rename.multipleDecl.fourslash.ts +0 -21
  549. package/src/tests/fourslash/rename.sourceAndStub.fourslash.ts +0 -37
  550. package/src/tests/fourslash/rename.string.excluded.fourslash.ts +0 -43
  551. package/src/tests/fourslash/rename.string.fourslash.ts +0 -26
  552. package/src/tests/fourslash/signature.builtinDocstrings.fourslash.ts +0 -63
  553. package/src/tests/fourslash/signature.complicated.fourslash.ts +0 -100
  554. package/src/tests/fourslash/signature.cornercases.fourslash.ts +0 -23
  555. package/src/tests/fourslash/signature.docstrings.fourslash.ts +0 -43
  556. package/src/tests/fourslash/signature.docstrings.overloaded.fourslash.ts +0 -50
  557. package/src/tests/fourslash/signature.docstrings.wildcardimports.fourslash.ts +0 -122
  558. package/src/tests/fourslash/signature.overload.fourslash.ts +0 -64
  559. package/src/tests/fourslash/signature.simple.fourslash.ts +0 -104
  560. package/src/tests/harness/fourslash/fourSlashParser.ts +0 -441
  561. package/src/tests/harness/fourslash/fourSlashTypes.ts +0 -134
  562. package/src/tests/harness/fourslash/runner.ts +0 -99
  563. package/src/tests/harness/fourslash/testLanguageService.ts +0 -142
  564. package/src/tests/harness/fourslash/testState.Consts.ts +0 -29
  565. package/src/tests/harness/fourslash/testState.ts +0 -1993
  566. package/src/tests/harness/testAccessHost.ts +0 -23
  567. package/src/tests/harness/testHost.ts +0 -177
  568. package/src/tests/harness/utils.ts +0 -355
  569. package/src/tests/harness/vfs/factory.ts +0 -199
  570. package/src/tests/harness/vfs/filesystem.ts +0 -1893
  571. package/src/tests/harness/vfs/pathValidation.ts +0 -154
  572. package/src/tests/importAdder.test.ts +0 -1361
  573. package/src/tests/importResolver.test.ts +0 -534
  574. package/src/tests/importStatementUtils.test.ts +0 -526
  575. package/src/tests/indentationUtils.ptvs.test.ts +0 -388
  576. package/src/tests/indentationUtils.reindent.test.ts +0 -403
  577. package/src/tests/indentationUtils.test.ts +0 -455
  578. package/src/tests/ipythonMode.test.ts +0 -365
  579. package/src/tests/localizer.test.ts +0 -47
  580. package/src/tests/parseTreeUtils.test.ts +0 -281
  581. package/src/tests/parser.test.ts +0 -99
  582. package/src/tests/pathUtils.test.ts +0 -321
  583. package/src/tests/pyrightFileSystem.test.ts +0 -183
  584. package/src/tests/renameModule.folder.test.ts +0 -261
  585. package/src/tests/renameModule.fromImports.test.ts +0 -952
  586. package/src/tests/renameModule.imports.test.ts +0 -450
  587. package/src/tests/renameModule.misc.test.ts +0 -765
  588. package/src/tests/renameModule.relativePath.test.ts +0 -277
  589. package/src/tests/renameModuleTestUtils.ts +0 -210
  590. package/src/tests/samples/abstractClass1.py +0 -51
  591. package/src/tests/samples/abstractClass2.py +0 -25
  592. package/src/tests/samples/abstractClass3.py +0 -30
  593. package/src/tests/samples/abstractClass4.py +0 -30
  594. package/src/tests/samples/abstractClass5.py +0 -42
  595. package/src/tests/samples/abstractClass6.py +0 -25
  596. package/src/tests/samples/abstractClass7.py +0 -22
  597. package/src/tests/samples/abstractClass8.py +0 -27
  598. package/src/tests/samples/annotated1.py +0 -72
  599. package/src/tests/samples/annotatedVar1.py +0 -22
  600. package/src/tests/samples/annotatedVar2.py +0 -28
  601. package/src/tests/samples/annotatedVar3.py +0 -54
  602. package/src/tests/samples/annotatedVar4.py +0 -24
  603. package/src/tests/samples/annotatedVar5.py +0 -37
  604. package/src/tests/samples/annotatedVar6.py +0 -22
  605. package/src/tests/samples/annotatedVar7.py +0 -13
  606. package/src/tests/samples/annotatedVar8.py +0 -29
  607. package/src/tests/samples/annotations1.py +0 -98
  608. package/src/tests/samples/annotations2.py +0 -33
  609. package/src/tests/samples/annotations3.py +0 -43
  610. package/src/tests/samples/annotations4.py +0 -54
  611. package/src/tests/samples/annotations5.py +0 -9
  612. package/src/tests/samples/annotations6.py +0 -29
  613. package/src/tests/samples/assert1.py +0 -22
  614. package/src/tests/samples/assertType1.py +0 -46
  615. package/src/tests/samples/assignment1.py +0 -58
  616. package/src/tests/samples/assignment10.py +0 -14
  617. package/src/tests/samples/assignment2.py +0 -40
  618. package/src/tests/samples/assignment3.py +0 -46
  619. package/src/tests/samples/assignment4.py +0 -20
  620. package/src/tests/samples/assignment5.py +0 -16
  621. package/src/tests/samples/assignment6.py +0 -25
  622. package/src/tests/samples/assignment7.py +0 -13
  623. package/src/tests/samples/assignment8.py +0 -40
  624. package/src/tests/samples/assignment9.py +0 -25
  625. package/src/tests/samples/assignmentExpr1.py +0 -23
  626. package/src/tests/samples/assignmentExpr2.py +0 -49
  627. package/src/tests/samples/assignmentExpr3.py +0 -27
  628. package/src/tests/samples/assignmentExpr4.py +0 -49
  629. package/src/tests/samples/assignmentExpr5.py +0 -15
  630. package/src/tests/samples/assignmentExpr6.py +0 -10
  631. package/src/tests/samples/assignmentExpr7.py +0 -13
  632. package/src/tests/samples/assignmentExpr8.py +0 -11
  633. package/src/tests/samples/assignmentExpr9.py +0 -28
  634. package/src/tests/samples/async1.py +0 -49
  635. package/src/tests/samples/augmentedAssignment1.py +0 -62
  636. package/src/tests/samples/augmentedAssignment2.py +0 -23
  637. package/src/tests/samples/augmentedAssignment3.py +0 -8
  638. package/src/tests/samples/await1.py +0 -23
  639. package/src/tests/samples/await2.py +0 -25
  640. package/src/tests/samples/badToken1.py +0 -6
  641. package/src/tests/samples/builtins1.py +0 -2
  642. package/src/tests/samples/call1.py +0 -93
  643. package/src/tests/samples/call2.py +0 -118
  644. package/src/tests/samples/call3.py +0 -168
  645. package/src/tests/samples/call4.py +0 -13
  646. package/src/tests/samples/call5.py +0 -95
  647. package/src/tests/samples/call6.py +0 -35
  648. package/src/tests/samples/call7.py +0 -57
  649. package/src/tests/samples/callSite1.py +0 -6
  650. package/src/tests/samples/callSite2.py +0 -12
  651. package/src/tests/samples/callable1.py +0 -53
  652. package/src/tests/samples/callable2.py +0 -58
  653. package/src/tests/samples/callable3.py +0 -28
  654. package/src/tests/samples/callable4.py +0 -32
  655. package/src/tests/samples/callable5.py +0 -40
  656. package/src/tests/samples/callable6.py +0 -83
  657. package/src/tests/samples/callbackProtocol1.py +0 -119
  658. package/src/tests/samples/callbackProtocol2.py +0 -29
  659. package/src/tests/samples/callbackProtocol3.py +0 -23
  660. package/src/tests/samples/callbackProtocol4.py +0 -73
  661. package/src/tests/samples/callbackProtocol5.py +0 -66
  662. package/src/tests/samples/callbackProtocol6.py +0 -66
  663. package/src/tests/samples/callbackProtocol7.py +0 -16
  664. package/src/tests/samples/callbackProtocol8.py +0 -16
  665. package/src/tests/samples/capturedVariable1.py +0 -106
  666. package/src/tests/samples/circular1.py +0 -16
  667. package/src/tests/samples/circular2.py +0 -38
  668. package/src/tests/samples/circularBaseClass.py +0 -17
  669. package/src/tests/samples/classGetItem1.py +0 -30
  670. package/src/tests/samples/classVar1.py +0 -41
  671. package/src/tests/samples/classVar2.py +0 -29
  672. package/src/tests/samples/classVar3.py +0 -46
  673. package/src/tests/samples/classVar4.py +0 -36
  674. package/src/tests/samples/classes1.py +0 -50
  675. package/src/tests/samples/classes3.py +0 -48
  676. package/src/tests/samples/classes4.py +0 -15
  677. package/src/tests/samples/classes5.py +0 -260
  678. package/src/tests/samples/classes6.py +0 -16
  679. package/src/tests/samples/classes7.py +0 -18
  680. package/src/tests/samples/classes8.py +0 -47
  681. package/src/tests/samples/codeFlow1.py +0 -65
  682. package/src/tests/samples/codeFlow2.py +0 -26
  683. package/src/tests/samples/codeFlow3.py +0 -8
  684. package/src/tests/samples/codeFlow4.py +0 -133
  685. package/src/tests/samples/codeFlow5.py +0 -10
  686. package/src/tests/samples/codeFlow6.py +0 -35
  687. package/src/tests/samples/codeFlow7.py +0 -35
  688. package/src/tests/samples/comparison1.py +0 -77
  689. package/src/tests/samples/comparison2.py +0 -37
  690. package/src/tests/samples/complex1.py +0 -17
  691. package/src/tests/samples/constant1.py +0 -40
  692. package/src/tests/samples/constants1.py +0 -64
  693. package/src/tests/samples/constructor1.py +0 -30
  694. package/src/tests/samples/constructor10.py +0 -19
  695. package/src/tests/samples/constructor11.py +0 -32
  696. package/src/tests/samples/constructor12.py +0 -20
  697. package/src/tests/samples/constructor13.py +0 -15
  698. package/src/tests/samples/constructor2.py +0 -180
  699. package/src/tests/samples/constructor3.py +0 -18
  700. package/src/tests/samples/constructor4.py +0 -25
  701. package/src/tests/samples/constructor5.py +0 -25
  702. package/src/tests/samples/constructor6.py +0 -70
  703. package/src/tests/samples/constructor7.py +0 -11
  704. package/src/tests/samples/constructor8.py +0 -99
  705. package/src/tests/samples/constructor9.py +0 -19
  706. package/src/tests/samples/coroutines1.py +0 -60
  707. package/src/tests/samples/coroutines2.py +0 -20
  708. package/src/tests/samples/coroutines3.py +0 -37
  709. package/src/tests/samples/dataclass1.py +0 -44
  710. package/src/tests/samples/dataclass10.py +0 -45
  711. package/src/tests/samples/dataclass11.py +0 -53
  712. package/src/tests/samples/dataclass12.py +0 -32
  713. package/src/tests/samples/dataclass13.py +0 -42
  714. package/src/tests/samples/dataclass14.py +0 -38
  715. package/src/tests/samples/dataclass15.py +0 -58
  716. package/src/tests/samples/dataclass16.py +0 -21
  717. package/src/tests/samples/dataclass17.py +0 -46
  718. package/src/tests/samples/dataclass18.py +0 -57
  719. package/src/tests/samples/dataclass19.py +0 -44
  720. package/src/tests/samples/dataclass2.py +0 -30
  721. package/src/tests/samples/dataclass20.py +0 -71
  722. package/src/tests/samples/dataclass21.py +0 -13
  723. package/src/tests/samples/dataclass3.py +0 -18
  724. package/src/tests/samples/dataclass4.py +0 -64
  725. package/src/tests/samples/dataclass5.py +0 -81
  726. package/src/tests/samples/dataclass6.py +0 -29
  727. package/src/tests/samples/dataclass7.py +0 -93
  728. package/src/tests/samples/dataclass8.py +0 -22
  729. package/src/tests/samples/dataclass9.py +0 -24
  730. package/src/tests/samples/dataclassPostInit1.py +0 -61
  731. package/src/tests/samples/dataclassTransform1.py +0 -71
  732. package/src/tests/samples/dataclassTransform2.py +0 -78
  733. package/src/tests/samples/dataclassTransform3.py +0 -83
  734. package/src/tests/samples/dataclassTransform4.py +0 -87
  735. package/src/tests/samples/decorator1.py +0 -20
  736. package/src/tests/samples/decorator2.py +0 -31
  737. package/src/tests/samples/decorator3.py +0 -27
  738. package/src/tests/samples/decorator4.py +0 -37
  739. package/src/tests/samples/decorator5.py +0 -29
  740. package/src/tests/samples/decorator6.py +0 -34
  741. package/src/tests/samples/defaultInitializer1.py +0 -26
  742. package/src/tests/samples/deprecated1.py +0 -37
  743. package/src/tests/samples/descriptor1.py +0 -134
  744. package/src/tests/samples/descriptor2.py +0 -29
  745. package/src/tests/samples/dictionary1.py +0 -42
  746. package/src/tests/samples/dictionary2.py +0 -14
  747. package/src/tests/samples/dictionary3.py +0 -30
  748. package/src/tests/samples/dictionary4.py +0 -106
  749. package/src/tests/samples/dunderAll1.py +0 -32
  750. package/src/tests/samples/dunderAll2.py +0 -16
  751. package/src/tests/samples/dunderAll3.pyi +0 -16
  752. package/src/tests/samples/duplicateDeclaration1.py +0 -115
  753. package/src/tests/samples/duplicateDeclaration2.py +0 -45
  754. package/src/tests/samples/duplicateImports1.py +0 -13
  755. package/src/tests/samples/ellipsis1.pyi +0 -48
  756. package/src/tests/samples/emptyContainers1.py +0 -89
  757. package/src/tests/samples/enums1.py +0 -52
  758. package/src/tests/samples/enums2.py +0 -15
  759. package/src/tests/samples/enums3.py +0 -24
  760. package/src/tests/samples/enums4.py +0 -23
  761. package/src/tests/samples/enums5.py +0 -16
  762. package/src/tests/samples/enums6.py +0 -33
  763. package/src/tests/samples/enums7.py +0 -54
  764. package/src/tests/samples/enums8.py +0 -14
  765. package/src/tests/samples/expressions1.py +0 -54
  766. package/src/tests/samples/expressions2.py +0 -29
  767. package/src/tests/samples/expressions3.py +0 -26
  768. package/src/tests/samples/expressions4.py +0 -23
  769. package/src/tests/samples/expressions5.py +0 -70
  770. package/src/tests/samples/expressions6.py +0 -14
  771. package/src/tests/samples/expressions7.py +0 -40
  772. package/src/tests/samples/expressions8.py +0 -26
  773. package/src/tests/samples/expressions9.py +0 -14
  774. package/src/tests/samples/final1.py +0 -14
  775. package/src/tests/samples/final2.py +0 -86
  776. package/src/tests/samples/final3.py +0 -179
  777. package/src/tests/samples/final4.pyi +0 -21
  778. package/src/tests/samples/final5.py +0 -18
  779. package/src/tests/samples/forLoop1.py +0 -88
  780. package/src/tests/samples/forLoop2.py +0 -48
  781. package/src/tests/samples/fstring1.py +0 -66
  782. package/src/tests/samples/fstring2.py +0 -12
  783. package/src/tests/samples/fstring3.py +0 -35
  784. package/src/tests/samples/fstring4.py +0 -17
  785. package/src/tests/samples/fstring5.py +0 -17
  786. package/src/tests/samples/fstring6.py +0 -14
  787. package/src/tests/samples/function1.py +0 -12
  788. package/src/tests/samples/function10.py +0 -20
  789. package/src/tests/samples/function11.py +0 -36
  790. package/src/tests/samples/function2.py +0 -7
  791. package/src/tests/samples/function3.py +0 -82
  792. package/src/tests/samples/function4.py +0 -13
  793. package/src/tests/samples/function6.py +0 -24
  794. package/src/tests/samples/function7.py +0 -13
  795. package/src/tests/samples/function8.py +0 -38
  796. package/src/tests/samples/function9.py +0 -75
  797. package/src/tests/samples/functionAnnotation1.py +0 -61
  798. package/src/tests/samples/functionAnnotation2.py +0 -26
  799. package/src/tests/samples/functionAnnotation3.py +0 -37
  800. package/src/tests/samples/functionAnnotation4.py +0 -22
  801. package/src/tests/samples/functionMember1.py +0 -18
  802. package/src/tests/samples/functionMember2.py +0 -45
  803. package/src/tests/samples/generators1.py +0 -122
  804. package/src/tests/samples/generators10.py +0 -18
  805. package/src/tests/samples/generators11.py +0 -27
  806. package/src/tests/samples/generators12.py +0 -25
  807. package/src/tests/samples/generators13.py +0 -65
  808. package/src/tests/samples/generators14.py +0 -19
  809. package/src/tests/samples/generators15.py +0 -26
  810. package/src/tests/samples/generators2.py +0 -31
  811. package/src/tests/samples/generators3.py +0 -42
  812. package/src/tests/samples/generators4.py +0 -33
  813. package/src/tests/samples/generators5.py +0 -24
  814. package/src/tests/samples/generators6.py +0 -14
  815. package/src/tests/samples/generators7.py +0 -18
  816. package/src/tests/samples/generators8.py +0 -12
  817. package/src/tests/samples/generators9.py +0 -19
  818. package/src/tests/samples/generic1.py +0 -41
  819. package/src/tests/samples/genericTypes1.py +0 -12
  820. package/src/tests/samples/genericTypes10.py +0 -38
  821. package/src/tests/samples/genericTypes11.py +0 -26
  822. package/src/tests/samples/genericTypes12.py +0 -14
  823. package/src/tests/samples/genericTypes13.py +0 -27
  824. package/src/tests/samples/genericTypes14.py +0 -22
  825. package/src/tests/samples/genericTypes15.py +0 -13
  826. package/src/tests/samples/genericTypes16.py +0 -15
  827. package/src/tests/samples/genericTypes17.py +0 -24
  828. package/src/tests/samples/genericTypes18.py +0 -135
  829. package/src/tests/samples/genericTypes19.py +0 -32
  830. package/src/tests/samples/genericTypes2.py +0 -40
  831. package/src/tests/samples/genericTypes20.py +0 -44
  832. package/src/tests/samples/genericTypes21.py +0 -29
  833. package/src/tests/samples/genericTypes22.py +0 -23
  834. package/src/tests/samples/genericTypes23.py +0 -27
  835. package/src/tests/samples/genericTypes24.py +0 -32
  836. package/src/tests/samples/genericTypes25.py +0 -37
  837. package/src/tests/samples/genericTypes26.py +0 -31
  838. package/src/tests/samples/genericTypes27.py +0 -14
  839. package/src/tests/samples/genericTypes28.py +0 -51
  840. package/src/tests/samples/genericTypes29.py +0 -24
  841. package/src/tests/samples/genericTypes3.py +0 -13
  842. package/src/tests/samples/genericTypes30.py +0 -32
  843. package/src/tests/samples/genericTypes31.py +0 -30
  844. package/src/tests/samples/genericTypes32.py +0 -25
  845. package/src/tests/samples/genericTypes33.py +0 -46
  846. package/src/tests/samples/genericTypes34.py +0 -54
  847. package/src/tests/samples/genericTypes35.py +0 -45
  848. package/src/tests/samples/genericTypes36.py +0 -35
  849. package/src/tests/samples/genericTypes37.py +0 -26
  850. package/src/tests/samples/genericTypes38.py +0 -15
  851. package/src/tests/samples/genericTypes39.py +0 -82
  852. package/src/tests/samples/genericTypes4.py +0 -37
  853. package/src/tests/samples/genericTypes40.py +0 -38
  854. package/src/tests/samples/genericTypes41.py +0 -16
  855. package/src/tests/samples/genericTypes42.py +0 -32
  856. package/src/tests/samples/genericTypes43.py +0 -24
  857. package/src/tests/samples/genericTypes44.py +0 -33
  858. package/src/tests/samples/genericTypes45.py +0 -43
  859. package/src/tests/samples/genericTypes46.py +0 -66
  860. package/src/tests/samples/genericTypes47.py +0 -39
  861. package/src/tests/samples/genericTypes48.py +0 -18
  862. package/src/tests/samples/genericTypes49.py +0 -41
  863. package/src/tests/samples/genericTypes5.py +0 -42
  864. package/src/tests/samples/genericTypes50.py +0 -62
  865. package/src/tests/samples/genericTypes51.py +0 -55
  866. package/src/tests/samples/genericTypes52.py +0 -34
  867. package/src/tests/samples/genericTypes53.py +0 -42
  868. package/src/tests/samples/genericTypes54.py +0 -31
  869. package/src/tests/samples/genericTypes55.py +0 -61
  870. package/src/tests/samples/genericTypes56.py +0 -19
  871. package/src/tests/samples/genericTypes57.py +0 -30
  872. package/src/tests/samples/genericTypes58.py +0 -52
  873. package/src/tests/samples/genericTypes59.py +0 -71
  874. package/src/tests/samples/genericTypes6.py +0 -49
  875. package/src/tests/samples/genericTypes60.py +0 -27
  876. package/src/tests/samples/genericTypes61.py +0 -34
  877. package/src/tests/samples/genericTypes62.py +0 -26
  878. package/src/tests/samples/genericTypes63.py +0 -32
  879. package/src/tests/samples/genericTypes64.py +0 -16
  880. package/src/tests/samples/genericTypes65.py +0 -15
  881. package/src/tests/samples/genericTypes66.py +0 -30
  882. package/src/tests/samples/genericTypes67.py +0 -57
  883. package/src/tests/samples/genericTypes68.py +0 -14
  884. package/src/tests/samples/genericTypes69.py +0 -45
  885. package/src/tests/samples/genericTypes7.py +0 -24
  886. package/src/tests/samples/genericTypes70.py +0 -31
  887. package/src/tests/samples/genericTypes71.py +0 -72
  888. package/src/tests/samples/genericTypes72.py +0 -24
  889. package/src/tests/samples/genericTypes73.py +0 -14
  890. package/src/tests/samples/genericTypes74.py +0 -23
  891. package/src/tests/samples/genericTypes75.py +0 -45
  892. package/src/tests/samples/genericTypes76.py +0 -107
  893. package/src/tests/samples/genericTypes77.py +0 -26
  894. package/src/tests/samples/genericTypes78.py +0 -23
  895. package/src/tests/samples/genericTypes79.py +0 -37
  896. package/src/tests/samples/genericTypes8.py +0 -26
  897. package/src/tests/samples/genericTypes80.py +0 -10
  898. package/src/tests/samples/genericTypes81.py +0 -32
  899. package/src/tests/samples/genericTypes82.py +0 -19
  900. package/src/tests/samples/genericTypes83.py +0 -28
  901. package/src/tests/samples/genericTypes84.py +0 -11
  902. package/src/tests/samples/genericTypes85.py +0 -20
  903. package/src/tests/samples/genericTypes86.py +0 -15
  904. package/src/tests/samples/genericTypes87.py +0 -21
  905. package/src/tests/samples/genericTypes88.py +0 -25
  906. package/src/tests/samples/genericTypes89.py +0 -17
  907. package/src/tests/samples/genericTypes9.py +0 -109
  908. package/src/tests/samples/genericTypes90.py +0 -12
  909. package/src/tests/samples/genericTypes91.py +0 -20
  910. package/src/tests/samples/import1.py +0 -7
  911. package/src/tests/samples/import10.py +0 -11
  912. package/src/tests/samples/import11.py +0 -11
  913. package/src/tests/samples/import12.py +0 -5
  914. package/src/tests/samples/import13.py +0 -6
  915. package/src/tests/samples/import14.py +0 -10
  916. package/src/tests/samples/import2.py +0 -27
  917. package/src/tests/samples/import3.py +0 -8
  918. package/src/tests/samples/import4.py +0 -15
  919. package/src/tests/samples/import5.py +0 -6
  920. package/src/tests/samples/import6.py +0 -17
  921. package/src/tests/samples/import7.py +0 -14
  922. package/src/tests/samples/import8.py +0 -7
  923. package/src/tests/samples/import9.py +0 -7
  924. package/src/tests/samples/inconsistentConstructor1.py +0 -23
  925. package/src/tests/samples/inconsistentSpaceTab1.py +0 -9
  926. package/src/tests/samples/inconsistentSpaceTab2.py +0 -10
  927. package/src/tests/samples/index1.py +0 -97
  928. package/src/tests/samples/inferredTypes1.py +0 -25
  929. package/src/tests/samples/initVar1.py +0 -23
  930. package/src/tests/samples/initsubclass1.py +0 -46
  931. package/src/tests/samples/initsubclass2.py +0 -16
  932. package/src/tests/samples/isinstance1.py +0 -57
  933. package/src/tests/samples/isinstance10.py +0 -15
  934. package/src/tests/samples/isinstance2.py +0 -28
  935. package/src/tests/samples/isinstance3.py +0 -59
  936. package/src/tests/samples/isinstance4.py +0 -57
  937. package/src/tests/samples/isinstance5.py +0 -8
  938. package/src/tests/samples/isinstance6.py +0 -19
  939. package/src/tests/samples/isinstance7.py +0 -42
  940. package/src/tests/samples/isinstance9.py +0 -26
  941. package/src/tests/samples/kwargsUnpack1.py +0 -116
  942. package/src/tests/samples/lambda1.py +0 -77
  943. package/src/tests/samples/lambda2.py +0 -26
  944. package/src/tests/samples/lambda3.py +0 -34
  945. package/src/tests/samples/lambda4.py +0 -70
  946. package/src/tests/samples/lambda5.py +0 -23
  947. package/src/tests/samples/lambda6.py +0 -15
  948. package/src/tests/samples/lines1.py +0 -14
  949. package/src/tests/samples/list1.py +0 -90
  950. package/src/tests/samples/listComprehension1.py +0 -45
  951. package/src/tests/samples/listComprehension2.py +0 -17
  952. package/src/tests/samples/listComprehension3.py +0 -12
  953. package/src/tests/samples/listComprehension4.py +0 -15
  954. package/src/tests/samples/listComprehension5.py +0 -20
  955. package/src/tests/samples/listComprehension6.py +0 -14
  956. package/src/tests/samples/listComprehension7.py +0 -15
  957. package/src/tests/samples/listComprehension8.py +0 -15
  958. package/src/tests/samples/literalString1.py +0 -43
  959. package/src/tests/samples/literals1.py +0 -48
  960. package/src/tests/samples/literals2.py +0 -30
  961. package/src/tests/samples/literals3.py +0 -40
  962. package/src/tests/samples/literals4.py +0 -10
  963. package/src/tests/samples/literals5.py +0 -28
  964. package/src/tests/samples/literals6.py +0 -90
  965. package/src/tests/samples/literals7.py +0 -38
  966. package/src/tests/samples/loops1.py +0 -45
  967. package/src/tests/samples/loops10.py +0 -11
  968. package/src/tests/samples/loops11.py +0 -22
  969. package/src/tests/samples/loops12.py +0 -18
  970. package/src/tests/samples/loops13.py +0 -13
  971. package/src/tests/samples/loops14.py +0 -22
  972. package/src/tests/samples/loops15.py +0 -22
  973. package/src/tests/samples/loops16.py +0 -322
  974. package/src/tests/samples/loops17.py +0 -9
  975. package/src/tests/samples/loops18.py +0 -23
  976. package/src/tests/samples/loops19.py +0 -14
  977. package/src/tests/samples/loops2.py +0 -25
  978. package/src/tests/samples/loops20.py +0 -41
  979. package/src/tests/samples/loops21.py +0 -18
  980. package/src/tests/samples/loops22.py +0 -21
  981. package/src/tests/samples/loops23.py +0 -16
  982. package/src/tests/samples/loops24.py +0 -12
  983. package/src/tests/samples/loops25.py +0 -45
  984. package/src/tests/samples/loops26.py +0 -12
  985. package/src/tests/samples/loops3.py +0 -11
  986. package/src/tests/samples/loops4.py +0 -17
  987. package/src/tests/samples/loops5.py +0 -14
  988. package/src/tests/samples/loops6.py +0 -25
  989. package/src/tests/samples/loops7.py +0 -14
  990. package/src/tests/samples/loops8.py +0 -17
  991. package/src/tests/samples/loops9.py +0 -25
  992. package/src/tests/samples/match1.py +0 -190
  993. package/src/tests/samples/match10.py +0 -67
  994. package/src/tests/samples/match2.py +0 -340
  995. package/src/tests/samples/match3.py +0 -364
  996. package/src/tests/samples/match4.py +0 -100
  997. package/src/tests/samples/match5.py +0 -70
  998. package/src/tests/samples/match6.py +0 -64
  999. package/src/tests/samples/match7.py +0 -65
  1000. package/src/tests/samples/match8.py +0 -19
  1001. package/src/tests/samples/match9.py +0 -53
  1002. package/src/tests/samples/maxParseDepth1.py +0 -499
  1003. package/src/tests/samples/maxParseDepth2.py +0 -16
  1004. package/src/tests/samples/memberAccess1.py +0 -70
  1005. package/src/tests/samples/memberAccess10.py +0 -65
  1006. package/src/tests/samples/memberAccess11.py +0 -37
  1007. package/src/tests/samples/memberAccess12.py +0 -36
  1008. package/src/tests/samples/memberAccess13.py +0 -17
  1009. package/src/tests/samples/memberAccess14.py +0 -63
  1010. package/src/tests/samples/memberAccess15.py +0 -20
  1011. package/src/tests/samples/memberAccess16.py +0 -12
  1012. package/src/tests/samples/memberAccess17.py +0 -31
  1013. package/src/tests/samples/memberAccess18.py +0 -31
  1014. package/src/tests/samples/memberAccess2.py +0 -45
  1015. package/src/tests/samples/memberAccess3.py +0 -64
  1016. package/src/tests/samples/memberAccess4.py +0 -91
  1017. package/src/tests/samples/memberAccess5.py +0 -26
  1018. package/src/tests/samples/memberAccess6.py +0 -52
  1019. package/src/tests/samples/memberAccess7.py +0 -36
  1020. package/src/tests/samples/memberAccess8.py +0 -75
  1021. package/src/tests/samples/memberAccess9.py +0 -11
  1022. package/src/tests/samples/metaclass1.py +0 -7
  1023. package/src/tests/samples/metaclass2.py +0 -35
  1024. package/src/tests/samples/metaclass3.py +0 -43
  1025. package/src/tests/samples/metaclass4.py +0 -26
  1026. package/src/tests/samples/metaclass5.py +0 -33
  1027. package/src/tests/samples/metaclass6.py +0 -15
  1028. package/src/tests/samples/metaclass7.py +0 -38
  1029. package/src/tests/samples/metaclass8.py +0 -20
  1030. package/src/tests/samples/metaclass9.py +0 -77
  1031. package/src/tests/samples/methodOverride1.py +0 -507
  1032. package/src/tests/samples/methodOverride2.py +0 -74
  1033. package/src/tests/samples/methodOverride3.py +0 -111
  1034. package/src/tests/samples/methodOverride4.py +0 -36
  1035. package/src/tests/samples/missingSuper1.py +0 -73
  1036. package/src/tests/samples/module1.py +0 -13
  1037. package/src/tests/samples/module2.py +0 -7
  1038. package/src/tests/samples/mro1.py +0 -16
  1039. package/src/tests/samples/mro2.py +0 -45
  1040. package/src/tests/samples/mro3.py +0 -30
  1041. package/src/tests/samples/mro4.py +0 -30
  1042. package/src/tests/samples/nameBindings1.py +0 -48
  1043. package/src/tests/samples/nameBindings2.py +0 -9
  1044. package/src/tests/samples/nameBindings3.py +0 -36
  1045. package/src/tests/samples/nameBindings4.py +0 -10
  1046. package/src/tests/samples/nameBindings5.py +0 -53
  1047. package/src/tests/samples/namedTuples1.py +0 -103
  1048. package/src/tests/samples/namedTuples2.py +0 -56
  1049. package/src/tests/samples/namedTuples3.py +0 -15
  1050. package/src/tests/samples/namedTuples4.py +0 -24
  1051. package/src/tests/samples/namedTuples5.py +0 -15
  1052. package/src/tests/samples/namedTuples6.py +0 -31
  1053. package/src/tests/samples/namedTuples7.py +0 -27
  1054. package/src/tests/samples/never1.py +0 -12
  1055. package/src/tests/samples/never2.py +0 -43
  1056. package/src/tests/samples/newType1.py +0 -34
  1057. package/src/tests/samples/newType2.py +0 -25
  1058. package/src/tests/samples/newType3.py +0 -34
  1059. package/src/tests/samples/newType4.py +0 -8
  1060. package/src/tests/samples/none1.py +0 -29
  1061. package/src/tests/samples/none2.py +0 -22
  1062. package/src/tests/samples/noreturn1.py +0 -78
  1063. package/src/tests/samples/noreturn2.py +0 -37
  1064. package/src/tests/samples/noreturn3.py +0 -16
  1065. package/src/tests/samples/noreturn4.py +0 -29
  1066. package/src/tests/samples/operators1.py +0 -101
  1067. package/src/tests/samples/operators2.py +0 -30
  1068. package/src/tests/samples/operators3.py +0 -8
  1069. package/src/tests/samples/operators4.py +0 -22
  1070. package/src/tests/samples/operators5.py +0 -5
  1071. package/src/tests/samples/operators6.py +0 -10
  1072. package/src/tests/samples/operators7.py +0 -24
  1073. package/src/tests/samples/operators8.py +0 -125
  1074. package/src/tests/samples/optional1.py +0 -77
  1075. package/src/tests/samples/optional2.py +0 -23
  1076. package/src/tests/samples/overload1.py +0 -50
  1077. package/src/tests/samples/overload10.py +0 -48
  1078. package/src/tests/samples/overload2.py +0 -37
  1079. package/src/tests/samples/overload3.py +0 -29
  1080. package/src/tests/samples/overload4.py +0 -46
  1081. package/src/tests/samples/overload5.py +0 -333
  1082. package/src/tests/samples/overload6.py +0 -64
  1083. package/src/tests/samples/overload7.py +0 -376
  1084. package/src/tests/samples/overload8.py +0 -89
  1085. package/src/tests/samples/overload9.py +0 -19
  1086. package/src/tests/samples/package1/__init__.py +0 -3
  1087. package/src/tests/samples/package1/psyche/pysche.py +0 -4
  1088. package/src/tests/samples/package1/psyche.py +0 -4
  1089. package/src/tests/samples/package1/sub/__init__.py +0 -5
  1090. package/src/tests/samples/package1/sub.py +0 -4
  1091. package/src/tests/samples/package1/sub.pyi +0 -2
  1092. package/src/tests/samples/paramInference1.py +0 -27
  1093. package/src/tests/samples/paramNames1.py +0 -39
  1094. package/src/tests/samples/paramSpec1.py +0 -64
  1095. package/src/tests/samples/paramSpec10.py +0 -57
  1096. package/src/tests/samples/paramSpec11.py +0 -36
  1097. package/src/tests/samples/paramSpec12.py +0 -88
  1098. package/src/tests/samples/paramSpec13.py +0 -112
  1099. package/src/tests/samples/paramSpec14.py +0 -30
  1100. package/src/tests/samples/paramSpec15.py +0 -28
  1101. package/src/tests/samples/paramSpec16.py +0 -28
  1102. package/src/tests/samples/paramSpec17.py +0 -34
  1103. package/src/tests/samples/paramSpec18.py +0 -43
  1104. package/src/tests/samples/paramSpec19.py +0 -93
  1105. package/src/tests/samples/paramSpec2.py +0 -29
  1106. package/src/tests/samples/paramSpec20.py +0 -87
  1107. package/src/tests/samples/paramSpec21.py +0 -58
  1108. package/src/tests/samples/paramSpec22.py +0 -26
  1109. package/src/tests/samples/paramSpec23.py +0 -21
  1110. package/src/tests/samples/paramSpec24.py +0 -67
  1111. package/src/tests/samples/paramSpec25.py +0 -36
  1112. package/src/tests/samples/paramSpec26.py +0 -25
  1113. package/src/tests/samples/paramSpec27.py +0 -57
  1114. package/src/tests/samples/paramSpec28.py +0 -39
  1115. package/src/tests/samples/paramSpec29.py +0 -37
  1116. package/src/tests/samples/paramSpec3.py +0 -71
  1117. package/src/tests/samples/paramSpec30.py +0 -49
  1118. package/src/tests/samples/paramSpec31.py +0 -16
  1119. package/src/tests/samples/paramSpec32.py +0 -57
  1120. package/src/tests/samples/paramSpec33.py +0 -29
  1121. package/src/tests/samples/paramSpec34.py +0 -29
  1122. package/src/tests/samples/paramSpec35.py +0 -24
  1123. package/src/tests/samples/paramSpec36.py +0 -43
  1124. package/src/tests/samples/paramSpec37.py +0 -25
  1125. package/src/tests/samples/paramSpec4.py +0 -109
  1126. package/src/tests/samples/paramSpec5.py +0 -29
  1127. package/src/tests/samples/paramSpec6.py +0 -17
  1128. package/src/tests/samples/paramSpec7.py +0 -22
  1129. package/src/tests/samples/paramSpec8.py +0 -45
  1130. package/src/tests/samples/paramSpec9.py +0 -57
  1131. package/src/tests/samples/paramType1.py +0 -71
  1132. package/src/tests/samples/parameters1.py +0 -16
  1133. package/src/tests/samples/partial1.py +0 -163
  1134. package/src/tests/samples/partial2.py +0 -31
  1135. package/src/tests/samples/private1.py +0 -55
  1136. package/src/tests/samples/private2.py +0 -11
  1137. package/src/tests/samples/project1/pyrightconfig.json +0 -5
  1138. package/src/tests/samples/project1/sample1.py +0 -0
  1139. package/src/tests/samples/project1/subfolder1/sample2.py +0 -0
  1140. package/src/tests/samples/project1/subfolder1/subfolder1-1/sample3.py +0 -0
  1141. package/src/tests/samples/project2/pyrightconfig.json +0 -3
  1142. package/src/tests/samples/project3/pyrightconfig.json +0 -7
  1143. package/src/tests/samples/project4/presentfile.py +0 -0
  1144. package/src/tests/samples/project4/pyrightconfig.json +0 -11
  1145. package/src/tests/samples/project4/subfolder/presentfile2.py +0 -0
  1146. package/src/tests/samples/project4/subfolder/presentfile3.py +0 -0
  1147. package/src/tests/samples/project5/pyrightconfig.json +0 -4
  1148. package/src/tests/samples/project6/app1.py +0 -0
  1149. package/src/tests/samples/project6/app2.py +0 -0
  1150. package/src/tests/samples/project6/projectA/foo/__init__.py +0 -0
  1151. package/src/tests/samples/project6/projectA/foo/bar/__init__.py +0 -0
  1152. package/src/tests/samples/project6/projectB/foo/__init__.py +0 -0
  1153. package/src/tests/samples/project6/projectB/foo/baz/__init__.py +0 -0
  1154. package/src/tests/samples/project_src/src/module1.py +0 -0
  1155. package/src/tests/samples/project_src_is_pkg/src/__init__.py +0 -0
  1156. package/src/tests/samples/project_src_is_pkg/src/module1.py +0 -0
  1157. package/src/tests/samples/project_src_with_config_extra_paths/pyrightconfig.json +0 -3
  1158. package/src/tests/samples/project_src_with_config_extra_paths/src/module1.py +0 -0
  1159. package/src/tests/samples/project_src_with_config_no_extra_paths/pyrightconfig.json +0 -2
  1160. package/src/tests/samples/project_src_with_config_no_extra_paths/src/module1.py +0 -0
  1161. package/src/tests/samples/project_src_with_extra_paths/src/_vendored/vendored1.py +0 -1
  1162. package/src/tests/samples/project_src_with_extra_paths/src/module1.py +0 -2
  1163. package/src/tests/samples/project_with_pyproject_toml/pyproject.toml +0 -7
  1164. package/src/tests/samples/project_with_venv_auto_detect_exclude/myvenv/Lib/site-packages/library1.py +0 -0
  1165. package/src/tests/samples/project_with_venv_auto_detect_exclude/myvenv/pyvenv.cfg +0 -0
  1166. package/src/tests/samples/project_with_venv_auto_detect_exclude/pyrightconfig.json +0 -2
  1167. package/src/tests/samples/project_with_venv_auto_detect_exclude/sample1.py +0 -0
  1168. package/src/tests/samples/project_with_venv_auto_detect_exclude/subfolder1/sample2.py +0 -0
  1169. package/src/tests/samples/project_with_venv_auto_detect_exclude/subfolder1/subfolder1-1/sample3.py +0 -0
  1170. package/src/tests/samples/project_with_venv_auto_detect_include/excluded/excluded1.py +0 -0
  1171. package/src/tests/samples/project_with_venv_auto_detect_include/myvenv/Lib/site-packages/library1.py +0 -0
  1172. package/src/tests/samples/project_with_venv_auto_detect_include/myvenv/pyvenv.cfg +0 -0
  1173. package/src/tests/samples/project_with_venv_auto_detect_include/pyrightconfig.json +0 -3
  1174. package/src/tests/samples/project_with_venv_auto_detect_include/sample1.py +0 -0
  1175. package/src/tests/samples/project_with_venv_auto_detect_include/subfolder1/sample2.py +0 -0
  1176. package/src/tests/samples/project_with_venv_auto_detect_include/subfolder1/subfolder1-1/sample3.py +0 -0
  1177. package/src/tests/samples/properties1.py +0 -64
  1178. package/src/tests/samples/properties10.py +0 -19
  1179. package/src/tests/samples/properties11.py +0 -45
  1180. package/src/tests/samples/properties12.py +0 -23
  1181. package/src/tests/samples/properties13.py +0 -15
  1182. package/src/tests/samples/properties2.py +0 -34
  1183. package/src/tests/samples/properties3.py +0 -93
  1184. package/src/tests/samples/properties4.py +0 -17
  1185. package/src/tests/samples/properties5.py +0 -29
  1186. package/src/tests/samples/properties6.py +0 -35
  1187. package/src/tests/samples/properties7.py +0 -30
  1188. package/src/tests/samples/properties8.py +0 -26
  1189. package/src/tests/samples/properties9.py +0 -24
  1190. package/src/tests/samples/protocol1.py +0 -132
  1191. package/src/tests/samples/protocol10.py +0 -36
  1192. package/src/tests/samples/protocol11.py +0 -32
  1193. package/src/tests/samples/protocol12.py +0 -12
  1194. package/src/tests/samples/protocol13.py +0 -26
  1195. package/src/tests/samples/protocol14.py +0 -27
  1196. package/src/tests/samples/protocol15.py +0 -27
  1197. package/src/tests/samples/protocol16.py +0 -22
  1198. package/src/tests/samples/protocol17.py +0 -94
  1199. package/src/tests/samples/protocol18.py +0 -27
  1200. package/src/tests/samples/protocol19.py +0 -39
  1201. package/src/tests/samples/protocol2.py +0 -38
  1202. package/src/tests/samples/protocol20.py +0 -22
  1203. package/src/tests/samples/protocol21.py +0 -26
  1204. package/src/tests/samples/protocol22.py +0 -43
  1205. package/src/tests/samples/protocol23.py +0 -41
  1206. package/src/tests/samples/protocol24.py +0 -74
  1207. package/src/tests/samples/protocol25.py +0 -31
  1208. package/src/tests/samples/protocol26.py +0 -40
  1209. package/src/tests/samples/protocol27.py +0 -76
  1210. package/src/tests/samples/protocol28.py +0 -32
  1211. package/src/tests/samples/protocol29.py +0 -26
  1212. package/src/tests/samples/protocol3.py +0 -110
  1213. package/src/tests/samples/protocol30.py +0 -30
  1214. package/src/tests/samples/protocol31.py +0 -22
  1215. package/src/tests/samples/protocol32.py +0 -67
  1216. package/src/tests/samples/protocol33.py +0 -39
  1217. package/src/tests/samples/protocol34.py +0 -21
  1218. package/src/tests/samples/protocol4.py +0 -22
  1219. package/src/tests/samples/protocol5.py +0 -25
  1220. package/src/tests/samples/protocol6.py +0 -65
  1221. package/src/tests/samples/protocol7.py +0 -24
  1222. package/src/tests/samples/protocol8.py +0 -34
  1223. package/src/tests/samples/protocol9.py +0 -35
  1224. package/src/tests/samples/protocolModule1.py +0 -15
  1225. package/src/tests/samples/protocolModule2.py +0 -83
  1226. package/src/tests/samples/protocolModule3.py +0 -14
  1227. package/src/tests/samples/protocolModule4.py +0 -26
  1228. package/src/tests/samples/pseudoGeneric1.py +0 -20
  1229. package/src/tests/samples/pyrightIgnore1.py +0 -11
  1230. package/src/tests/samples/pyrightIgnore2.py +0 -24
  1231. package/src/tests/samples/python2.py +0 -31
  1232. package/src/tests/samples/recursiveTypeAlias1.py +0 -79
  1233. package/src/tests/samples/recursiveTypeAlias2.py +0 -32
  1234. package/src/tests/samples/recursiveTypeAlias3.py +0 -26
  1235. package/src/tests/samples/recursiveTypeAlias4.py +0 -55
  1236. package/src/tests/samples/recursiveTypeAlias5.pyi +0 -10
  1237. package/src/tests/samples/recursiveTypeAlias6.py +0 -25
  1238. package/src/tests/samples/recursiveTypeAlias7.py +0 -15
  1239. package/src/tests/samples/recursiveTypeAlias8.py +0 -38
  1240. package/src/tests/samples/recursiveTypeAlias9.py +0 -22
  1241. package/src/tests/samples/required1.py +0 -47
  1242. package/src/tests/samples/required2.py +0 -56
  1243. package/src/tests/samples/required3.py +0 -22
  1244. package/src/tests/samples/returnTypes1.py +0 -26
  1245. package/src/tests/samples/revealedType1.py +0 -30
  1246. package/src/tests/samples/sample1.py +0 -6
  1247. package/src/tests/samples/self1.py +0 -93
  1248. package/src/tests/samples/self2.py +0 -195
  1249. package/src/tests/samples/self3.py +0 -9
  1250. package/src/tests/samples/self4.py +0 -18
  1251. package/src/tests/samples/self5.py +0 -26
  1252. package/src/tests/samples/setComprehension1.py +0 -34
  1253. package/src/tests/samples/slots1.py +0 -63
  1254. package/src/tests/samples/slots2.py +0 -38
  1255. package/src/tests/samples/slots3.py +0 -35
  1256. package/src/tests/samples/specialization1.py +0 -78
  1257. package/src/tests/samples/specialization2.py +0 -51
  1258. package/src/tests/samples/staticExpressions1.py +0 -52
  1259. package/src/tests/samples/strings1.py +0 -22
  1260. package/src/tests/samples/subscript1.py +0 -74
  1261. package/src/tests/samples/subscript2.py +0 -55
  1262. package/src/tests/samples/subscript3.py +0 -135
  1263. package/src/tests/samples/suiteExpectedColon1.py +0 -4
  1264. package/src/tests/samples/suiteExpectedColon2.py +0 -2
  1265. package/src/tests/samples/suiteExpectedColon3.py +0 -2
  1266. package/src/tests/samples/super1.py +0 -57
  1267. package/src/tests/samples/super2.py +0 -29
  1268. package/src/tests/samples/super3.py +0 -10
  1269. package/src/tests/samples/super4.py +0 -24
  1270. package/src/tests/samples/super5.py +0 -28
  1271. package/src/tests/samples/super6.py +0 -17
  1272. package/src/tests/samples/super7.py +0 -52
  1273. package/src/tests/samples/super8.py +0 -7
  1274. package/src/tests/samples/super9.py +0 -36
  1275. package/src/tests/samples/test_file1.py +0 -0
  1276. package/src/tests/samples/threePartVersion1.py +0 -33
  1277. package/src/tests/samples/totalOrdering1.py +0 -52
  1278. package/src/tests/samples/tryExcept1.py +0 -39
  1279. package/src/tests/samples/tryExcept10.py +0 -12
  1280. package/src/tests/samples/tryExcept2.py +0 -16
  1281. package/src/tests/samples/tryExcept3.py +0 -12
  1282. package/src/tests/samples/tryExcept4.py +0 -28
  1283. package/src/tests/samples/tryExcept5.py +0 -30
  1284. package/src/tests/samples/tryExcept6.py +0 -27
  1285. package/src/tests/samples/tryExcept7.py +0 -17
  1286. package/src/tests/samples/tryExcept8.py +0 -69
  1287. package/src/tests/samples/tryExcept9.py +0 -42
  1288. package/src/tests/samples/tupleUnpack1.py +0 -63
  1289. package/src/tests/samples/tupleUnpack2.py +0 -56
  1290. package/src/tests/samples/tupleUnpack3.py +0 -28
  1291. package/src/tests/samples/tuples1.py +0 -185
  1292. package/src/tests/samples/tuples10.py +0 -30
  1293. package/src/tests/samples/tuples11.py +0 -21
  1294. package/src/tests/samples/tuples12.py +0 -31
  1295. package/src/tests/samples/tuples13.py +0 -26
  1296. package/src/tests/samples/tuples15.py +0 -16
  1297. package/src/tests/samples/tuples16.py +0 -14
  1298. package/src/tests/samples/tuples2.py +0 -23
  1299. package/src/tests/samples/tuples3.py +0 -15
  1300. package/src/tests/samples/tuples4.py +0 -21
  1301. package/src/tests/samples/tuples5.py +0 -16
  1302. package/src/tests/samples/tuples6.py +0 -56
  1303. package/src/tests/samples/tuples7.py +0 -61
  1304. package/src/tests/samples/tuples8.py +0 -98
  1305. package/src/tests/samples/tuples9.py +0 -17
  1306. package/src/tests/samples/typeAlias1.py +0 -37
  1307. package/src/tests/samples/typeAlias10.py +0 -45
  1308. package/src/tests/samples/typeAlias11.py +0 -37
  1309. package/src/tests/samples/typeAlias12.py +0 -20
  1310. package/src/tests/samples/typeAlias13.py +0 -53
  1311. package/src/tests/samples/typeAlias14.py +0 -29
  1312. package/src/tests/samples/typeAlias15.py +0 -24
  1313. package/src/tests/samples/typeAlias16.py +0 -24
  1314. package/src/tests/samples/typeAlias2.py +0 -26
  1315. package/src/tests/samples/typeAlias3.py +0 -35
  1316. package/src/tests/samples/typeAlias4.py +0 -68
  1317. package/src/tests/samples/typeAlias5.py +0 -56
  1318. package/src/tests/samples/typeAlias6.py +0 -51
  1319. package/src/tests/samples/typeAlias7.py +0 -50
  1320. package/src/tests/samples/typeAlias8.py +0 -24
  1321. package/src/tests/samples/typeAlias9.py +0 -35
  1322. package/src/tests/samples/typeGuard1.py +0 -68
  1323. package/src/tests/samples/typeGuard2.py +0 -58
  1324. package/src/tests/samples/typeGuard3.py +0 -98
  1325. package/src/tests/samples/typeIgnore1.py +0 -10
  1326. package/src/tests/samples/typeIgnore2.py +0 -20
  1327. package/src/tests/samples/typeIgnore3.py +0 -22
  1328. package/src/tests/samples/typeIgnore4.py +0 -10
  1329. package/src/tests/samples/typeIgnore5.py +0 -7
  1330. package/src/tests/samples/typeNarrowing1.py +0 -56
  1331. package/src/tests/samples/typeNarrowing2.py +0 -14
  1332. package/src/tests/samples/typeNarrowing3.py +0 -47
  1333. package/src/tests/samples/typeNarrowing4.py +0 -24
  1334. package/src/tests/samples/typeNarrowing5.py +0 -19
  1335. package/src/tests/samples/typeNarrowing6.py +0 -27
  1336. package/src/tests/samples/typeNarrowing7.py +0 -71
  1337. package/src/tests/samples/typeNarrowingAssert1.py +0 -24
  1338. package/src/tests/samples/typeNarrowingCallable1.py +0 -78
  1339. package/src/tests/samples/typeNarrowingEnum1.py +0 -58
  1340. package/src/tests/samples/typeNarrowingEnum2.py +0 -71
  1341. package/src/tests/samples/typeNarrowingFalsy1.py +0 -50
  1342. package/src/tests/samples/typeNarrowingIn1.py +0 -97
  1343. package/src/tests/samples/typeNarrowingIsNone1.py +0 -56
  1344. package/src/tests/samples/typeNarrowingIsNone2.py +0 -8
  1345. package/src/tests/samples/typeNarrowingIsNoneTuple1.py +0 -42
  1346. package/src/tests/samples/typeNarrowingIsNoneTuple2.py +0 -35
  1347. package/src/tests/samples/typeNarrowingIsinstance1.py +0 -162
  1348. package/src/tests/samples/typeNarrowingIsinstance2.py +0 -14
  1349. package/src/tests/samples/typeNarrowingIsinstance3.py +0 -78
  1350. package/src/tests/samples/typeNarrowingIsinstance4.py +0 -50
  1351. package/src/tests/samples/typeNarrowingIsinstance5.py +0 -39
  1352. package/src/tests/samples/typeNarrowingIsinstance6.py +0 -77
  1353. package/src/tests/samples/typeNarrowingIsinstance7.py +0 -19
  1354. package/src/tests/samples/typeNarrowingIsinstance8.py +0 -19
  1355. package/src/tests/samples/typeNarrowingLiteral1.py +0 -35
  1356. package/src/tests/samples/typeNarrowingLiteral2.py +0 -63
  1357. package/src/tests/samples/typeNarrowingLiteralMember1.py +0 -140
  1358. package/src/tests/samples/typeNarrowingLocalConst1.py +0 -136
  1359. package/src/tests/samples/typeNarrowingNoneMember1.py +0 -102
  1360. package/src/tests/samples/typeNarrowingTuple1.py +0 -23
  1361. package/src/tests/samples/typeNarrowingTupleLength1.py +0 -47
  1362. package/src/tests/samples/typeNarrowingTypeIs1.py +0 -95
  1363. package/src/tests/samples/typeNarrowingTypedDict1.py +0 -99
  1364. package/src/tests/samples/typeNarrowingTypedDict2.py +0 -35
  1365. package/src/tests/samples/typeNarrowingTypedDict3.py +0 -45
  1366. package/src/tests/samples/typePromotions1.py +0 -30
  1367. package/src/tests/samples/typeVar1.py +0 -23
  1368. package/src/tests/samples/typeVar10.py +0 -21
  1369. package/src/tests/samples/typeVar11.py +0 -12
  1370. package/src/tests/samples/typeVar2.py +0 -26
  1371. package/src/tests/samples/typeVar3.py +0 -73
  1372. package/src/tests/samples/typeVar4.py +0 -45
  1373. package/src/tests/samples/typeVar5.py +0 -75
  1374. package/src/tests/samples/typeVar6.py +0 -115
  1375. package/src/tests/samples/typeVar7.py +0 -171
  1376. package/src/tests/samples/typeVar8.py +0 -30
  1377. package/src/tests/samples/typeVar9.py +0 -118
  1378. package/src/tests/samples/typedDict1.py +0 -63
  1379. package/src/tests/samples/typedDict10.py +0 -34
  1380. package/src/tests/samples/typedDict11.py +0 -12
  1381. package/src/tests/samples/typedDict12.py +0 -103
  1382. package/src/tests/samples/typedDict13.py +0 -14
  1383. package/src/tests/samples/typedDict14.py +0 -25
  1384. package/src/tests/samples/typedDict15.py +0 -53
  1385. package/src/tests/samples/typedDict16.py +0 -103
  1386. package/src/tests/samples/typedDict17.py +0 -24
  1387. package/src/tests/samples/typedDict18.py +0 -43
  1388. package/src/tests/samples/typedDict2.py +0 -56
  1389. package/src/tests/samples/typedDict3.py +0 -40
  1390. package/src/tests/samples/typedDict4.py +0 -68
  1391. package/src/tests/samples/typedDict5.py +0 -50
  1392. package/src/tests/samples/typedDict6.py +0 -77
  1393. package/src/tests/samples/typedDict7.py +0 -22
  1394. package/src/tests/samples/typedDict8.py +0 -19
  1395. package/src/tests/samples/typedDict9.py +0 -22
  1396. package/src/tests/samples/unbound1.py +0 -18
  1397. package/src/tests/samples/unbound2.py +0 -12
  1398. package/src/tests/samples/unbound3.py +0 -13
  1399. package/src/tests/samples/unbound4.py +0 -25
  1400. package/src/tests/samples/unicode1.py +0 -39
  1401. package/src/tests/samples/uninitializedVariable1.py +0 -27
  1402. package/src/tests/samples/unions1.py +0 -79
  1403. package/src/tests/samples/unions2.py +0 -15
  1404. package/src/tests/samples/unions3.py +0 -48
  1405. package/src/tests/samples/unions4.py +0 -20
  1406. package/src/tests/samples/unions5.py +0 -43
  1407. package/src/tests/samples/unnecessaryCast1.py +0 -13
  1408. package/src/tests/samples/unnecessaryIsInstance1.py +0 -91
  1409. package/src/tests/samples/unnecessaryIsSubclass1.py +0 -22
  1410. package/src/tests/samples/unpack1.py +0 -56
  1411. package/src/tests/samples/unpack2.py +0 -27
  1412. package/src/tests/samples/unpack3.py +0 -16
  1413. package/src/tests/samples/unpack4.py +0 -15
  1414. package/src/tests/samples/unreachable1.py +0 -112
  1415. package/src/tests/samples/unusedCallResult1.py +0 -67
  1416. package/src/tests/samples/unusedCoroutine1.py +0 -23
  1417. package/src/tests/samples/unusedExpression1.py +0 -34
  1418. package/src/tests/samples/unusedVariable1.py +0 -21
  1419. package/src/tests/samples/variadicTypeVar1.py +0 -51
  1420. package/src/tests/samples/variadicTypeVar10.py +0 -65
  1421. package/src/tests/samples/variadicTypeVar11.py +0 -72
  1422. package/src/tests/samples/variadicTypeVar12.py +0 -26
  1423. package/src/tests/samples/variadicTypeVar13.py +0 -35
  1424. package/src/tests/samples/variadicTypeVar14.py +0 -72
  1425. package/src/tests/samples/variadicTypeVar2.py +0 -63
  1426. package/src/tests/samples/variadicTypeVar3.py +0 -86
  1427. package/src/tests/samples/variadicTypeVar4.py +0 -71
  1428. package/src/tests/samples/variadicTypeVar5.py +0 -131
  1429. package/src/tests/samples/variadicTypeVar6.py +0 -78
  1430. package/src/tests/samples/variadicTypeVar7.py +0 -59
  1431. package/src/tests/samples/variadicTypeVar8.py +0 -116
  1432. package/src/tests/samples/variadicTypeVar9.py +0 -38
  1433. package/src/tests/samples/with1.py +0 -117
  1434. package/src/tests/samples/with2.py +0 -63
  1435. package/src/tests/samples/with3.py +0 -66
  1436. package/src/tests/samples/with4.py +0 -24
  1437. package/src/tests/samples/with5.py +0 -33
  1438. package/src/tests/samples/zipfs/bad.egg +0 -1
  1439. package/src/tests/samples/zipfs/bad.zip +0 -1
  1440. package/src/tests/samples/zipfs/basic.egg +0 -0
  1441. package/src/tests/samples/zipfs/basic.zip +0 -0
  1442. package/src/tests/samples/zipfs/corrupt.egg +0 -0
  1443. package/src/tests/samples/zipfs/corrupt.zip +0 -0
  1444. package/src/tests/sourceFile.test.ts +0 -25
  1445. package/src/tests/stringUtils.test.ts +0 -63
  1446. package/src/tests/symbolNameUtils.test.ts +0 -77
  1447. package/src/tests/testState.test.ts +0 -579
  1448. package/src/tests/testUtils.ts +0 -251
  1449. package/src/tests/tokenizer.test.ts +0 -1534
  1450. package/src/tests/typeEvaluator1.test.ts +0 -1372
  1451. package/src/tests/typeEvaluator2.test.ts +0 -1253
  1452. package/src/tests/typeEvaluator3.test.ts +0 -1279
  1453. package/src/tests/typeEvaluator4.test.ts +0 -1178
  1454. package/src/tests/updateSymbolReference.test.ts +0 -1107
  1455. package/src/tests/zipfs.test.ts +0 -116
  1456. package/src/workspaceMap.ts +0 -76
@@ -1,2778 +0,0 @@
1
- /*
2
- * program.ts
3
- * Copyright (c) Microsoft Corporation.
4
- * Licensed under the MIT license.
5
- * Author: Eric Traut
6
- *
7
- * An object that tracks all of the source files being analyzed
8
- * and all of their recursive imports.
9
- */
10
-
11
- import { getHeapStatistics } from 'v8';
12
- import { CancellationToken, CompletionItem, DocumentSymbol } from 'vscode-languageserver';
13
- import { TextDocumentContentChangeEvent } from 'vscode-languageserver-textdocument';
14
- import {
15
- CallHierarchyIncomingCall,
16
- CallHierarchyItem,
17
- CallHierarchyOutgoingCall,
18
- CompletionList,
19
- DocumentHighlight,
20
- MarkupKind,
21
- } from 'vscode-languageserver-types';
22
-
23
- import { OperationCanceledException, throwIfCancellationRequested } from '../common/cancellationUtils';
24
- import { appendArray } from '../common/collectionUtils';
25
- import { ConfigOptions, ExecutionEnvironment } from '../common/configOptions';
26
- import { ConsoleInterface, StandardConsole } from '../common/console';
27
- import { assert, assertNever } from '../common/debug';
28
- import { Diagnostic } from '../common/diagnostic';
29
- import { FileDiagnostics } from '../common/diagnosticSink';
30
- import { FileEditAction, FileEditActions, TextEditAction } from '../common/editAction';
31
- import { LanguageServiceExtension } from '../common/extensibility';
32
- import { LogTracker } from '../common/logTracker';
33
- import {
34
- combinePaths,
35
- getDirectoryPath,
36
- getFileName,
37
- getRelativePath,
38
- isFile,
39
- makeDirectories,
40
- normalizePath,
41
- normalizePathCase,
42
- stripFileExtension,
43
- } from '../common/pathUtils';
44
- import { convertPositionToOffset, convertRangeToTextRange, convertTextRangeToRange } from '../common/positionUtils';
45
- import { computeCompletionSimilarity } from '../common/stringUtils';
46
- import { DocumentRange, doesRangeContain, doRangesIntersect, Position, Range } from '../common/textRange';
47
- import { Duration, timingStats } from '../common/timing';
48
- import {
49
- AutoImporter,
50
- AutoImportResult,
51
- buildModuleSymbolsMap,
52
- ModuleSymbolMap,
53
- } from '../languageService/autoImporter';
54
- import { CallHierarchyProvider } from '../languageService/callHierarchyProvider';
55
- import {
56
- AbbreviationMap,
57
- CompletionMap,
58
- CompletionOptions,
59
- CompletionResultsList,
60
- } from '../languageService/completionProvider';
61
- import { DefinitionFilter } from '../languageService/definitionProvider';
62
- import { DocumentSymbolCollector } from '../languageService/documentSymbolCollector';
63
- import { IndexOptions, IndexResults, WorkspaceSymbolCallback } from '../languageService/documentSymbolProvider';
64
- import { HoverResults } from '../languageService/hoverProvider';
65
- import { ReferenceCallback, ReferencesResult } from '../languageService/referencesProvider';
66
- import { RenameModuleProvider } from '../languageService/renameModuleProvider';
67
- import { SignatureHelpResults } from '../languageService/signatureHelpProvider';
68
- import { ParseNodeType } from '../parser/parseNodes';
69
- import { ParseResults } from '../parser/parser';
70
- import { AbsoluteModuleDescriptor, ImportLookupResult } from './analyzerFileInfo';
71
- import * as AnalyzerNodeInfo from './analyzerNodeInfo';
72
- import { CircularDependency } from './circularDependency';
73
- import { Declaration } from './declaration';
74
- import { ImportResolver } from './importResolver';
75
- import { ImportResult, ImportType } from './importResult';
76
- import { findNodeByOffset, getDocString } from './parseTreeUtils';
77
- import { Scope } from './scope';
78
- import { getScopeForNode } from './scopeUtils';
79
- import { SourceFile } from './sourceFile';
80
- import { isStubFile, SourceMapper } from './sourceMapper';
81
- import { Symbol } from './symbol';
82
- import { isPrivateOrProtectedName } from './symbolNameUtils';
83
- import { createTracePrinter } from './tracePrinter';
84
- import { TypeEvaluator } from './typeEvaluatorTypes';
85
- import { createTypeEvaluatorWithTracker } from './typeEvaluatorWithTracker';
86
- import { PrintTypeFlags } from './typePrinter';
87
- import { Type } from './types';
88
- import { TypeStubWriter } from './typeStubWriter';
89
-
90
- const _maxImportDepth = 256;
91
-
92
- export const MaxWorkspaceIndexFileCount = 2000;
93
-
94
- // Tracks information about each source file in a program,
95
- // including the reason it was added to the program and any
96
- // dependencies that it has on other files in the program.
97
- export interface SourceFileInfo {
98
- // Reference to the source file
99
- sourceFile: SourceFile;
100
-
101
- // Information about the source file
102
- isTypeshedFile: boolean;
103
- isThirdPartyImport: boolean;
104
- isThirdPartyPyTypedPresent: boolean;
105
- diagnosticsVersion?: number | undefined;
106
-
107
- builtinsImport?: SourceFileInfo | undefined;
108
- ipythonDisplayImport?: SourceFileInfo | undefined;
109
-
110
- // Information about the chained source file
111
- // Chained source file is not supposed to exist on file system but
112
- // must exist in the program's source file list. Module level
113
- // scope of the chained source file will be inserted before
114
- // current file's scope.
115
- chainedSourceFile?: SourceFileInfo | undefined;
116
-
117
- // Information about why the file is included in the program
118
- // and its relation to other source files in the program.
119
- isTracked: boolean;
120
- isOpenByClient: boolean;
121
- imports: SourceFileInfo[];
122
- importedBy: SourceFileInfo[];
123
- shadows: SourceFileInfo[];
124
- shadowedBy: SourceFileInfo[];
125
- }
126
-
127
- export interface MaxAnalysisTime {
128
- // Maximum number of ms to analyze when there are open files
129
- // that require analysis. This number is usually kept relatively
130
- // small to guarantee responsiveness during typing.
131
- openFilesTimeInMs: number;
132
-
133
- // Maximum number of ms to analyze when all open files and their
134
- // dependencies have been analyzed. This number can be higher
135
- // to reduce overall analysis time but needs to be short enough
136
- // to remain responsive if an open file is modified.
137
- noOpenFilesTimeInMs: number;
138
- }
139
-
140
- export interface Indices {
141
- setWorkspaceIndex(path: string, indexResults: IndexResults): void;
142
- getIndex(execEnv: string | undefined): Map<string, IndexResults> | undefined;
143
- setIndex(execEnv: string | undefined, path: string, indexResults: IndexResults): void;
144
- reset(): void;
145
- }
146
-
147
- interface UpdateImportInfo {
148
- path: string;
149
- isTypeshedFile: boolean;
150
- isThirdPartyImport: boolean;
151
- isPyTypedPresent: boolean;
152
- }
153
-
154
- export type PreCheckCallback = (parseResults: ParseResults, evaluator: TypeEvaluator) => void;
155
-
156
- export interface OpenFileOptions {
157
- isTracked: boolean;
158
- ipythonMode: boolean;
159
- chainedFilePath: string | undefined;
160
- }
161
-
162
- // Container for all of the files that are being analyzed. Files
163
- // can fall into one or more of the following categories:
164
- // Tracked - specified by the config options
165
- // Referenced - part of the transitive closure
166
- // Opened - temporarily opened in the editor
167
- // Shadowed - implementation file that shadows a type stub file
168
- export class Program {
169
- private _console: ConsoleInterface;
170
- private _sourceFileList: SourceFileInfo[] = [];
171
- private _sourceFileMap = new Map<string, SourceFileInfo>();
172
- private _allowedThirdPartyImports: string[] | undefined;
173
- private _evaluator: TypeEvaluator | undefined;
174
- private _configOptions: ConfigOptions;
175
- private _importResolver: ImportResolver;
176
- private _logTracker: LogTracker;
177
- private _parsedFileCount = 0;
178
- private _preCheckCallback: PreCheckCallback | undefined;
179
-
180
- constructor(
181
- initialImportResolver: ImportResolver,
182
- initialConfigOptions: ConfigOptions,
183
- console?: ConsoleInterface,
184
- private _extension?: LanguageServiceExtension,
185
- logTracker?: LogTracker,
186
- private _disableChecker?: boolean
187
- ) {
188
- this._console = console || new StandardConsole();
189
- this._logTracker = logTracker ?? new LogTracker(console, 'FG');
190
- this._importResolver = initialImportResolver;
191
- this._configOptions = initialConfigOptions;
192
-
193
- this._createNewEvaluator();
194
- }
195
-
196
- get evaluator(): TypeEvaluator | undefined {
197
- return this._evaluator;
198
- }
199
-
200
- setConfigOptions(configOptions: ConfigOptions) {
201
- this._configOptions = configOptions;
202
-
203
- // Create a new evaluator with the updated config options.
204
- this._createNewEvaluator();
205
- }
206
-
207
- setImportResolver(importResolver: ImportResolver) {
208
- this._importResolver = importResolver;
209
-
210
- // Create a new evaluator with the updated import resolver.
211
- // Otherwise, lookup import passed to type evaluator might use
212
- // older import resolver when resolving imports after parsing.
213
- this._createNewEvaluator();
214
- }
215
-
216
- // Sets the list of tracked files that make up the program.
217
- setTrackedFiles(filePaths: string[]): FileDiagnostics[] {
218
- if (this._sourceFileList.length > 0) {
219
- // We need to determine which files to remove from the existing file list.
220
- const newFileMap = new Map<string, string>();
221
- filePaths.forEach((path) => {
222
- newFileMap.set(normalizePathCase(this._fs, path), path);
223
- });
224
-
225
- // Files that are not in the tracked file list are
226
- // marked as no longer tracked.
227
- this._sourceFileList.forEach((oldFile) => {
228
- const filePath = normalizePathCase(this._fs, oldFile.sourceFile.getFilePath());
229
- if (!newFileMap.has(filePath)) {
230
- oldFile.isTracked = false;
231
- }
232
- });
233
- }
234
-
235
- // Add the new files. Only the new items will be added.
236
- this.addTrackedFiles(filePaths);
237
-
238
- return this._removeUnneededFiles();
239
- }
240
-
241
- // Allows a caller to set a callback that is called right before
242
- // a source file is type checked. It is intended for testing only.
243
- setPreCheckCallback(preCheckCallback: PreCheckCallback) {
244
- this._preCheckCallback = preCheckCallback;
245
- }
246
-
247
- // By default, no third-party imports are allowed. This enables
248
- // third-party imports for a specified import and its children.
249
- // For example, if importNames is ['tensorflow'], then third-party
250
- // (absolute) imports are allowed for 'import tensorflow',
251
- // 'import tensorflow.optimizers', etc.
252
- setAllowedThirdPartyImports(importNames: string[]) {
253
- this._allowedThirdPartyImports = importNames;
254
- }
255
-
256
- addTrackedFiles(filePaths: string[], isThirdPartyImport = false, isInPyTypedPackage = false) {
257
- filePaths.forEach((filePath) => {
258
- this.addTrackedFile(filePath, isThirdPartyImport, isInPyTypedPackage);
259
- });
260
- }
261
-
262
- addTrackedFile(filePath: string, isThirdPartyImport = false, isInPyTypedPackage = false): SourceFile {
263
- let sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
264
- if (sourceFileInfo) {
265
- sourceFileInfo.isTracked = true;
266
- return sourceFileInfo.sourceFile;
267
- }
268
-
269
- const importName = this._getImportNameForFile(filePath);
270
- const sourceFile = new SourceFile(
271
- this._fs,
272
- filePath,
273
- importName,
274
- isThirdPartyImport,
275
- isInPyTypedPackage,
276
- this._console,
277
- this._logTracker
278
- );
279
- sourceFileInfo = {
280
- sourceFile,
281
- isTracked: true,
282
- isOpenByClient: false,
283
- isTypeshedFile: false,
284
- isThirdPartyImport,
285
- isThirdPartyPyTypedPresent: isInPyTypedPackage,
286
- diagnosticsVersion: undefined,
287
- imports: [],
288
- importedBy: [],
289
- shadows: [],
290
- shadowedBy: [],
291
- };
292
- this._addToSourceFileListAndMap(sourceFileInfo);
293
- return sourceFile;
294
- }
295
-
296
- setFileOpened(
297
- filePath: string,
298
- version: number | null,
299
- contents: TextDocumentContentChangeEvent[],
300
- options?: OpenFileOptions
301
- ) {
302
- let sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
303
- if (!sourceFileInfo) {
304
- const importName = this._getImportNameForFile(filePath);
305
- const sourceFile = new SourceFile(
306
- this._fs,
307
- filePath,
308
- importName,
309
- /* isThirdPartyImport */ false,
310
- /* isInPyTypedPackage */ false,
311
- this._console,
312
- this._logTracker,
313
- options?.ipythonMode ?? false
314
- );
315
-
316
- const chainedFilePath = options?.chainedFilePath;
317
- sourceFileInfo = {
318
- sourceFile,
319
- isTracked: options?.isTracked ?? false,
320
- chainedSourceFile: chainedFilePath ? this._getSourceFileInfoFromPath(chainedFilePath) : undefined,
321
- isOpenByClient: true,
322
- isTypeshedFile: false,
323
- isThirdPartyImport: false,
324
- isThirdPartyPyTypedPresent: false,
325
- diagnosticsVersion: undefined,
326
- imports: [],
327
- importedBy: [],
328
- shadows: [],
329
- shadowedBy: [],
330
- };
331
- this._addToSourceFileListAndMap(sourceFileInfo);
332
- } else {
333
- sourceFileInfo.isOpenByClient = true;
334
-
335
- // Reset the diagnostic version so we force an update to the
336
- // diagnostics, which can change based on whether the file is open.
337
- // We do not set the version to undefined here because that implies
338
- // there are no diagnostics currently reported for this file.
339
- sourceFileInfo.diagnosticsVersion = 0;
340
- }
341
-
342
- sourceFileInfo.sourceFile.setClientVersion(version, contents);
343
- }
344
-
345
- updateChainedFilePath(filePath: string, chainedFilePath: string | undefined) {
346
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
347
- if (sourceFileInfo) {
348
- sourceFileInfo.chainedSourceFile = chainedFilePath
349
- ? this._getSourceFileInfoFromPath(chainedFilePath)
350
- : undefined;
351
-
352
- sourceFileInfo.sourceFile.markDirty();
353
- this._markFileDirtyRecursive(sourceFileInfo, new Map<string, boolean>());
354
- }
355
- }
356
-
357
- setFileClosed(filePath: string): FileDiagnostics[] {
358
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
359
- if (sourceFileInfo) {
360
- sourceFileInfo.isOpenByClient = false;
361
- sourceFileInfo.sourceFile.setClientVersion(null, []);
362
-
363
- // There is no guarantee that content is saved before the file is closed.
364
- // We need to mark the file dirty so we can re-analyze next time.
365
- // This won't matter much for OpenFileOnly users, but it will matter for
366
- // people who use diagnosticMode Workspace.
367
- if (sourceFileInfo.sourceFile.didContentsChangeOnDisk()) {
368
- sourceFileInfo.sourceFile.markDirty();
369
- this._markFileDirtyRecursive(sourceFileInfo, new Map<string, boolean>());
370
- }
371
- }
372
-
373
- return this._removeUnneededFiles();
374
- }
375
-
376
- markAllFilesDirty(evenIfContentsAreSame: boolean, indexingNeeded = true) {
377
- const markDirtyMap = new Map<string, boolean>();
378
-
379
- this._sourceFileList.forEach((sourceFileInfo) => {
380
- if (evenIfContentsAreSame) {
381
- sourceFileInfo.sourceFile.markDirty(indexingNeeded);
382
- } else if (sourceFileInfo.sourceFile.didContentsChangeOnDisk()) {
383
- sourceFileInfo.sourceFile.markDirty(indexingNeeded);
384
-
385
- // Mark any files that depend on this file as dirty
386
- // also. This will retrigger analysis of these other files.
387
- this._markFileDirtyRecursive(sourceFileInfo, markDirtyMap);
388
- }
389
- });
390
-
391
- if (markDirtyMap.size > 0) {
392
- this._createNewEvaluator();
393
- }
394
- }
395
-
396
- markFilesDirty(filePaths: string[], evenIfContentsAreSame: boolean, indexingNeeded = true) {
397
- const markDirtyMap = new Map<string, boolean>();
398
- filePaths.forEach((filePath) => {
399
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
400
- if (sourceFileInfo) {
401
- const fileName = getFileName(filePath);
402
-
403
- // Handle builtins and __builtins__ specially. They are implicitly
404
- // included by all source files.
405
- if (fileName === 'builtins.pyi' || fileName === '__builtins__.pyi') {
406
- this.markAllFilesDirty(evenIfContentsAreSame, indexingNeeded);
407
- return;
408
- }
409
-
410
- // If !evenIfContentsAreSame, see if the on-disk contents have
411
- // changed. If the file is open, the on-disk contents don't matter
412
- // because we'll receive updates directly from the client.
413
- if (
414
- evenIfContentsAreSame ||
415
- (!sourceFileInfo.isOpenByClient && sourceFileInfo.sourceFile.didContentsChangeOnDisk())
416
- ) {
417
- sourceFileInfo.sourceFile.markDirty(indexingNeeded);
418
-
419
- // Mark any files that depend on this file as dirty
420
- // also. This will retrigger analysis of these other files.
421
- this._markFileDirtyRecursive(sourceFileInfo, markDirtyMap);
422
- }
423
- }
424
- });
425
-
426
- if (markDirtyMap.size > 0) {
427
- this._createNewEvaluator();
428
- }
429
- }
430
-
431
- getFileCount() {
432
- return this._sourceFileList.length;
433
- }
434
-
435
- // Returns the number of files that are considered "user" files and therefore
436
- // are checked.
437
- getUserFileCount() {
438
- return this._sourceFileList.filter((s) => this._isUserCode(s)).length;
439
- }
440
-
441
- getTracked(): SourceFileInfo[] {
442
- return this._sourceFileList.filter((s) => s.isTracked);
443
- }
444
-
445
- getOpened(): SourceFileInfo[] {
446
- return this._sourceFileList.filter((s) => s.isOpenByClient);
447
- }
448
-
449
- getFilesToAnalyzeCount() {
450
- let sourceFileCount = 0;
451
-
452
- if (this._disableChecker) {
453
- return sourceFileCount;
454
- }
455
-
456
- this._sourceFileList.forEach((fileInfo) => {
457
- if (fileInfo.sourceFile.isCheckingRequired()) {
458
- if (this._shouldCheckFile(fileInfo)) {
459
- sourceFileCount++;
460
- }
461
- }
462
- });
463
-
464
- return sourceFileCount;
465
- }
466
-
467
- isCheckingOnlyOpenFiles() {
468
- return this._configOptions.checkOnlyOpenFiles || false;
469
- }
470
-
471
- containsSourceFileIn(folder: string): boolean {
472
- const normalized = normalizePathCase(this._fs, folder);
473
- return this._sourceFileList.some((i) => i.sourceFile.getFilePath().startsWith(normalized));
474
- }
475
-
476
- getSourceFile(filePath: string): SourceFile | undefined {
477
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
478
- if (!sourceFileInfo) {
479
- return undefined;
480
- }
481
-
482
- return sourceFileInfo.sourceFile;
483
- }
484
-
485
- getBoundSourceFile(filePath: string): SourceFile | undefined {
486
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
487
- if (!sourceFileInfo) {
488
- return undefined;
489
- }
490
-
491
- this._bindFile(sourceFileInfo);
492
- return this.getSourceFile(filePath);
493
- }
494
-
495
- // Performs parsing and analysis of any source files in the program
496
- // that require it. If a limit time is specified, the operation
497
- // is interrupted when the time expires. The return value indicates
498
- // whether the method needs to be called again to complete the
499
- // analysis. In interactive mode, the timeout is always limited
500
- // to the smaller value to maintain responsiveness.
501
- analyze(maxTime?: MaxAnalysisTime, token: CancellationToken = CancellationToken.None): boolean {
502
- return this._runEvaluatorWithCancellationToken(token, () => {
503
- const elapsedTime = new Duration();
504
-
505
- const openFiles = this._sourceFileList.filter(
506
- (sf) => sf.isOpenByClient && sf.sourceFile.isCheckingRequired()
507
- );
508
-
509
- if (openFiles.length > 0) {
510
- const effectiveMaxTime = maxTime ? maxTime.openFilesTimeInMs : Number.MAX_VALUE;
511
-
512
- // Check the open files.
513
- for (const sourceFileInfo of openFiles) {
514
- if (this._checkTypes(sourceFileInfo)) {
515
- if (elapsedTime.getDurationInMilliseconds() > effectiveMaxTime) {
516
- return true;
517
- }
518
- }
519
- }
520
-
521
- // If the caller specified a maxTime, return at this point
522
- // since we've finalized all open files. We want to get
523
- // the results to the user as quickly as possible.
524
- if (maxTime !== undefined) {
525
- return true;
526
- }
527
- }
528
-
529
- if (!this._configOptions.checkOnlyOpenFiles) {
530
- const effectiveMaxTime = maxTime ? maxTime.noOpenFilesTimeInMs : Number.MAX_VALUE;
531
-
532
- // Now do type parsing and analysis of the remaining.
533
- for (const sourceFileInfo of this._sourceFileList) {
534
- if (!this._isUserCode(sourceFileInfo)) {
535
- continue;
536
- }
537
-
538
- if (this._checkTypes(sourceFileInfo)) {
539
- if (elapsedTime.getDurationInMilliseconds() > effectiveMaxTime) {
540
- return true;
541
- }
542
- }
543
- }
544
- }
545
-
546
- return false;
547
- });
548
- }
549
-
550
- indexWorkspace(callback: (path: string, results: IndexResults) => void, token: CancellationToken): number {
551
- if (!this._configOptions.indexing) {
552
- return 0;
553
- }
554
-
555
- return this._runEvaluatorWithCancellationToken(token, () => {
556
- // Go through all workspace files to create indexing data.
557
- // This will cause all files in the workspace to be parsed and bound. But
558
- // _handleMemoryHighUsage will make sure we don't OOM and
559
- // at the end of this method, we will drop all trees and symbol tables
560
- // created due to indexing.
561
- const initiallyParsedSet = new Set<SourceFileInfo>();
562
- for (const sourceFileInfo of this._sourceFileList) {
563
- if (!sourceFileInfo.sourceFile.isParseRequired()) {
564
- initiallyParsedSet.add(sourceFileInfo);
565
- }
566
- }
567
-
568
- let count = 0;
569
- for (const sourceFileInfo of this._sourceFileList) {
570
- if (!this._isUserCode(sourceFileInfo) || !sourceFileInfo.sourceFile.isIndexingRequired()) {
571
- continue;
572
- }
573
-
574
- this._bindFile(sourceFileInfo);
575
- const results = sourceFileInfo.sourceFile.index({ indexingForAutoImportMode: false }, token);
576
- if (results) {
577
- if (++count > MaxWorkspaceIndexFileCount) {
578
- this._console.warn(`Workspace indexing has hit its upper limit: 2000 files`);
579
-
580
- dropParseAndBindInfoCreatedForIndexing(this._sourceFileList, initiallyParsedSet);
581
- return count;
582
- }
583
-
584
- callback(sourceFileInfo.sourceFile.getFilePath(), results);
585
- }
586
-
587
- this._handleMemoryHighUsage();
588
- }
589
-
590
- dropParseAndBindInfoCreatedForIndexing(this._sourceFileList, initiallyParsedSet);
591
- return count;
592
- });
593
-
594
- function dropParseAndBindInfoCreatedForIndexing(
595
- sourceFiles: SourceFileInfo[],
596
- initiallyParsedSet: Set<SourceFileInfo>
597
- ) {
598
- for (const sourceFileInfo of sourceFiles) {
599
- if (sourceFileInfo.sourceFile.isParseRequired() || initiallyParsedSet.has(sourceFileInfo)) {
600
- continue;
601
- }
602
-
603
- // Drop parse and bind info created during indexing.
604
- sourceFileInfo.sourceFile.dropParseAndBindInfo();
605
- }
606
- }
607
- }
608
-
609
- // Prints a detailed list of files that have been checked and the times associated
610
- // with each of them, sorted greatest to least.
611
- printDetailedAnalysisTimes() {
612
- const sortedFiles = this._sourceFileList
613
- .filter((s) => s.sourceFile.getCheckTime() !== undefined)
614
- .sort((a, b) => {
615
- return b.sourceFile.getCheckTime()! - a.sourceFile.getCheckTime()!;
616
- });
617
-
618
- this._console.info('');
619
- this._console.info('Analysis time by file');
620
-
621
- sortedFiles.forEach((sfInfo) => {
622
- const checkTimeInMs = sfInfo.sourceFile.getCheckTime()!;
623
- this._console.info(`${checkTimeInMs}ms: ${sfInfo.sourceFile.getFilePath()}`);
624
- });
625
- }
626
-
627
- // Prints import dependency information for each of the files in
628
- // the program, skipping any typeshed files.
629
- printDependencies(projectRootDir: string, verbose: boolean) {
630
- const fs = this._importResolver.fileSystem;
631
- const sortedFiles = this._sourceFileList
632
- .filter((s) => !s.isTypeshedFile)
633
- .sort((a, b) => {
634
- return fs.getOriginalFilePath(a.sourceFile.getFilePath()) <
635
- fs.getOriginalFilePath(b.sourceFile.getFilePath())
636
- ? 1
637
- : -1;
638
- });
639
-
640
- const zeroImportFiles: SourceFile[] = [];
641
-
642
- sortedFiles.forEach((sfInfo) => {
643
- this._console.info('');
644
- let filePath = fs.getOriginalFilePath(sfInfo.sourceFile.getFilePath());
645
- const relPath = getRelativePath(filePath, projectRootDir);
646
- if (relPath) {
647
- filePath = relPath;
648
- }
649
-
650
- this._console.info(`${filePath}`);
651
-
652
- this._console.info(
653
- ` Imports ${sfInfo.imports.length} ` + `file${sfInfo.imports.length === 1 ? '' : 's'}`
654
- );
655
- if (verbose) {
656
- sfInfo.imports.forEach((importInfo) => {
657
- this._console.info(` ${fs.getOriginalFilePath(importInfo.sourceFile.getFilePath())}`);
658
- });
659
- }
660
-
661
- this._console.info(
662
- ` Imported by ${sfInfo.importedBy.length} ` + `file${sfInfo.importedBy.length === 1 ? '' : 's'}`
663
- );
664
- if (verbose) {
665
- sfInfo.importedBy.forEach((importInfo) => {
666
- this._console.info(` ${fs.getOriginalFilePath(importInfo.sourceFile.getFilePath())}`);
667
- });
668
- }
669
-
670
- if (sfInfo.importedBy.length === 0) {
671
- zeroImportFiles.push(sfInfo.sourceFile);
672
- }
673
- });
674
-
675
- if (zeroImportFiles.length > 0) {
676
- this._console.info('');
677
- this._console.info(
678
- `${zeroImportFiles.length} file${zeroImportFiles.length === 1 ? '' : 's'}` + ` not explicitly imported`
679
- );
680
- zeroImportFiles.forEach((importFile) => {
681
- this._console.info(` ${fs.getOriginalFilePath(importFile.getFilePath())}`);
682
- });
683
- }
684
- }
685
-
686
- writeTypeStub(targetImportPath: string, targetIsSingleFile: boolean, stubPath: string, token: CancellationToken) {
687
- for (const sourceFileInfo of this._sourceFileList) {
688
- throwIfCancellationRequested(token);
689
-
690
- const filePath = sourceFileInfo.sourceFile.getFilePath();
691
-
692
- // Generate type stubs only for the files within the target path,
693
- // not any files that the target module happened to import.
694
- const relativePath = getRelativePath(filePath, targetImportPath);
695
- if (relativePath !== undefined) {
696
- let typeStubPath = normalizePath(combinePaths(stubPath, relativePath));
697
-
698
- // If the target is a single file implementation, as opposed to
699
- // a package in a directory, transform the name of the type stub
700
- // to __init__.pyi because we're placing it in a directory.
701
- if (targetIsSingleFile) {
702
- typeStubPath = combinePaths(getDirectoryPath(typeStubPath), '__init__.pyi');
703
- } else {
704
- typeStubPath = stripFileExtension(typeStubPath) + '.pyi';
705
- }
706
-
707
- const typeStubDir = getDirectoryPath(typeStubPath);
708
-
709
- try {
710
- makeDirectories(this._fs, typeStubDir, stubPath);
711
- } catch (e: any) {
712
- const errMsg = `Could not create directory for '${typeStubDir}'`;
713
- throw new Error(errMsg);
714
- }
715
-
716
- this._bindFile(sourceFileInfo);
717
-
718
- this._runEvaluatorWithCancellationToken(token, () => {
719
- const writer = new TypeStubWriter(typeStubPath, sourceFileInfo.sourceFile, this._evaluator!);
720
- writer.write();
721
- });
722
-
723
- // This operation can consume significant memory, so check
724
- // for situations where we need to discard the type cache.
725
- this._handleMemoryHighUsage();
726
- }
727
- }
728
- }
729
-
730
- getTypeOfSymbol(symbol: Symbol) {
731
- this._handleMemoryHighUsage();
732
-
733
- const evaluator = this._evaluator || this._createNewEvaluator();
734
- return evaluator.getEffectiveTypeOfSymbol(symbol);
735
- }
736
-
737
- printType(type: Type, expandTypeAlias: boolean): string {
738
- this._handleMemoryHighUsage();
739
-
740
- const evaluator = this._evaluator || this._createNewEvaluator();
741
- return evaluator.printType(type, expandTypeAlias);
742
- }
743
-
744
- private static _getPrintTypeFlags(configOptions: ConfigOptions): PrintTypeFlags {
745
- let flags = PrintTypeFlags.None;
746
-
747
- if (configOptions.diagnosticRuleSet.printUnknownAsAny) {
748
- flags |= PrintTypeFlags.PrintUnknownWithAny;
749
- }
750
-
751
- if (configOptions.diagnosticRuleSet.omitConditionalConstraint) {
752
- flags |= PrintTypeFlags.OmitConditionalConstraint;
753
- }
754
-
755
- if (configOptions.diagnosticRuleSet.omitTypeArgsIfAny) {
756
- flags |= PrintTypeFlags.OmitTypeArgumentsIfAny;
757
- }
758
-
759
- if (configOptions.diagnosticRuleSet.omitUnannotatedParamType) {
760
- flags |= PrintTypeFlags.OmitUnannotatedParamType;
761
- }
762
-
763
- if (configOptions.diagnosticRuleSet.pep604Printing) {
764
- flags |= PrintTypeFlags.PEP604;
765
- }
766
-
767
- return flags;
768
- }
769
-
770
- private get _fs() {
771
- return this._importResolver.fileSystem;
772
- }
773
-
774
- private _getImportNameForFile(filePath: string) {
775
- const moduleNameAndType = this._importResolver.getModuleNameForImport(
776
- filePath,
777
- this._configOptions.getDefaultExecEnvironment()
778
- );
779
- return moduleNameAndType.moduleName;
780
- }
781
-
782
- // A "shadowed" file is a python source file that has been added to the program because
783
- // it "shadows" a type stub file for purposes of finding doc strings and definitions.
784
- // We need to track the relationship so if the original type stub is removed from the
785
- // program, we can remove the corresponding shadowed file and any files it imports.
786
- private _addShadowedFile(stubFile: SourceFileInfo, shadowImplPath: string): SourceFile {
787
- let shadowFileInfo = this._getSourceFileInfoFromPath(shadowImplPath);
788
-
789
- if (!shadowFileInfo) {
790
- const importName = this._getImportNameForFile(shadowImplPath);
791
- const sourceFile = new SourceFile(
792
- this._fs,
793
- shadowImplPath,
794
- importName,
795
- /* isThirdPartyImport */ false,
796
- /* isInPyTypedPackage */ false,
797
- this._console,
798
- this._logTracker
799
- );
800
- shadowFileInfo = {
801
- sourceFile,
802
- isTracked: false,
803
- isOpenByClient: false,
804
- isTypeshedFile: false,
805
- isThirdPartyImport: false,
806
- isThirdPartyPyTypedPresent: false,
807
- diagnosticsVersion: undefined,
808
- imports: [],
809
- importedBy: [],
810
- shadows: [],
811
- shadowedBy: [],
812
- };
813
- this._addToSourceFileListAndMap(shadowFileInfo);
814
- }
815
-
816
- if (!shadowFileInfo.shadows.includes(stubFile)) {
817
- shadowFileInfo.shadows.push(stubFile);
818
- }
819
-
820
- if (!stubFile.shadowedBy.includes(shadowFileInfo)) {
821
- stubFile.shadowedBy.push(shadowFileInfo);
822
- }
823
-
824
- return shadowFileInfo.sourceFile;
825
- }
826
-
827
- private _createNewEvaluator() {
828
- if (this._evaluator) {
829
- // We shouldn't need to call this, but there appears to be a bug
830
- // in the v8 garbage collector where it's unable to resolve orphaned
831
- // objects without us giving it some assistance.
832
- this._evaluator.disposeEvaluator();
833
- }
834
-
835
- this._evaluator = createTypeEvaluatorWithTracker(
836
- this._lookUpImport,
837
- {
838
- printTypeFlags: Program._getPrintTypeFlags(this._configOptions),
839
- logCalls: this._configOptions.logTypeEvaluationTime,
840
- minimumLoggingThreshold: this._configOptions.typeEvaluationTimeThreshold,
841
- analyzeUnannotatedFunctions: this._configOptions.analyzeUnannotatedFunctions,
842
- evaluateUnknownImportsAsAny: !!this._configOptions.evaluateUnknownImportsAsAny,
843
- verifyTypeCacheEvaluatorFlags: !!this._configOptions.internalTestMode,
844
- },
845
- this._logTracker,
846
- this._configOptions.logTypeEvaluationTime
847
- ? createTracePrinter(
848
- this._importResolver.getImportRoots(
849
- this._configOptions.findExecEnvironment(this._configOptions.projectRoot)
850
- )
851
- )
852
- : undefined
853
- );
854
-
855
- return this._evaluator;
856
- }
857
-
858
- private _parseFile(fileToParse: SourceFileInfo, content?: string) {
859
- if (!this._isFileNeeded(fileToParse) || !fileToParse.sourceFile.isParseRequired()) {
860
- return;
861
- }
862
-
863
- if (fileToParse.sourceFile.parse(this._configOptions, this._importResolver, content)) {
864
- this._parsedFileCount++;
865
- this._updateSourceFileImports(fileToParse, this._configOptions);
866
- }
867
-
868
- if (fileToParse.sourceFile.isFileDeleted()) {
869
- fileToParse.isTracked = false;
870
-
871
- // Mark any files that depend on this file as dirty
872
- // also. This will retrigger analysis of these other files.
873
- const markDirtyMap = new Map<string, boolean>();
874
- this._markFileDirtyRecursive(fileToParse, markDirtyMap);
875
-
876
- // Invalidate the import resolver's cache as well.
877
- this._importResolver.invalidateCache();
878
- }
879
- }
880
-
881
- // Binds the specified file and all of its dependencies, recursively. If
882
- // it runs out of time, it returns true. If it completes, it returns false.
883
- private _bindFile(fileToAnalyze: SourceFileInfo, content?: string): void {
884
- if (!this._isFileNeeded(fileToAnalyze) || !fileToAnalyze.sourceFile.isBindingRequired()) {
885
- return;
886
- }
887
-
888
- this._parseFile(fileToAnalyze, content);
889
-
890
- const getScopeIfAvailable = (fileInfo: SourceFileInfo | undefined) => {
891
- if (!fileInfo || fileInfo === fileToAnalyze) {
892
- return undefined;
893
- }
894
-
895
- this._bindFile(fileInfo);
896
- if (fileInfo.sourceFile.isFileDeleted()) {
897
- return undefined;
898
- }
899
-
900
- const parseResults = fileInfo.sourceFile.getParseResults();
901
- if (!parseResults) {
902
- return undefined;
903
- }
904
-
905
- const scope = AnalyzerNodeInfo.getScope(parseResults.parseTree);
906
- assert(scope !== undefined);
907
-
908
- return scope;
909
- };
910
-
911
- let builtinsScope: Scope | undefined;
912
- if (fileToAnalyze.builtinsImport && fileToAnalyze.builtinsImport !== fileToAnalyze) {
913
- // If it is not builtin module itself, we need to parse and bind
914
- // the ipython display import if required. Otherwise, get builtin module.
915
- builtinsScope =
916
- getScopeIfAvailable(fileToAnalyze.chainedSourceFile) ??
917
- getScopeIfAvailable(fileToAnalyze.ipythonDisplayImport) ??
918
- getScopeIfAvailable(fileToAnalyze.builtinsImport);
919
- }
920
-
921
- fileToAnalyze.sourceFile.bind(this._configOptions, this._lookUpImport, builtinsScope);
922
- }
923
-
924
- private _lookUpImport = (filePathOrModule: string | AbsoluteModuleDescriptor): ImportLookupResult | undefined => {
925
- let sourceFileInfo: SourceFileInfo | undefined;
926
-
927
- if (typeof filePathOrModule === 'string') {
928
- sourceFileInfo = this._getSourceFileInfoFromPath(filePathOrModule);
929
- } else {
930
- // Resolve the import.
931
- const importResult = this._importResolver.resolveImport(
932
- filePathOrModule.importingFilePath,
933
- this._configOptions.findExecEnvironment(filePathOrModule.importingFilePath),
934
- {
935
- leadingDots: 0,
936
- nameParts: filePathOrModule.nameParts,
937
- importedSymbols: undefined,
938
- }
939
- );
940
-
941
- if (importResult.isImportFound && !importResult.isNativeLib && importResult.resolvedPaths.length > 0) {
942
- let resolvedPath = importResult.resolvedPaths[importResult.resolvedPaths.length - 1];
943
- if (resolvedPath) {
944
- // See if the source file already exists in the program.
945
- sourceFileInfo = this._getSourceFileInfoFromPath(resolvedPath);
946
-
947
- if (!sourceFileInfo) {
948
- resolvedPath = normalizePathCase(this._fs, resolvedPath);
949
-
950
- // Start tracking the source file.
951
- this.addTrackedFile(resolvedPath);
952
- sourceFileInfo = this._getSourceFileInfoFromPath(resolvedPath);
953
- }
954
- }
955
- }
956
- }
957
-
958
- if (!sourceFileInfo) {
959
- return undefined;
960
- }
961
-
962
- if (sourceFileInfo.sourceFile.isBindingRequired()) {
963
- // Bind the file if it's not already bound. Don't count this time
964
- // against the type checker.
965
- timingStats.typeCheckerTime.subtractFromTime(() => {
966
- this._bindFile(sourceFileInfo!);
967
- });
968
- }
969
-
970
- const symbolTable = sourceFileInfo.sourceFile.getModuleSymbolTable();
971
- if (!symbolTable) {
972
- return undefined;
973
- }
974
-
975
- const parseResults = sourceFileInfo.sourceFile.getParseResults();
976
- const moduleNode = parseResults!.parseTree;
977
-
978
- const dunderAllInfo = AnalyzerNodeInfo.getDunderAllInfo(parseResults!.parseTree);
979
-
980
- return {
981
- symbolTable,
982
- dunderAllNames: dunderAllInfo?.names,
983
- usesUnsupportedDunderAllForm: dunderAllInfo?.usesUnsupportedDunderAllForm ?? false,
984
- get docString() {
985
- return getDocString(moduleNode.statements);
986
- },
987
- };
988
- };
989
-
990
- // Build a map of all modules within this program and the module-
991
- // level scope that contains the symbol table for the module.
992
- private _buildModuleSymbolsMap(
993
- sourceFileToExclude: SourceFileInfo,
994
- userFileOnly: boolean,
995
- includeIndexUserSymbols: boolean,
996
- token: CancellationToken
997
- ): ModuleSymbolMap {
998
- // If we have library map, always use the map for library symbols.
999
- return buildModuleSymbolsMap(
1000
- this._sourceFileList.filter(
1001
- (s) => s !== sourceFileToExclude && (userFileOnly ? this._isUserCode(s) : true)
1002
- ),
1003
- includeIndexUserSymbols,
1004
- token
1005
- );
1006
- }
1007
-
1008
- private _shouldCheckFile(fileInfo: SourceFileInfo) {
1009
- // Always do a full checking for a file that's open in the editor.
1010
- if (fileInfo.isOpenByClient) {
1011
- return true;
1012
- }
1013
-
1014
- // If the file isn't currently open, only perform full checking for
1015
- // files that are tracked, and only if the checkOnlyOpenFiles is disabled.
1016
- if (!this._configOptions.checkOnlyOpenFiles && fileInfo.isTracked) {
1017
- return true;
1018
- }
1019
-
1020
- return false;
1021
- }
1022
-
1023
- private _checkTypes(fileToCheck: SourceFileInfo) {
1024
- return this._logTracker.log(`analyzing: ${fileToCheck.sourceFile.getFilePath()}`, (logState) => {
1025
- // If the file isn't needed because it was eliminated from the
1026
- // transitive closure or deleted, skip the file rather than wasting
1027
- // time on it.
1028
- if (!this._isFileNeeded(fileToCheck)) {
1029
- logState.suppress();
1030
- return false;
1031
- }
1032
-
1033
- if (!fileToCheck.sourceFile.isCheckingRequired()) {
1034
- logState.suppress();
1035
- return false;
1036
- }
1037
-
1038
- if (!this._shouldCheckFile(fileToCheck)) {
1039
- logState.suppress();
1040
- return false;
1041
- }
1042
-
1043
- this._bindFile(fileToCheck);
1044
-
1045
- if (this._preCheckCallback) {
1046
- const parseResults = fileToCheck.sourceFile.getParseResults();
1047
- if (parseResults) {
1048
- this._preCheckCallback(parseResults, this._evaluator!);
1049
- }
1050
- }
1051
-
1052
- if (!this._disableChecker) {
1053
- fileToCheck.sourceFile.check(this._importResolver, this._evaluator!);
1054
- }
1055
-
1056
- // For very large programs, we may need to discard the evaluator and
1057
- // its cached types to avoid running out of heap space.
1058
- this._handleMemoryHighUsage();
1059
-
1060
- // Detect import cycles that involve the file.
1061
- if (this._configOptions.diagnosticRuleSet.reportImportCycles !== 'none') {
1062
- // Don't detect import cycles when doing type stub generation. Some
1063
- // third-party modules are pretty convoluted.
1064
- if (!this._allowedThirdPartyImports) {
1065
- // We need to force all of the files to be parsed and build
1066
- // a closure map for the files.
1067
- const closureMap = new Map<string, SourceFileInfo>();
1068
- this._getImportsRecursive(fileToCheck, closureMap, 0);
1069
-
1070
- closureMap.forEach((file) => {
1071
- timingStats.cycleDetectionTime.timeOperation(() => {
1072
- const filesVisitedMap = new Map<string, SourceFileInfo>();
1073
-
1074
- if (!this._detectAndReportImportCycles(file, filesVisitedMap)) {
1075
- // If no cycles were reported, set a flag in all of the visited files
1076
- // so we don't need to visit them again on subsequent cycle checks.
1077
- filesVisitedMap.forEach((sourceFileInfo) => {
1078
- sourceFileInfo.sourceFile.setNoCircularDependencyConfirmed();
1079
- });
1080
- }
1081
- });
1082
- });
1083
- }
1084
- }
1085
-
1086
- return true;
1087
- });
1088
- }
1089
-
1090
- // Builds a map of files that includes the specified file and all of the files
1091
- // it imports (recursively) and ensures that all such files. If any of these files
1092
- // have already been checked (they and their recursive imports have completed the
1093
- // check phase), they are not included in the results.
1094
- private _getImportsRecursive(
1095
- file: SourceFileInfo,
1096
- closureMap: Map<string, SourceFileInfo>,
1097
- recursionCount: number
1098
- ) {
1099
- // If the file is already in the closure map, we found a cyclical
1100
- // dependency. Don't recur further.
1101
- const filePath = normalizePathCase(this._fs, file.sourceFile.getFilePath());
1102
- if (closureMap.has(filePath)) {
1103
- return;
1104
- }
1105
-
1106
- // If the import chain is too long, emit an error. Otherwise we
1107
- // risk blowing the stack.
1108
- if (recursionCount > _maxImportDepth) {
1109
- file.sourceFile.setHitMaxImportDepth(_maxImportDepth);
1110
- return;
1111
- }
1112
-
1113
- // Add the file to the closure map.
1114
- closureMap.set(filePath, file);
1115
-
1116
- // Recursively add the file's imports.
1117
- for (const importedFileInfo of file.imports) {
1118
- this._getImportsRecursive(importedFileInfo, closureMap, recursionCount + 1);
1119
- }
1120
- }
1121
-
1122
- private _detectAndReportImportCycles(
1123
- sourceFileInfo: SourceFileInfo,
1124
- filesVisited: Map<string, SourceFileInfo>,
1125
- dependencyChain: SourceFileInfo[] = [],
1126
- dependencyMap = new Map<string, boolean>()
1127
- ): boolean {
1128
- // Don't bother checking for typestub files or third-party files.
1129
- if (sourceFileInfo.sourceFile.isStubFile() || sourceFileInfo.isThirdPartyImport) {
1130
- return false;
1131
- }
1132
-
1133
- // If we've already confirmed that this source file isn't part of a
1134
- // cycle, we can skip it entirely.
1135
- if (sourceFileInfo.sourceFile.isNoCircularDependencyConfirmed()) {
1136
- return false;
1137
- }
1138
-
1139
- filesVisited.set(sourceFileInfo.sourceFile.getFilePath(), sourceFileInfo);
1140
- let detectedCycle = false;
1141
-
1142
- const filePath = normalizePathCase(this._fs, sourceFileInfo.sourceFile.getFilePath());
1143
- if (dependencyMap.has(filePath)) {
1144
- // Look for chains at least two in length. A file that contains
1145
- // an "import . from X" will technically create a cycle with
1146
- // itself, but those are not interesting to report.
1147
- if (dependencyChain.length > 1 && sourceFileInfo === dependencyChain[0]) {
1148
- this._logImportCycle(dependencyChain);
1149
- detectedCycle = true;
1150
- }
1151
- } else {
1152
- // If we've already checked this dependency along
1153
- // some other path, we can skip it.
1154
- if (dependencyMap.has(filePath)) {
1155
- return false;
1156
- }
1157
-
1158
- // We use both a map (for fast lookups) and a list
1159
- // (for ordering information). Set the dependency map
1160
- // entry to true to indicate that we're actively exploring
1161
- // that dependency.
1162
- dependencyMap.set(filePath, true);
1163
- dependencyChain.push(sourceFileInfo);
1164
-
1165
- for (const imp of sourceFileInfo.imports) {
1166
- if (this._detectAndReportImportCycles(imp, filesVisited, dependencyChain, dependencyMap)) {
1167
- detectedCycle = true;
1168
- }
1169
- }
1170
-
1171
- // Set the dependencyMap entry to false to indicate that we have
1172
- // already explored this file and don't need to explore it again.
1173
- dependencyMap.set(filePath, false);
1174
- dependencyChain.pop();
1175
- }
1176
-
1177
- return detectedCycle;
1178
- }
1179
-
1180
- private _logImportCycle(dependencyChain: SourceFileInfo[]) {
1181
- const circDep = new CircularDependency();
1182
- dependencyChain.forEach((sourceFileInfo) => {
1183
- circDep.appendPath(sourceFileInfo.sourceFile.getFilePath());
1184
- });
1185
-
1186
- circDep.normalizeOrder();
1187
- const firstFilePath = circDep.getPaths()[0];
1188
- const firstSourceFile = this._getSourceFileInfoFromPath(firstFilePath)!;
1189
- assert(firstSourceFile !== undefined);
1190
- firstSourceFile.sourceFile.addCircularDependency(circDep);
1191
- }
1192
-
1193
- private _markFileDirtyRecursive(
1194
- sourceFileInfo: SourceFileInfo,
1195
- markMap: Map<string, boolean>,
1196
- forceRebinding = false
1197
- ) {
1198
- const filePath = normalizePathCase(this._fs, sourceFileInfo.sourceFile.getFilePath());
1199
-
1200
- // Don't mark it again if it's already been visited.
1201
- if (!markMap.has(filePath)) {
1202
- sourceFileInfo.sourceFile.markReanalysisRequired(forceRebinding);
1203
- markMap.set(filePath, true);
1204
-
1205
- sourceFileInfo.importedBy.forEach((dep) => {
1206
- // Changes on chained source file can change symbols in the symbol table and
1207
- // dependencies on the dependent file. Force rebinding.
1208
- const forceRebinding = dep.chainedSourceFile === sourceFileInfo;
1209
- this._markFileDirtyRecursive(dep, markMap, forceRebinding);
1210
- });
1211
- }
1212
- }
1213
-
1214
- getTextOnRange(filePath: string, range: Range, token: CancellationToken): string | undefined {
1215
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1216
- if (!sourceFileInfo) {
1217
- return undefined;
1218
- }
1219
-
1220
- const sourceFile = sourceFileInfo.sourceFile;
1221
- const fileContents = sourceFile.getOpenFileContents();
1222
- if (fileContents === undefined) {
1223
- // this only works with opened file
1224
- return undefined;
1225
- }
1226
-
1227
- return this._runEvaluatorWithCancellationToken(token, () => {
1228
- this._parseFile(sourceFileInfo);
1229
-
1230
- const parseTree = sourceFile.getParseResults()!;
1231
- const textRange = convertRangeToTextRange(range, parseTree.tokenizerOutput.lines);
1232
- if (!textRange) {
1233
- return undefined;
1234
- }
1235
-
1236
- return fileContents.substr(textRange.start, textRange.length);
1237
- });
1238
- }
1239
-
1240
- getAutoImports(
1241
- filePath: string,
1242
- range: Range,
1243
- similarityLimit: number,
1244
- nameMap: AbbreviationMap | undefined,
1245
- libraryMap: Map<string, IndexResults> | undefined,
1246
- lazyEdit: boolean,
1247
- allowVariableInAll: boolean,
1248
- token: CancellationToken
1249
- ): AutoImportResult[] {
1250
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1251
- if (!sourceFileInfo) {
1252
- return [];
1253
- }
1254
-
1255
- const sourceFile = sourceFileInfo.sourceFile;
1256
- const fileContents = sourceFile.getOpenFileContents();
1257
- if (fileContents === undefined) {
1258
- // this only works with opened file
1259
- return [];
1260
- }
1261
-
1262
- return this._runEvaluatorWithCancellationToken(token, () => {
1263
- this._bindFile(sourceFileInfo);
1264
-
1265
- const parseTree = sourceFile.getParseResults()!;
1266
- const textRange = convertRangeToTextRange(range, parseTree.tokenizerOutput.lines);
1267
- if (!textRange) {
1268
- return [];
1269
- }
1270
-
1271
- const currentNode = findNodeByOffset(parseTree.parseTree, textRange.start);
1272
- if (!currentNode) {
1273
- return [];
1274
- }
1275
-
1276
- const writtenWord = fileContents.substr(textRange.start, textRange.length);
1277
- const map = this._buildModuleSymbolsMap(
1278
- sourceFileInfo,
1279
- !!libraryMap,
1280
- /* includeIndexUserSymbols */ true,
1281
- token
1282
- );
1283
- const autoImporter = new AutoImporter(
1284
- this._configOptions.findExecEnvironment(filePath),
1285
- this._importResolver,
1286
- parseTree,
1287
- range.start,
1288
- new CompletionMap(),
1289
- map,
1290
- {
1291
- lazyEdit,
1292
- allowVariableInAll,
1293
- libraryMap,
1294
- patternMatcher: (p, t) => computeCompletionSimilarity(p, t) > similarityLimit,
1295
- }
1296
- );
1297
-
1298
- // Filter out any name that is already defined in the current scope.
1299
- const results: AutoImportResult[] = [];
1300
-
1301
- const currentScope = getScopeForNode(currentNode);
1302
- if (currentScope) {
1303
- const info = nameMap?.get(writtenWord);
1304
- if (info) {
1305
- // No scope filter is needed since we only do exact match.
1306
- appendArray(results, autoImporter.getAutoImportCandidatesForAbbr(writtenWord, info, token));
1307
- }
1308
-
1309
- results.push(
1310
- ...autoImporter
1311
- .getAutoImportCandidates(writtenWord, similarityLimit, /* abbrFromUsers */ undefined, token)
1312
- .filter((r) => !currentScope.lookUpSymbolRecursive(r.name))
1313
- );
1314
- }
1315
-
1316
- return results;
1317
- });
1318
- }
1319
-
1320
- getDiagnostics(options: ConfigOptions): FileDiagnostics[] {
1321
- const fileDiagnostics: FileDiagnostics[] = this._removeUnneededFiles();
1322
-
1323
- this._sourceFileList.forEach((sourceFileInfo) => {
1324
- if (this._shouldCheckFile(sourceFileInfo)) {
1325
- const diagnostics = sourceFileInfo.sourceFile.getDiagnostics(
1326
- options,
1327
- sourceFileInfo.diagnosticsVersion
1328
- );
1329
- if (diagnostics !== undefined) {
1330
- fileDiagnostics.push({
1331
- filePath: sourceFileInfo.sourceFile.getFilePath(),
1332
- version: sourceFileInfo.sourceFile.getClientVersion(),
1333
- diagnostics,
1334
- });
1335
-
1336
- // Update the cached diagnosticsVersion so we can determine
1337
- // whether there are any updates next time we call getDiagnostics.
1338
- sourceFileInfo.diagnosticsVersion = sourceFileInfo.sourceFile.getDiagnosticVersion();
1339
- }
1340
- } else if (
1341
- !sourceFileInfo.isOpenByClient &&
1342
- options.checkOnlyOpenFiles &&
1343
- sourceFileInfo.diagnosticsVersion !== undefined
1344
- ) {
1345
- // This condition occurs when the user switches from workspace to
1346
- // "open files only" mode. Clear all diagnostics for this file.
1347
- fileDiagnostics.push({
1348
- filePath: sourceFileInfo.sourceFile.getFilePath(),
1349
- version: sourceFileInfo.sourceFile.getClientVersion(),
1350
- diagnostics: [],
1351
- });
1352
- sourceFileInfo.diagnosticsVersion = undefined;
1353
- }
1354
- });
1355
-
1356
- return fileDiagnostics;
1357
- }
1358
-
1359
- getDiagnosticsForRange(filePath: string, range: Range): Diagnostic[] {
1360
- const sourceFile = this.getSourceFile(filePath);
1361
- if (!sourceFile) {
1362
- return [];
1363
- }
1364
-
1365
- const unfilteredDiagnostics = sourceFile.getDiagnostics(this._configOptions);
1366
- if (!unfilteredDiagnostics) {
1367
- return [];
1368
- }
1369
-
1370
- return unfilteredDiagnostics.filter((diag) => {
1371
- return doRangesIntersect(diag.range, range);
1372
- });
1373
- }
1374
-
1375
- getDefinitionsForPosition(
1376
- filePath: string,
1377
- position: Position,
1378
- filter: DefinitionFilter,
1379
- token: CancellationToken
1380
- ): DocumentRange[] | undefined {
1381
- return this._runEvaluatorWithCancellationToken(token, () => {
1382
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1383
- if (!sourceFileInfo) {
1384
- return undefined;
1385
- }
1386
-
1387
- this._bindFile(sourceFileInfo);
1388
-
1389
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1390
- return sourceFileInfo.sourceFile.getDefinitionsForPosition(
1391
- this._createSourceMapper(execEnv),
1392
- position,
1393
- filter,
1394
- this._evaluator!,
1395
- token
1396
- );
1397
- });
1398
- }
1399
-
1400
- getTypeDefinitionsForPosition(
1401
- filePath: string,
1402
- position: Position,
1403
- token: CancellationToken
1404
- ): DocumentRange[] | undefined {
1405
- return this._runEvaluatorWithCancellationToken(token, () => {
1406
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1407
- if (!sourceFileInfo) {
1408
- return undefined;
1409
- }
1410
-
1411
- this._bindFile(sourceFileInfo);
1412
-
1413
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1414
- return sourceFileInfo.sourceFile.getTypeDefinitionsForPosition(
1415
- this._createSourceMapper(execEnv, /* mapCompiled */ false, /* preferStubs */ true),
1416
- position,
1417
- this._evaluator!,
1418
- filePath,
1419
- token
1420
- );
1421
- });
1422
- }
1423
-
1424
- reportReferencesForPosition(
1425
- filePath: string,
1426
- position: Position,
1427
- includeDeclaration: boolean,
1428
- reporter: ReferenceCallback,
1429
- token: CancellationToken
1430
- ) {
1431
- this._runEvaluatorWithCancellationToken(token, () => {
1432
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1433
- if (!sourceFileInfo) {
1434
- return;
1435
- }
1436
-
1437
- const invokedFromUserFile = this._isUserCode(sourceFileInfo);
1438
- this._bindFile(sourceFileInfo);
1439
-
1440
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1441
- const referencesResult = sourceFileInfo.sourceFile.getDeclarationForPosition(
1442
- this._createSourceMapper(execEnv),
1443
- position,
1444
- this._evaluator!,
1445
- reporter,
1446
- token
1447
- );
1448
-
1449
- if (!referencesResult) {
1450
- return;
1451
- }
1452
-
1453
- // Do we need to do a global search as well?
1454
- if (referencesResult.requiresGlobalSearch) {
1455
- for (const curSourceFileInfo of this._sourceFileList) {
1456
- throwIfCancellationRequested(token);
1457
-
1458
- // "Find all references" will only include references from user code
1459
- // unless the file is explicitly opened in the editor or it is invoked from non user files.
1460
- if (
1461
- curSourceFileInfo.isOpenByClient ||
1462
- !invokedFromUserFile ||
1463
- this._isUserCode(curSourceFileInfo)
1464
- ) {
1465
- // See if the reference symbol's string is located somewhere within the file.
1466
- // If not, we can skip additional processing for the file.
1467
- const fileContents = curSourceFileInfo.sourceFile.getFileContent();
1468
- if (!fileContents || fileContents.search(referencesResult.symbolName) >= 0) {
1469
- this._bindFile(curSourceFileInfo);
1470
-
1471
- curSourceFileInfo.sourceFile.addReferences(
1472
- referencesResult,
1473
- includeDeclaration,
1474
- this._evaluator!,
1475
- token
1476
- );
1477
- }
1478
-
1479
- // This operation can consume significant memory, so check
1480
- // for situations where we need to discard the type cache.
1481
- this._handleMemoryHighUsage();
1482
- }
1483
- }
1484
-
1485
- // Make sure to include declarations regardless where they are defined
1486
- // if includeDeclaration is set.
1487
- if (includeDeclaration) {
1488
- for (const decl of referencesResult.declarations) {
1489
- throwIfCancellationRequested(token);
1490
-
1491
- if (referencesResult.locations.some((l) => l.path === decl.path)) {
1492
- // Already included.
1493
- continue;
1494
- }
1495
-
1496
- const declFileInfo = this._getSourceFileInfoFromPath(decl.path);
1497
- if (!declFileInfo) {
1498
- // The file the declaration belongs to doesn't belong to the program.
1499
- continue;
1500
- }
1501
-
1502
- const tempResult = new ReferencesResult(
1503
- referencesResult.requiresGlobalSearch,
1504
- referencesResult.nodeAtOffset,
1505
- referencesResult.symbolName,
1506
- referencesResult.declarations
1507
- );
1508
-
1509
- declFileInfo.sourceFile.addReferences(tempResult, includeDeclaration, this._evaluator!, token);
1510
- for (const loc of tempResult.locations) {
1511
- // Include declarations only. And throw away any references
1512
- if (loc.path === decl.path && doesRangeContain(decl.range, loc.range)) {
1513
- referencesResult.addLocations(loc);
1514
- }
1515
- }
1516
- }
1517
- }
1518
- } else {
1519
- sourceFileInfo.sourceFile.addReferences(referencesResult, includeDeclaration, this._evaluator!, token);
1520
- }
1521
- });
1522
- }
1523
-
1524
- getFileIndex(filePath: string, options: IndexOptions, token: CancellationToken): IndexResults | undefined {
1525
- if (options.indexingForAutoImportMode) {
1526
- // Memory optimization. We only want to hold onto symbols
1527
- // usable outside when importSymbolsOnly is on.
1528
- const name = stripFileExtension(getFileName(filePath));
1529
- if (isPrivateOrProtectedName(name)) {
1530
- return undefined;
1531
- }
1532
- }
1533
-
1534
- this._handleMemoryHighUsage();
1535
-
1536
- return this._runEvaluatorWithCancellationToken(token, () => {
1537
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1538
- if (!sourceFileInfo) {
1539
- return undefined;
1540
- }
1541
-
1542
- const content = sourceFileInfo.sourceFile.getFileContent() ?? '';
1543
- if (
1544
- options.indexingForAutoImportMode &&
1545
- !options.forceIndexing &&
1546
- !sourceFileInfo.sourceFile.isStubFile() &&
1547
- !sourceFileInfo.sourceFile.isThirdPartyPyTypedPresent()
1548
- ) {
1549
- // Perf optimization. if py file doesn't contain __all__
1550
- // No need to parse and bind.
1551
- if (content.indexOf('__all__') < 0) {
1552
- return undefined;
1553
- }
1554
- }
1555
-
1556
- this._bindFile(sourceFileInfo, content);
1557
- return sourceFileInfo.sourceFile.index(options, token);
1558
- });
1559
- }
1560
-
1561
- addSymbolsForDocument(filePath: string, symbolList: DocumentSymbol[], token: CancellationToken) {
1562
- return this._runEvaluatorWithCancellationToken(token, () => {
1563
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1564
- if (sourceFileInfo) {
1565
- if (!sourceFileInfo.sourceFile.getCachedIndexResults()) {
1566
- // If we already have cached index for this file, no need to bind this file.
1567
- this._bindFile(sourceFileInfo);
1568
- }
1569
-
1570
- sourceFileInfo.sourceFile.addHierarchicalSymbolsForDocument(symbolList, token);
1571
- }
1572
- });
1573
- }
1574
-
1575
- reportSymbolsForWorkspace(query: string, reporter: WorkspaceSymbolCallback, token: CancellationToken) {
1576
- this._runEvaluatorWithCancellationToken(token, () => {
1577
- // Don't do a search if the query is empty. We'll return
1578
- // too many results in this case.
1579
- if (!query) {
1580
- return;
1581
- }
1582
-
1583
- // "Workspace symbols" searches symbols only from user code.
1584
- for (const sourceFileInfo of this._sourceFileList) {
1585
- if (!this._isUserCode(sourceFileInfo)) {
1586
- continue;
1587
- }
1588
-
1589
- if (!sourceFileInfo.sourceFile.getCachedIndexResults()) {
1590
- // If we already have cached index for this file, no need to bind this file.
1591
- this._bindFile(sourceFileInfo);
1592
- }
1593
-
1594
- const symbolList = sourceFileInfo.sourceFile.getSymbolsForDocument(query, token);
1595
- if (symbolList.length > 0) {
1596
- reporter(symbolList);
1597
- }
1598
-
1599
- // This operation can consume significant memory, so check
1600
- // for situations where we need to discard the type cache.
1601
- this._handleMemoryHighUsage();
1602
- }
1603
- });
1604
- }
1605
-
1606
- getHoverForPosition(
1607
- filePath: string,
1608
- position: Position,
1609
- format: MarkupKind,
1610
- token: CancellationToken
1611
- ): HoverResults | undefined {
1612
- return this._runEvaluatorWithCancellationToken(token, () => {
1613
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1614
- if (!sourceFileInfo) {
1615
- return undefined;
1616
- }
1617
-
1618
- this._bindFile(sourceFileInfo);
1619
-
1620
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1621
- return sourceFileInfo.sourceFile.getHoverForPosition(
1622
- this._createSourceMapper(execEnv, /* mapCompiled */ true),
1623
- position,
1624
- format,
1625
- this._evaluator!,
1626
- token
1627
- );
1628
- });
1629
- }
1630
-
1631
- getDocumentHighlight(
1632
- filePath: string,
1633
- position: Position,
1634
- token: CancellationToken
1635
- ): DocumentHighlight[] | undefined {
1636
- return this._runEvaluatorWithCancellationToken(token, () => {
1637
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1638
- if (!sourceFileInfo) {
1639
- return undefined;
1640
- }
1641
-
1642
- this._bindFile(sourceFileInfo);
1643
-
1644
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1645
- return sourceFileInfo.sourceFile.getDocumentHighlight(
1646
- this._createSourceMapper(execEnv),
1647
- position,
1648
- this._evaluator!,
1649
- token
1650
- );
1651
- });
1652
- }
1653
-
1654
- getSignatureHelpForPosition(
1655
- filePath: string,
1656
- position: Position,
1657
- format: MarkupKind,
1658
- token: CancellationToken
1659
- ): SignatureHelpResults | undefined {
1660
- return this._runEvaluatorWithCancellationToken(token, () => {
1661
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1662
- if (!sourceFileInfo) {
1663
- return undefined;
1664
- }
1665
-
1666
- this._bindFile(sourceFileInfo);
1667
-
1668
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1669
- return sourceFileInfo.sourceFile.getSignatureHelpForPosition(
1670
- position,
1671
- this._createSourceMapper(execEnv, /* mapCompiled */ true),
1672
- this._evaluator!,
1673
- format,
1674
- token
1675
- );
1676
- });
1677
- }
1678
-
1679
- async getCompletionsForPosition(
1680
- filePath: string,
1681
- position: Position,
1682
- workspacePath: string,
1683
- options: CompletionOptions,
1684
- nameMap: AbbreviationMap | undefined,
1685
- libraryMap: Map<string, IndexResults> | undefined,
1686
- token: CancellationToken
1687
- ): Promise<CompletionResultsList | undefined> {
1688
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1689
- if (!sourceFileInfo) {
1690
- return undefined;
1691
- }
1692
-
1693
- const completionResult = this._logTracker.log(
1694
- `completion at ${filePath}:${position.line}:${position.character}`,
1695
- (ls) => {
1696
- const result = this._runEvaluatorWithCancellationToken(token, () => {
1697
- this._bindFile(sourceFileInfo);
1698
-
1699
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1700
- return sourceFileInfo.sourceFile.getCompletionsForPosition(
1701
- position,
1702
- workspacePath,
1703
- this._configOptions,
1704
- this._importResolver,
1705
- this._lookUpImport,
1706
- this._evaluator!,
1707
- options,
1708
- this._createSourceMapper(execEnv, /* mapCompiled */ true),
1709
- nameMap,
1710
- libraryMap,
1711
- () =>
1712
- this._buildModuleSymbolsMap(
1713
- sourceFileInfo,
1714
- !!libraryMap,
1715
- /* includeIndexUserSymbols */ false,
1716
- token
1717
- ),
1718
- token
1719
- );
1720
- });
1721
-
1722
- ls.add(`found ${result?.completionMap?.size ?? 'null'} items`);
1723
- return result;
1724
- }
1725
- );
1726
-
1727
- const completionResultsList: CompletionResultsList = {
1728
- completionList: CompletionList.create(completionResult?.completionMap?.toArray()),
1729
- memberAccessInfo: completionResult?.memberAccessInfo,
1730
- autoImportInfo: completionResult?.autoImportInfo,
1731
- extensionInfo: completionResult?.extensionInfo,
1732
- };
1733
-
1734
- if (!completionResult?.completionMap || !this._extension?.completionListExtension) {
1735
- return completionResultsList;
1736
- }
1737
-
1738
- const parseResults = sourceFileInfo.sourceFile.getParseResults();
1739
- if (parseResults?.parseTree && parseResults?.text) {
1740
- const offset = convertPositionToOffset(position, parseResults.tokenizerOutput.lines);
1741
- if (offset !== undefined) {
1742
- await this._extension.completionListExtension.updateCompletionResults(
1743
- completionResultsList,
1744
- parseResults,
1745
- offset,
1746
- token
1747
- );
1748
- }
1749
- }
1750
-
1751
- return completionResultsList;
1752
- }
1753
-
1754
- resolveCompletionItem(
1755
- filePath: string,
1756
- completionItem: CompletionItem,
1757
- options: CompletionOptions,
1758
- nameMap: AbbreviationMap | undefined,
1759
- libraryMap: Map<string, IndexResults> | undefined,
1760
- token: CancellationToken
1761
- ) {
1762
- return this._runEvaluatorWithCancellationToken(token, () => {
1763
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1764
- if (!sourceFileInfo) {
1765
- return;
1766
- }
1767
-
1768
- this._bindFile(sourceFileInfo);
1769
-
1770
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1771
- sourceFileInfo.sourceFile.resolveCompletionItem(
1772
- this._configOptions,
1773
- this._importResolver,
1774
- this._lookUpImport,
1775
- this._evaluator!,
1776
- options,
1777
- this._createSourceMapper(execEnv, /* mapCompiled */ true),
1778
- nameMap,
1779
- libraryMap,
1780
- () =>
1781
- this._buildModuleSymbolsMap(
1782
- sourceFileInfo,
1783
- !!libraryMap,
1784
- /* includeIndexUserSymbols */ false,
1785
- token
1786
- ),
1787
- completionItem,
1788
- token
1789
- );
1790
- });
1791
- }
1792
-
1793
- renameModule(path: string, newPath: string, token: CancellationToken): FileEditActions | undefined {
1794
- return this._runEvaluatorWithCancellationToken(token, () => {
1795
- if (isFile(this._fs, path)) {
1796
- const fileInfo = this._getSourceFileInfoFromPath(path);
1797
- if (!fileInfo) {
1798
- return undefined;
1799
- }
1800
- }
1801
-
1802
- const renameModuleProvider = RenameModuleProvider.createForModule(
1803
- this._importResolver,
1804
- this._configOptions,
1805
- this._evaluator!,
1806
- path,
1807
- newPath,
1808
- token
1809
- );
1810
- if (!renameModuleProvider) {
1811
- return undefined;
1812
- }
1813
-
1814
- this._processModuleReferences(renameModuleProvider, renameModuleProvider.lastModuleName, path);
1815
- return { edits: renameModuleProvider.getEdits(), fileOperations: [] };
1816
- });
1817
- }
1818
-
1819
- moveSymbolAtPosition(
1820
- filePath: string,
1821
- newFilePath: string,
1822
- position: Position,
1823
- token: CancellationToken
1824
- ): FileEditActions | undefined {
1825
- return this._runEvaluatorWithCancellationToken(token, () => {
1826
- const fileInfo = this._getSourceFileInfoFromPath(filePath);
1827
- if (!fileInfo) {
1828
- return undefined;
1829
- }
1830
-
1831
- this._bindFile(fileInfo);
1832
- const parseResults = fileInfo.sourceFile.getParseResults();
1833
- if (!parseResults) {
1834
- return undefined;
1835
- }
1836
-
1837
- const offset = convertPositionToOffset(position, parseResults.tokenizerOutput.lines);
1838
- if (offset === undefined) {
1839
- return undefined;
1840
- }
1841
-
1842
- const node = findNodeByOffset(parseResults.parseTree, offset);
1843
- if (node === undefined) {
1844
- return undefined;
1845
- }
1846
-
1847
- // If this isn't a name node, there are no references to be found.
1848
- if (node.nodeType !== ParseNodeType.Name) {
1849
- return undefined;
1850
- }
1851
-
1852
- const execEnv = this._configOptions.findExecEnvironment(filePath);
1853
- const declarations = DocumentSymbolCollector.getDeclarationsForNode(
1854
- node,
1855
- this._evaluator!,
1856
- /* resolveLocalNames */ false,
1857
- token,
1858
- this._createSourceMapper(execEnv)
1859
- );
1860
-
1861
- const renameModuleProvider = RenameModuleProvider.createForSymbol(
1862
- this._importResolver,
1863
- this._configOptions,
1864
- this._evaluator!,
1865
- filePath,
1866
- newFilePath,
1867
- declarations,
1868
- token
1869
- );
1870
- if (!renameModuleProvider) {
1871
- return undefined;
1872
- }
1873
-
1874
- this._processModuleReferences(renameModuleProvider, node.value, filePath);
1875
- return { edits: renameModuleProvider.getEdits(), fileOperations: [] };
1876
- });
1877
- }
1878
-
1879
- canRenameSymbolAtPosition(
1880
- filePath: string,
1881
- position: Position,
1882
- isDefaultWorkspace: boolean,
1883
- allowModuleRename: boolean,
1884
- token: CancellationToken
1885
- ): Range | undefined {
1886
- return this._runEvaluatorWithCancellationToken(token, () => {
1887
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1888
- if (!sourceFileInfo) {
1889
- return undefined;
1890
- }
1891
-
1892
- this._bindFile(sourceFileInfo);
1893
- const referencesResult = this._getReferenceResult(
1894
- sourceFileInfo,
1895
- filePath,
1896
- position,
1897
- allowModuleRename,
1898
- token
1899
- );
1900
- if (!referencesResult) {
1901
- return undefined;
1902
- }
1903
-
1904
- if (
1905
- referencesResult.containsOnlyImportDecls &&
1906
- !this._supportRenameModule(referencesResult.declarations, isDefaultWorkspace)
1907
- ) {
1908
- return undefined;
1909
- }
1910
-
1911
- const renameMode = this._getRenameSymbolMode(sourceFileInfo, referencesResult, isDefaultWorkspace);
1912
- if (renameMode === 'none') {
1913
- return undefined;
1914
- }
1915
-
1916
- // Return the range of the symbol.
1917
- const parseResult = sourceFileInfo.sourceFile.getParseResults()!;
1918
- return convertTextRangeToRange(referencesResult.nodeAtOffset, parseResult.tokenizerOutput.lines);
1919
- });
1920
- }
1921
-
1922
- renameSymbolAtPosition(
1923
- filePath: string,
1924
- position: Position,
1925
- newName: string,
1926
- isDefaultWorkspace: boolean,
1927
- allowModuleRename: boolean,
1928
- token: CancellationToken
1929
- ): FileEditActions | undefined {
1930
- return this._runEvaluatorWithCancellationToken(token, () => {
1931
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
1932
- if (!sourceFileInfo) {
1933
- return undefined;
1934
- }
1935
-
1936
- this._bindFile(sourceFileInfo);
1937
-
1938
- const referencesResult = this._getReferenceResult(
1939
- sourceFileInfo,
1940
- filePath,
1941
- position,
1942
- allowModuleRename,
1943
- token
1944
- );
1945
- if (!referencesResult) {
1946
- return undefined;
1947
- }
1948
-
1949
- if (referencesResult.containsOnlyImportDecls) {
1950
- // All decls must be on a user file.
1951
- if (!this._supportRenameModule(referencesResult.declarations, isDefaultWorkspace)) {
1952
- return undefined;
1953
- }
1954
-
1955
- const moduleInfo = RenameModuleProvider.getRenameModulePathInfo(
1956
- RenameModuleProvider.getRenameModulePath(referencesResult.declarations),
1957
- newName
1958
- );
1959
- if (!moduleInfo) {
1960
- // Can't figure out module to rename.
1961
- return undefined;
1962
- }
1963
-
1964
- const editActions = this.renameModule(moduleInfo.filePath, moduleInfo.newFilePath, token);
1965
-
1966
- // Add file system rename.
1967
- editActions?.fileOperations.push({
1968
- kind: 'rename',
1969
- oldFilePath: moduleInfo.filePath,
1970
- newFilePath: moduleInfo.newFilePath,
1971
- });
1972
-
1973
- if (isStubFile(moduleInfo.filePath)) {
1974
- const matchingFiles = this._importResolver.getSourceFilesFromStub(
1975
- moduleInfo.filePath,
1976
- this._configOptions.findExecEnvironment(filePath),
1977
- /* mapCompiled */ false
1978
- );
1979
-
1980
- for (const matchingFile of matchingFiles) {
1981
- const matchingFileInfo = RenameModuleProvider.getRenameModulePathInfo(matchingFile, newName);
1982
- if (matchingFileInfo) {
1983
- editActions?.fileOperations.push({
1984
- kind: 'rename',
1985
- oldFilePath: matchingFileInfo.filePath,
1986
- newFilePath: matchingFileInfo.newFilePath,
1987
- });
1988
- }
1989
- }
1990
- }
1991
-
1992
- return editActions;
1993
- }
1994
-
1995
- const renameMode = this._getRenameSymbolMode(sourceFileInfo, referencesResult, isDefaultWorkspace);
1996
- switch (renameMode) {
1997
- case 'singleFileMode':
1998
- sourceFileInfo.sourceFile.addReferences(referencesResult, true, this._evaluator!, token);
1999
- break;
2000
-
2001
- case 'multiFileMode': {
2002
- for (const curSourceFileInfo of this._sourceFileList) {
2003
- // Make sure we only add user code to the references to prevent us
2004
- // from accidentally changing third party library or type stub.
2005
- if (this._isUserCode(curSourceFileInfo)) {
2006
- // Make sure searching symbol name exists in the file.
2007
- const content = curSourceFileInfo.sourceFile.getFileContent() ?? '';
2008
- if (content.indexOf(referencesResult.symbolName) < 0) {
2009
- continue;
2010
- }
2011
-
2012
- this._bindFile(curSourceFileInfo, content);
2013
- curSourceFileInfo.sourceFile.addReferences(referencesResult, true, this._evaluator!, token);
2014
- }
2015
-
2016
- // This operation can consume significant memory, so check
2017
- // for situations where we need to discard the type cache.
2018
- this._handleMemoryHighUsage();
2019
- }
2020
- break;
2021
- }
2022
-
2023
- case 'none':
2024
- // Rename is not allowed.
2025
- // ex) rename symbols from libraries.
2026
- return undefined;
2027
-
2028
- default:
2029
- assertNever(renameMode);
2030
- }
2031
-
2032
- const edits: FileEditAction[] = [];
2033
- referencesResult.locations.forEach((loc) => {
2034
- edits.push({
2035
- filePath: loc.path,
2036
- range: loc.range,
2037
- replacementText: newName,
2038
- });
2039
- });
2040
-
2041
- return { edits, fileOperations: [] };
2042
- });
2043
- }
2044
-
2045
- getCallForPosition(filePath: string, position: Position, token: CancellationToken): CallHierarchyItem | undefined {
2046
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
2047
- if (!sourceFileInfo) {
2048
- return undefined;
2049
- }
2050
- this._bindFile(sourceFileInfo);
2051
-
2052
- const execEnv = this._configOptions.findExecEnvironment(filePath);
2053
- const referencesResult = sourceFileInfo.sourceFile.getDeclarationForPosition(
2054
- this._createSourceMapper(execEnv),
2055
- position,
2056
- this._evaluator!,
2057
- undefined,
2058
- token
2059
- );
2060
-
2061
- if (!referencesResult || referencesResult.declarations.length === 0) {
2062
- return undefined;
2063
- }
2064
-
2065
- const targetDecl = CallHierarchyProvider.getTargetDeclaration(
2066
- referencesResult.declarations,
2067
- referencesResult.nodeAtOffset
2068
- );
2069
-
2070
- return CallHierarchyProvider.getCallForDeclaration(
2071
- referencesResult.symbolName,
2072
- targetDecl,
2073
- this._evaluator!,
2074
- token
2075
- );
2076
- }
2077
-
2078
- getIncomingCallsForPosition(
2079
- filePath: string,
2080
- position: Position,
2081
- token: CancellationToken
2082
- ): CallHierarchyIncomingCall[] | undefined {
2083
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
2084
- if (!sourceFileInfo) {
2085
- return undefined;
2086
- }
2087
- this._bindFile(sourceFileInfo);
2088
-
2089
- const execEnv = this._configOptions.findExecEnvironment(filePath);
2090
- const referencesResult = sourceFileInfo.sourceFile.getDeclarationForPosition(
2091
- this._createSourceMapper(execEnv),
2092
- position,
2093
- this._evaluator!,
2094
- undefined,
2095
- token
2096
- );
2097
-
2098
- if (!referencesResult || referencesResult.declarations.length === 0) {
2099
- return undefined;
2100
- }
2101
-
2102
- const targetDecl = CallHierarchyProvider.getTargetDeclaration(
2103
- referencesResult.declarations,
2104
- referencesResult.nodeAtOffset
2105
- );
2106
- let items: CallHierarchyIncomingCall[] = [];
2107
-
2108
- for (const curSourceFileInfo of this._sourceFileList) {
2109
- if (this._isUserCode(curSourceFileInfo) || curSourceFileInfo.isOpenByClient) {
2110
- this._bindFile(curSourceFileInfo);
2111
-
2112
- const itemsToAdd = CallHierarchyProvider.getIncomingCallsForDeclaration(
2113
- curSourceFileInfo.sourceFile.getFilePath(),
2114
- referencesResult.symbolName,
2115
- targetDecl,
2116
- curSourceFileInfo.sourceFile.getParseResults()!,
2117
- this._evaluator!,
2118
- token
2119
- );
2120
-
2121
- if (itemsToAdd) {
2122
- items = items.concat(...itemsToAdd);
2123
- }
2124
-
2125
- // This operation can consume significant memory, so check
2126
- // for situations where we need to discard the type cache.
2127
- this._handleMemoryHighUsage();
2128
- }
2129
- }
2130
-
2131
- return items;
2132
- }
2133
-
2134
- getOutgoingCallsForPosition(
2135
- filePath: string,
2136
- position: Position,
2137
- token: CancellationToken
2138
- ): CallHierarchyOutgoingCall[] | undefined {
2139
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
2140
- if (!sourceFileInfo) {
2141
- return undefined;
2142
- }
2143
- this._bindFile(sourceFileInfo);
2144
-
2145
- const execEnv = this._configOptions.findExecEnvironment(filePath);
2146
- const referencesResult = sourceFileInfo.sourceFile.getDeclarationForPosition(
2147
- this._createSourceMapper(execEnv),
2148
- position,
2149
- this._evaluator!,
2150
- undefined,
2151
- token
2152
- );
2153
-
2154
- if (!referencesResult || referencesResult.declarations.length === 0) {
2155
- return undefined;
2156
- }
2157
- const targetDecl = CallHierarchyProvider.getTargetDeclaration(
2158
- referencesResult.declarations,
2159
- referencesResult.nodeAtOffset
2160
- );
2161
-
2162
- return CallHierarchyProvider.getOutgoingCallsForDeclaration(
2163
- targetDecl,
2164
- sourceFileInfo.sourceFile.getParseResults()!,
2165
- this._evaluator!,
2166
- token
2167
- );
2168
- }
2169
-
2170
- performQuickAction(
2171
- filePath: string,
2172
- command: string,
2173
- args: any[],
2174
- token: CancellationToken
2175
- ): TextEditAction[] | undefined {
2176
- const sourceFileInfo = this._getSourceFileInfoFromPath(filePath);
2177
- if (!sourceFileInfo) {
2178
- return undefined;
2179
- }
2180
-
2181
- this._bindFile(sourceFileInfo);
2182
-
2183
- return sourceFileInfo.sourceFile.performQuickAction(command, args, token);
2184
- }
2185
-
2186
- test_createSourceMapper(execEnv: ExecutionEnvironment) {
2187
- return this._createSourceMapper(execEnv, /* mapCompiled */ false);
2188
- }
2189
-
2190
- private _getRenameSymbolMode(
2191
- sourceFileInfo: SourceFileInfo,
2192
- referencesResult: ReferencesResult,
2193
- isDefaultWorkspace: boolean
2194
- ) {
2195
- // We have 2 different cases
2196
- // Single file mode.
2197
- // 1. rename on default workspace (ex, standalone file mode).
2198
- // 2. rename local symbols.
2199
- // 3. rename symbols defined in the non user open file.
2200
- //
2201
- // and Multi file mode.
2202
- // 1. rename public symbols defined in user files on regular workspace (ex, open folder mode).
2203
- const userFile = this._isUserCode(sourceFileInfo);
2204
- if (
2205
- isDefaultWorkspace ||
2206
- (userFile && !referencesResult.requiresGlobalSearch) ||
2207
- (!userFile &&
2208
- sourceFileInfo.isOpenByClient &&
2209
- referencesResult.declarations.every((d) => this._getSourceFileInfoFromPath(d.path) === sourceFileInfo))
2210
- ) {
2211
- return 'singleFileMode';
2212
- }
2213
-
2214
- if (referencesResult.declarations.every((d) => this._isUserCode(this._getSourceFileInfoFromPath(d.path)))) {
2215
- return 'multiFileMode';
2216
- }
2217
-
2218
- // Rename is not allowed.
2219
- // ex) rename symbols from libraries.
2220
- return 'none';
2221
- }
2222
-
2223
- private _supportRenameModule(declarations: Declaration[], isDefaultWorkspace: boolean) {
2224
- // Rename module is not supported for standalone file and all decls must be on a user file.
2225
- return (
2226
- !isDefaultWorkspace && declarations.every((d) => this._isUserCode(this._getSourceFileInfoFromPath(d.path)))
2227
- );
2228
- }
2229
-
2230
- private _getReferenceResult(
2231
- sourceFileInfo: SourceFileInfo,
2232
- filePath: string,
2233
- position: Position,
2234
- allowModuleRename: boolean,
2235
- token: CancellationToken
2236
- ) {
2237
- const execEnv = this._configOptions.findExecEnvironment(filePath);
2238
- const referencesResult = sourceFileInfo.sourceFile.getDeclarationForPosition(
2239
- this._createSourceMapper(execEnv),
2240
- position,
2241
- this._evaluator!,
2242
- undefined,
2243
- token
2244
- );
2245
-
2246
- if (!referencesResult) {
2247
- return undefined;
2248
- }
2249
-
2250
- if (allowModuleRename && referencesResult.containsOnlyImportDecls) {
2251
- return referencesResult;
2252
- }
2253
-
2254
- if (referencesResult.nonImportDeclarations.length === 0) {
2255
- // There is no symbol we can rename.
2256
- return undefined;
2257
- }
2258
-
2259
- // Use declarations that doesn't contain import decls.
2260
- return new ReferencesResult(
2261
- referencesResult.requiresGlobalSearch,
2262
- referencesResult.nodeAtOffset,
2263
- referencesResult.symbolName,
2264
- referencesResult.nonImportDeclarations
2265
- );
2266
- }
2267
-
2268
- private _processModuleReferences(
2269
- renameModuleProvider: RenameModuleProvider,
2270
- filteringText: string,
2271
- currentFilePath: string
2272
- ) {
2273
- // _sourceFileList contains every user files that match "include" pattern including
2274
- // py file even if corresponding pyi exists.
2275
- for (const currentFileInfo of this._sourceFileList) {
2276
- // Make sure we only touch user code to prevent us
2277
- // from accidentally changing third party library or type stub.
2278
- if (!this._isUserCode(currentFileInfo)) {
2279
- continue;
2280
- }
2281
-
2282
- // If module name isn't mentioned in the current file, skip the file
2283
- // except the file that got actually renamed/moved.
2284
- // The file that got moved might have relative import paths we need to update.
2285
- const filePath = currentFileInfo.sourceFile.getFilePath();
2286
- const content = currentFileInfo.sourceFile.getFileContent() ?? '';
2287
- if (filePath !== currentFilePath && content.indexOf(filteringText) < 0) {
2288
- continue;
2289
- }
2290
-
2291
- this._bindFile(currentFileInfo, content);
2292
- const parseResult = currentFileInfo.sourceFile.getParseResults();
2293
- if (!parseResult) {
2294
- continue;
2295
- }
2296
-
2297
- renameModuleProvider.renameReferences(filePath, parseResult);
2298
-
2299
- // This operation can consume significant memory, so check
2300
- // for situations where we need to discard the type cache.
2301
- this._handleMemoryHighUsage();
2302
- }
2303
- }
2304
-
2305
- private _handleMemoryHighUsage() {
2306
- const typeCacheEntryCount = this._evaluator!.getTypeCacheEntryCount();
2307
- const convertToMB = (bytes: number) => {
2308
- return `${Math.round(bytes / (1024 * 1024))}MB`;
2309
- };
2310
-
2311
- // If the type cache size has exceeded a high-water mark, query the heap usage.
2312
- // Don't bother doing this until we hit this point because the heap usage may not
2313
- // drop immediately after we empty the cache due to garbage collection timing.
2314
- if (typeCacheEntryCount > 750000 || this._parsedFileCount > 1000) {
2315
- const heapStats = getHeapStatistics();
2316
-
2317
- if (this._configOptions.verboseOutput) {
2318
- this._console.info(
2319
- `Heap stats: ` +
2320
- `total_heap_size=${convertToMB(heapStats.total_heap_size)}, ` +
2321
- `used_heap_size=${convertToMB(heapStats.used_heap_size)}, ` +
2322
- `total_physical_size=${convertToMB(heapStats.total_physical_size)}, ` +
2323
- `total_available_size=${convertToMB(heapStats.total_available_size)}, ` +
2324
- `heap_size_limit=${convertToMB(heapStats.heap_size_limit)}`
2325
- );
2326
- }
2327
-
2328
- // The type cache uses a Map, which has an absolute limit of 2^24 entries
2329
- // before it will fail. If we cross the 95% mark, we'll empty the cache.
2330
- const absoluteMaxCacheEntryCount = (1 << 24) * 0.9;
2331
-
2332
- // If we use more than 90% of the heap size limit, avoid a crash
2333
- // by emptying the type cache.
2334
- if (
2335
- typeCacheEntryCount > absoluteMaxCacheEntryCount ||
2336
- heapStats.used_heap_size > heapStats.heap_size_limit * 0.9
2337
- ) {
2338
- this._console.info(
2339
- `Emptying type cache to avoid heap overflow. Used ${convertToMB(
2340
- heapStats.used_heap_size
2341
- )} out of ${convertToMB(heapStats.heap_size_limit)} (${typeCacheEntryCount} cache entries).`
2342
- );
2343
- this._createNewEvaluator();
2344
- this._discardCachedParseResults();
2345
- this._parsedFileCount = 0;
2346
- }
2347
- }
2348
- }
2349
-
2350
- // Discards all cached parse results and file contents to free up memory.
2351
- // It does not discard cached index results or diagnostics for files.
2352
- private _discardCachedParseResults() {
2353
- for (const sourceFileInfo of this._sourceFileList) {
2354
- sourceFileInfo.sourceFile.dropParseAndBindInfo();
2355
- }
2356
- }
2357
-
2358
- private _isUserCode(fileInfo: SourceFileInfo | undefined) {
2359
- return fileInfo && fileInfo.isTracked && !fileInfo.isThirdPartyImport && !fileInfo.isTypeshedFile;
2360
- }
2361
-
2362
- // Wrapper function that should be used when invoking this._evaluator
2363
- // with a cancellation token. It handles cancellation exceptions and
2364
- // any other unexpected exceptions.
2365
- private _runEvaluatorWithCancellationToken<T>(token: CancellationToken | undefined, callback: () => T): T {
2366
- try {
2367
- if (token) {
2368
- return this._evaluator!.runWithCancellationToken(token, callback);
2369
- } else {
2370
- return callback();
2371
- }
2372
- } catch (e: any) {
2373
- // An unexpected exception occurred, potentially leaving the current evaluator
2374
- // in an inconsistent state. Discard it and replace it with a fresh one. It is
2375
- // Cancellation exceptions are known to handle this correctly.
2376
- if (!(e instanceof OperationCanceledException)) {
2377
- this._createNewEvaluator();
2378
- }
2379
- throw e;
2380
- }
2381
- }
2382
-
2383
- // Returns a list of empty file diagnostic entries for the files
2384
- // that have been removed. This is needed to clear out the
2385
- // errors for files that have been deleted or closed.
2386
- private _removeUnneededFiles(): FileDiagnostics[] {
2387
- const fileDiagnostics: FileDiagnostics[] = [];
2388
-
2389
- // If a file is no longer tracked, opened or shadowed, it can
2390
- // be removed from the program.
2391
- for (let i = 0; i < this._sourceFileList.length; ) {
2392
- const fileInfo = this._sourceFileList[i];
2393
- if (!this._isFileNeeded(fileInfo)) {
2394
- fileDiagnostics.push({
2395
- filePath: fileInfo.sourceFile.getFilePath(),
2396
- version: fileInfo.sourceFile.getClientVersion(),
2397
- diagnostics: [],
2398
- });
2399
-
2400
- fileInfo.sourceFile.prepareForClose();
2401
- this._removeSourceFileFromListAndMap(fileInfo.sourceFile.getFilePath(), i);
2402
-
2403
- // Unlink any imports and remove them from the list if
2404
- // they are no longer referenced.
2405
- fileInfo.imports.forEach((importedFile) => {
2406
- const indexToRemove = importedFile.importedBy.findIndex((fi) => fi === fileInfo);
2407
- if (indexToRemove < 0) {
2408
- return;
2409
- }
2410
-
2411
- importedFile.importedBy.splice(indexToRemove, 1);
2412
-
2413
- // See if we need to remove the imported file because it
2414
- // is no longer needed. If its index is >= i, it will be
2415
- // removed when we get to it.
2416
- if (!this._isFileNeeded(importedFile)) {
2417
- const indexToRemove = this._sourceFileList.findIndex((fi) => fi === importedFile);
2418
- if (indexToRemove >= 0 && indexToRemove < i) {
2419
- fileDiagnostics.push({
2420
- filePath: importedFile.sourceFile.getFilePath(),
2421
- version: importedFile.sourceFile.getClientVersion(),
2422
- diagnostics: [],
2423
- });
2424
-
2425
- importedFile.sourceFile.prepareForClose();
2426
- this._removeSourceFileFromListAndMap(importedFile.sourceFile.getFilePath(), indexToRemove);
2427
- i--;
2428
- }
2429
- }
2430
- });
2431
-
2432
- // Remove any shadowed files corresponding to this file.
2433
- fileInfo.shadowedBy.forEach((shadowedFile) => {
2434
- shadowedFile.shadows = shadowedFile.shadows.filter((f) => f !== fileInfo);
2435
- });
2436
- fileInfo.shadowedBy = [];
2437
- } else {
2438
- // If we're showing the user errors only for open files, clear
2439
- // out the errors for the now-closed file.
2440
- if (!this._shouldCheckFile(fileInfo) && fileInfo.diagnosticsVersion !== undefined) {
2441
- fileDiagnostics.push({
2442
- filePath: fileInfo.sourceFile.getFilePath(),
2443
- version: fileInfo.sourceFile.getClientVersion(),
2444
- diagnostics: [],
2445
- });
2446
- fileInfo.diagnosticsVersion = undefined;
2447
- }
2448
-
2449
- i++;
2450
- }
2451
- }
2452
-
2453
- return fileDiagnostics;
2454
- }
2455
-
2456
- private _isFileNeeded(fileInfo: SourceFileInfo) {
2457
- if (fileInfo.sourceFile.isFileDeleted()) {
2458
- return false;
2459
- }
2460
-
2461
- if (fileInfo.isTracked || fileInfo.isOpenByClient) {
2462
- return true;
2463
- }
2464
-
2465
- if (fileInfo.shadows.length > 0) {
2466
- return true;
2467
- }
2468
-
2469
- if (fileInfo.importedBy.length === 0) {
2470
- return false;
2471
- }
2472
-
2473
- // It's possible for a cycle of files to be imported
2474
- // by a tracked file but then abandoned. The import cycle
2475
- // will keep the entire group "alive" if we don't detect
2476
- // the condition and garbage collect them.
2477
- return this._isImportNeededRecursive(fileInfo, new Map<string, boolean>());
2478
- }
2479
-
2480
- private _isImportNeededRecursive(fileInfo: SourceFileInfo, recursionMap: Map<string, boolean>) {
2481
- if (fileInfo.isTracked || fileInfo.isOpenByClient || fileInfo.shadows.length > 0) {
2482
- return true;
2483
- }
2484
-
2485
- const filePath = normalizePathCase(this._fs, fileInfo.sourceFile.getFilePath());
2486
-
2487
- // Avoid infinite recursion.
2488
- if (recursionMap.has(filePath)) {
2489
- return false;
2490
- }
2491
-
2492
- recursionMap.set(filePath, true);
2493
-
2494
- for (const importerInfo of fileInfo.importedBy) {
2495
- if (this._isImportNeededRecursive(importerInfo, recursionMap)) {
2496
- return true;
2497
- }
2498
- }
2499
-
2500
- return false;
2501
- }
2502
-
2503
- private _createSourceMapper(execEnv: ExecutionEnvironment, mapCompiled?: boolean, preferStubs?: boolean) {
2504
- const sourceMapper = new SourceMapper(
2505
- this._importResolver,
2506
- execEnv,
2507
- this._evaluator!,
2508
- (stubFilePath: string, implFilePath: string) => {
2509
- const stubFileInfo = this._getSourceFileInfoFromPath(stubFilePath);
2510
- if (!stubFileInfo) {
2511
- return undefined;
2512
- }
2513
- this._addShadowedFile(stubFileInfo, implFilePath);
2514
- return this.getBoundSourceFile(implFilePath);
2515
- },
2516
- (f) => this.getBoundSourceFile(f),
2517
- mapCompiled ?? false,
2518
- preferStubs ?? false
2519
- );
2520
- return sourceMapper;
2521
- }
2522
-
2523
- private _isImportAllowed(importer: SourceFileInfo, importResult: ImportResult, isImportStubFile: boolean): boolean {
2524
- // Don't import native libs. We don't want to track these files,
2525
- // and we definitely don't want to attempt to parse them.
2526
- if (importResult.isNativeLib) {
2527
- return false;
2528
- }
2529
-
2530
- let thirdPartyImportAllowed =
2531
- this._configOptions.useLibraryCodeForTypes ||
2532
- (importResult.importType === ImportType.ThirdParty && !!importResult.pyTypedInfo) ||
2533
- (importResult.importType === ImportType.Local && importer.isThirdPartyPyTypedPresent);
2534
-
2535
- if (
2536
- importResult.importType === ImportType.ThirdParty ||
2537
- (importer.isThirdPartyImport && importResult.importType === ImportType.Local)
2538
- ) {
2539
- if (this._allowedThirdPartyImports) {
2540
- if (importResult.isRelative) {
2541
- // If it's a relative import, we'll allow it because the
2542
- // importer was already deemed to be allowed.
2543
- thirdPartyImportAllowed = true;
2544
- } else if (
2545
- this._allowedThirdPartyImports.some((importName: string) => {
2546
- // If this import name is the one that was explicitly
2547
- // allowed or is a child of that import name,
2548
- // it's considered allowed.
2549
- if (importResult.importName === importName) {
2550
- return true;
2551
- }
2552
-
2553
- if (importResult.importName.startsWith(importName + '.')) {
2554
- return true;
2555
- }
2556
-
2557
- return false;
2558
- })
2559
- ) {
2560
- thirdPartyImportAllowed = true;
2561
- }
2562
- }
2563
-
2564
- // Some libraries ship with stub files that import from non-stubs. Don't
2565
- // explore those.
2566
- // Don't explore any third-party files unless they're type stub files
2567
- // or we've been told explicitly that third-party imports are OK.
2568
- if (!isImportStubFile) {
2569
- return thirdPartyImportAllowed;
2570
- }
2571
- }
2572
-
2573
- return true;
2574
- }
2575
-
2576
- private _updateSourceFileImports(sourceFileInfo: SourceFileInfo, options: ConfigOptions): SourceFileInfo[] {
2577
- const filesAdded: SourceFileInfo[] = [];
2578
-
2579
- // Get the new list of imports and see if it changed from the last
2580
- // list of imports for this file.
2581
- const imports = sourceFileInfo.sourceFile.getImports();
2582
-
2583
- // Create a local function that determines whether the import should
2584
- // be considered a "third-party import" and whether it is coming from
2585
- // a third-party package that claims to be typed. An import is
2586
- // considered third-party if it is external to the importer
2587
- // or is internal but the importer is itself a third-party package.
2588
- const getThirdPartyImportInfo = (importResult: ImportResult) => {
2589
- let isThirdPartyImport = false;
2590
- let isPyTypedPresent = false;
2591
-
2592
- if (importResult.importType === ImportType.ThirdParty) {
2593
- isThirdPartyImport = true;
2594
- if (importResult.pyTypedInfo) {
2595
- isPyTypedPresent = true;
2596
- }
2597
- } else if (sourceFileInfo.isThirdPartyImport && importResult.importType === ImportType.Local) {
2598
- isThirdPartyImport = true;
2599
- if (sourceFileInfo.isThirdPartyPyTypedPresent) {
2600
- isPyTypedPresent = true;
2601
- }
2602
- }
2603
-
2604
- return {
2605
- isThirdPartyImport,
2606
- isPyTypedPresent,
2607
- };
2608
- };
2609
-
2610
- // Create a map of unique imports, since imports can appear more than once.
2611
- const newImportPathMap = new Map<string, UpdateImportInfo>();
2612
-
2613
- // Add chained source file as import if it exists.
2614
- if (sourceFileInfo.chainedSourceFile) {
2615
- if (sourceFileInfo.chainedSourceFile.sourceFile.isFileDeleted()) {
2616
- sourceFileInfo.chainedSourceFile = undefined;
2617
- } else {
2618
- const filePath = sourceFileInfo.chainedSourceFile.sourceFile.getFilePath();
2619
- newImportPathMap.set(normalizePathCase(this._fs, filePath), {
2620
- path: filePath,
2621
- isTypeshedFile: false,
2622
- isThirdPartyImport: false,
2623
- isPyTypedPresent: false,
2624
- });
2625
- }
2626
- }
2627
-
2628
- imports.forEach((importResult) => {
2629
- if (importResult.isImportFound) {
2630
- if (this._isImportAllowed(sourceFileInfo, importResult, importResult.isStubFile)) {
2631
- if (importResult.resolvedPaths.length > 0) {
2632
- const filePath = importResult.resolvedPaths[importResult.resolvedPaths.length - 1];
2633
- if (filePath) {
2634
- const thirdPartyTypeInfo = getThirdPartyImportInfo(importResult);
2635
- newImportPathMap.set(normalizePathCase(this._fs, filePath), {
2636
- path: filePath,
2637
- isTypeshedFile: !!importResult.isTypeshedFile,
2638
- isThirdPartyImport: thirdPartyTypeInfo.isThirdPartyImport,
2639
- isPyTypedPresent: thirdPartyTypeInfo.isPyTypedPresent,
2640
- });
2641
- }
2642
- }
2643
- }
2644
-
2645
- importResult.filteredImplicitImports.forEach((implicitImport) => {
2646
- if (this._isImportAllowed(sourceFileInfo, importResult, implicitImport.isStubFile)) {
2647
- if (!implicitImport.isNativeLib) {
2648
- const thirdPartyTypeInfo = getThirdPartyImportInfo(importResult);
2649
- newImportPathMap.set(normalizePathCase(this._fs, implicitImport.path), {
2650
- path: implicitImport.path,
2651
- isTypeshedFile: !!importResult.isTypeshedFile,
2652
- isThirdPartyImport: thirdPartyTypeInfo.isThirdPartyImport,
2653
- isPyTypedPresent: thirdPartyTypeInfo.isPyTypedPresent,
2654
- });
2655
- }
2656
- }
2657
- });
2658
- } else if (options.verboseOutput) {
2659
- this._console.info(
2660
- `Could not import '${importResult.importName}' ` +
2661
- `in file '${sourceFileInfo.sourceFile.getFilePath()}'`
2662
- );
2663
- if (importResult.importFailureInfo) {
2664
- importResult.importFailureInfo.forEach((diag) => {
2665
- this._console.info(` ${diag}`);
2666
- });
2667
- }
2668
- }
2669
- });
2670
-
2671
- const updatedImportMap = new Map<string, SourceFileInfo>();
2672
- sourceFileInfo.imports.forEach((importInfo) => {
2673
- const oldFilePath = normalizePathCase(this._fs, importInfo.sourceFile.getFilePath());
2674
-
2675
- // A previous import was removed.
2676
- if (!newImportPathMap.has(oldFilePath)) {
2677
- importInfo.importedBy = importInfo.importedBy.filter(
2678
- (fi) =>
2679
- normalizePathCase(this._fs, fi.sourceFile.getFilePath()) !==
2680
- normalizePathCase(this._fs, sourceFileInfo.sourceFile.getFilePath())
2681
- );
2682
- } else {
2683
- updatedImportMap.set(oldFilePath, importInfo);
2684
- }
2685
- });
2686
-
2687
- // See if there are any new imports to be added.
2688
- newImportPathMap.forEach((importInfo, normalizedImportPath) => {
2689
- if (!updatedImportMap.has(normalizedImportPath)) {
2690
- // We found a new import to add. See if it's already part
2691
- // of the program.
2692
- let importedFileInfo: SourceFileInfo;
2693
- if (this._getSourceFileInfoFromPath(importInfo.path)) {
2694
- importedFileInfo = this._getSourceFileInfoFromPath(importInfo.path)!;
2695
- } else {
2696
- const importName = this._getImportNameForFile(importInfo.path);
2697
- const sourceFile = new SourceFile(
2698
- this._fs,
2699
- importInfo.path,
2700
- importName,
2701
- importInfo.isThirdPartyImport,
2702
- importInfo.isPyTypedPresent,
2703
- this._console,
2704
- this._logTracker
2705
- );
2706
- importedFileInfo = {
2707
- sourceFile,
2708
- isTracked: false,
2709
- isOpenByClient: false,
2710
- isTypeshedFile: importInfo.isTypeshedFile,
2711
- isThirdPartyImport: importInfo.isThirdPartyImport,
2712
- isThirdPartyPyTypedPresent: importInfo.isPyTypedPresent,
2713
- diagnosticsVersion: undefined,
2714
- imports: [],
2715
- importedBy: [],
2716
- shadows: [],
2717
- shadowedBy: [],
2718
- };
2719
-
2720
- this._addToSourceFileListAndMap(importedFileInfo);
2721
- filesAdded.push(importedFileInfo);
2722
- }
2723
-
2724
- importedFileInfo.importedBy.push(sourceFileInfo);
2725
- updatedImportMap.set(normalizedImportPath, importedFileInfo);
2726
- }
2727
- });
2728
-
2729
- // Update the imports list. It should now map the set of imports
2730
- // specified by the source file.
2731
- sourceFileInfo.imports = [];
2732
- newImportPathMap.forEach((_, path) => {
2733
- if (this._getSourceFileInfoFromPath(path)) {
2734
- sourceFileInfo.imports.push(this._getSourceFileInfoFromPath(path)!);
2735
- }
2736
- });
2737
-
2738
- // Resolve the builtins import for the file. This needs to be
2739
- // analyzed before the file can be analyzed.
2740
- sourceFileInfo.builtinsImport = undefined;
2741
- const builtinsImport = sourceFileInfo.sourceFile.getBuiltinsImport();
2742
- if (builtinsImport && builtinsImport.isImportFound) {
2743
- const resolvedBuiltinsPath = builtinsImport.resolvedPaths[builtinsImport.resolvedPaths.length - 1];
2744
- sourceFileInfo.builtinsImport = this._getSourceFileInfoFromPath(resolvedBuiltinsPath);
2745
- }
2746
-
2747
- // Resolve the ipython display import for the file. This needs to be
2748
- // analyzed before the file can be analyzed.
2749
- sourceFileInfo.ipythonDisplayImport = undefined;
2750
- const ipythonDisplayImport = sourceFileInfo.sourceFile.getIPythonDisplayImport();
2751
- if (ipythonDisplayImport && ipythonDisplayImport.isImportFound) {
2752
- const resolvedIPythonDisplayPath =
2753
- ipythonDisplayImport.resolvedPaths[ipythonDisplayImport.resolvedPaths.length - 1];
2754
- sourceFileInfo.ipythonDisplayImport = this._getSourceFileInfoFromPath(resolvedIPythonDisplayPath);
2755
- }
2756
-
2757
- return filesAdded;
2758
- }
2759
-
2760
- private _getSourceFileInfoFromPath(filePath: string): SourceFileInfo | undefined {
2761
- return this._sourceFileMap.get(normalizePathCase(this._fs, filePath));
2762
- }
2763
-
2764
- private _removeSourceFileFromListAndMap(filePath: string, indexToRemove: number) {
2765
- this._sourceFileMap.delete(normalizePathCase(this._fs, filePath));
2766
- this._sourceFileList.splice(indexToRemove, 1);
2767
- }
2768
-
2769
- private _addToSourceFileListAndMap(fileInfo: SourceFileInfo) {
2770
- const filePath = normalizePathCase(this._fs, fileInfo.sourceFile.getFilePath());
2771
-
2772
- // We should never add a file with the same path twice.
2773
- assert(!this._sourceFileMap.has(filePath));
2774
-
2775
- this._sourceFileList.push(fileInfo);
2776
- this._sourceFileMap.set(filePath, fileInfo);
2777
- }
2778
- }