private async Task CreateDatabaseAsync(IPythonInterpreter interpreter) { var dbs = new ModuleDatabase(Services, Path.GetDirectoryName(TestData.GetDefaultModulePath())); Services.AddService(dbs); var importedModules = interpreter.ModuleResolution.GetImportedModules(); foreach (var m in importedModules.Where(m => m.Analysis is LibraryAnalysis)) { await dbs.StoreModuleAnalysisAsync(m.Analysis, immediate : true); } importedModules = interpreter.TypeshedResolution.GetImportedModules(); foreach (var m in importedModules.Where(m => m.Analysis is LibraryAnalysis)) { await dbs.StoreModuleAnalysisAsync(m.Analysis, immediate : true); } }
public async Task ReturnType() { const string code = @" from module2 import func2 x = func2() "; const string mod2Code = @" class C2: def M1C2(self): return 0 def func2() -> C2: ... "; await TestData.CreateTestSpecificFileAsync("module2.py", mod2Code); var analysis = await GetAnalysisAsync(code); var f2 = analysis.Should().HaveVariable("func2").Which; var analysis2 = ((IPythonFunctionType)f2.Value).DeclaringModule.Analysis; var dbs = new ModuleDatabase(Services, Path.GetDirectoryName(TestData.GetDefaultModulePath())); Services.AddService(dbs); await dbs.StoreModuleAnalysisAsync(analysis2, immediate : true, CancellationToken.None); await Services.GetService <IPythonAnalyzer>().ResetAnalyzer(); var doc = Services.GetService <IRunningDocumentTable>().GetDocument(analysis.Document.Uri); analysis = await doc.GetAnalysisAsync(Timeout.Infinite); var func2 = analysis.Should().HaveFunction("func2").Which; var c2 = func2.Should().HaveSingleOverload() .Which.Should().HaveReturnType("C2").Which; c2.Should().HaveMember <IPythonFunctionType>("M1C2") .Which.Should().HaveSingleOverload() .Which.Should().HaveReturnType(BuiltinTypeId.Int); }