public PythonAnalyzer CreateAnalyzer(PythonLanguageVersion version = PythonLanguageVersion.V27, string[] analysisDirs = null) { // Explicitly provide the builtins name, since we aren't recreating // the interpreter for each version like we should be. var fact = InterpreterFactory; var interp = Interpreter; if (version != fact.GetLanguageVersion()) { fact = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version.ToVersion()); interp = fact.CreateInterpreter(); } var state = new PythonAnalyzer(fact, interp, "__builtin__"); if (version.Is3x() || this is IronPythonAnalysisTest) { var types = (KnownTypes)state.Types; types._types[(int)BuiltinTypeId.Str] = state.Types[BuiltinTypeId.Unicode]; types._types[(int)BuiltinTypeId.StrIterator] = state.Types[BuiltinTypeId.UnicodeIterator]; types._classInfos[(int)BuiltinTypeId.Str] = state.ClassInfos[BuiltinTypeId.Unicode]; types._classInfos[(int)BuiltinTypeId.StrIterator] = state.ClassInfos[BuiltinTypeId.UnicodeIterator]; } state.Limits = GetLimits(); if (analysisDirs != null) { foreach (var dir in analysisDirs) { state.AddAnalysisDirectory(dir); } } return(state); }
private DjangoAnalyzer AnalyzerTest(string path) { string djangoDbPath = TestData.GetPath("TestData\\DjangoDB"); Assert.IsTrue( PythonTypeDatabase.IsDatabaseVersionCurrent(djangoDbPath), "TestData\\DjangoDB needs updating." ); var testFact = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory( new Version(2, 7), "Django Test Interpreter", TestData.GetPath("CompletionDB"), djangoDbPath ); var serviceProvider = PythonToolsTestUtilities.CreateMockServiceProvider(); PythonAnalyzer analyzer = new PythonAnalyzer(testFact); DjangoAnalyzer djangoAnalyzer = new DjangoAnalyzer(serviceProvider); djangoAnalyzer.OnNewAnalyzer(analyzer); analyzer.AddAnalysisDirectory(path); List <IPythonProjectEntry> entries = new List <IPythonProjectEntry>(); foreach (string file in Directory.EnumerateFiles(path, "*.py", SearchOption.AllDirectories)) { var entry = analyzer.AddModule(ModulePath.FromFullPath(file).ModuleName, file); var parser = Parser.CreateParser( new FileStream(file, FileMode.Open, FileAccess.Read), PythonLanguageVersion.V27 ); entry.UpdateTree(parser.ParseFile(), null); entries.Add(entry); } foreach (var entry in entries) { entry.Analyze(CancellationToken.None, false); } return(djangoAnalyzer); }