public ClassifierHelper(string code, PythonLanguageVersion version) { _view = new PythonEditor("", version); var providers = _view.VS.ComponentModel.GetExtensions <IClassifierProvider>().ToArray(); _provider1 = providers.OfType <PythonClassifierProvider>().Single(); _provider2 = providers.OfType <PythonAnalysisClassifierProvider>().Single(); _classificationsReady1 = new ManualResetEventSlim(); _classificationsReady2 = new ManualResetEventSlim(); AstClassifier.ClassificationChanged += (s, e) => SafeSetEvent(_classificationsReady1); var startVersion = _view.CurrentSnapshot.Version; AnalysisClassifier.ClassificationChanged += (s, e) => { var entry = (AnalysisEntry)_view.GetAnalysisEntry(); // make sure we have classifications from the version we analyzed after // setting the text below. if (entry.GetAnalysisVersion(_view.CurrentSnapshot.TextBuffer).VersionNumber > startVersion.VersionNumber) { SafeSetEvent(_classificationsReady2); } }; _view.Text = code; }
public ClassifierHelper(string code, PythonLanguageVersion version) { _view = new PythonEditor("", version); var providers = _view.VS.ComponentModel.GetExtensions <IClassifierProvider>().ToArray(); _provider1 = providers.OfType <PythonClassifierProvider>().Single(); _provider2 = providers.OfType <PythonAnalysisClassifierProvider>().Single(); _classificationsReady1 = new ManualResetEventSlim(); _classificationsReady2 = new ManualResetEventSlim(); AstClassifier.ClassificationChanged += (s, e) => _classificationsReady1.SetIfNotDisposed(); var startVersion = _view.CurrentSnapshot.Version; AnalysisClassifier.ClassificationChanged += (s, e) => { try { var bi = PythonTextBufferInfo.TryGetForBuffer(_view.View.TextView.TextBuffer); if (bi?.LastAnalysisReceivedVersion == null) { return; } // make sure we have classifications from the version we analyzed after // setting the text below. if (bi.LastAnalysisReceivedVersion.VersionNumber > startVersion.VersionNumber) { _classificationsReady2.SetIfNotDisposed(); } } catch (Exception ex) { _excInfo = ExceptionDispatchInfo.Capture(ex); } }; _view.Text = code; }
private static IDlrClassifierProvider MakeClassifierProvider() { var classReg = new MockClassificationTypeRegistryService(); var provider = new PythonClassifierProvider(Program.PythonContentType, Program.PythonEngine); provider._classificationRegistry = classReg; return(provider); }
private static PythonClassifierProvider MakeClassifierProvider() { var classReg = new MockClassificationTypeRegistryService(); var provider = new PythonClassifierProvider(new MockContentTypeRegistryService()); provider._classificationRegistry = classReg; return(provider); }
public ClassifierHelper(string code, PythonLanguageVersion version) { _view = new PythonEditor("", version); var providers = _view.VS.ComponentModel.GetExtensions <IClassifierProvider>().ToArray(); _provider1 = providers.OfType <PythonClassifierProvider>().Single(); _provider2 = providers.OfType <PythonAnalysisClassifierProvider>().Single(); _classificationsReady1 = new ManualResetEventSlim(); _classificationsReady2 = new ManualResetEventSlim(); AstClassifier.ClassificationChanged += (s, e) => _classificationsReady1.SetIfNotDisposed(); AnalysisClassifier.ClassificationChanged += (s, e) => _classificationsReady2.SetIfNotDisposed(); _view.Text = code; }
public ClassifierHelper(string code, PythonLanguageVersion version) { _vs = new MockVs(); var reg = _vs.ContentTypeRegistry; var providers = _vs.ComponentModel.GetExtensions <IClassifierProvider>().ToArray(); _provider1 = providers.OfType <PythonClassifierProvider>().Single(); _provider2 = providers.OfType <PythonAnalysisClassifierProvider>().Single(); var factory = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version.ToVersion()); _analyzer = new VsProjectAnalyzer(_vs.ServiceProvider, factory, new[] { factory }); _view = _vs.CreateTextView(PythonCoreConstants.ContentType, code, v => { v.TextView.TextBuffer.Properties.AddProperty(typeof(VsProjectAnalyzer), _analyzer); }); }
private static async Task <IEnumerable <TrackingTagSpan <ErrorTag> > > AnalyzeTextBufferAsync( MockTextBuffer buffer, PythonLanguageVersion version = PythonLanguageVersion.V27 ) { var fact = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version.ToVersion()); try { var serviceProvider = PythonToolsTestUtilities.CreateMockServiceProvider(); var errorProvider = serviceProvider.ComponentModel.GetService <IErrorProviderFactory>(); Assert.IsNotNull(errorProvider, "Error provider factory is not available"); var analyzer = new VsProjectAnalyzer(serviceProvider, fact, new[] { fact }); buffer.AddProperty(typeof(VsProjectAnalyzer), analyzer); var classifierProvider = new PythonClassifierProvider(new MockContentTypeRegistryService(PythonCoreConstants.ContentType), serviceProvider); classifierProvider._classificationRegistry = new MockClassificationTypeRegistryService(); classifierProvider.GetClassifier(buffer); var squiggles = errorProvider.GetErrorTagger(buffer); var textView = new MockTextView(buffer); var monitoredBuffer = analyzer.MonitorTextBuffer(textView, buffer); var tcs = new TaskCompletionSource <object>(); buffer.GetPythonProjectEntry().OnNewAnalysis += (s, e) => tcs.SetResult(null); await tcs.Task; var snapshot = buffer.CurrentSnapshot; // Ensure all tasks have been updated var taskProvider = (ErrorTaskProvider)serviceProvider.GetService(typeof(ErrorTaskProvider)); var time = await taskProvider.FlushAsync(); Console.WriteLine("TaskProvider.FlushAsync took {0}ms", time.TotalMilliseconds); var spans = squiggles.GetTaggedSpans(new SnapshotSpan(snapshot, 0, snapshot.Length)); analyzer.StopMonitoringTextBuffer(monitoredBuffer.BufferParser, textView); return(spans); } finally { } }
public ClassifierHelper(MockTextBuffer buffer, PythonLanguageVersion version) { var serviceProvider = PythonToolsTestUtilities.CreateMockServiceProvider(); _contentRegistry = new MockContentTypeRegistryService(PythonCoreConstants.ContentType); _classificationRegistry = new MockClassificationTypeRegistryService(); _provider1 = new PythonClassifierProvider(_contentRegistry, serviceProvider) { _classificationRegistry = _classificationRegistry }; _provider2 = new PythonAnalysisClassifierProvider(_contentRegistry, serviceProvider) { _classificationRegistry = _classificationRegistry }; _buffer = buffer; _factory = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version.ToVersion()); var analyzer = new VsProjectAnalyzer(serviceProvider, _factory, new[] { _factory }); _buffer.AddProperty(typeof(VsProjectAnalyzer), analyzer); _view = new MockTextView(_buffer); }
private static ISmartTagSession GetSmartTagSession( MockTextBuffer buffer, int index, PythonLanguageVersion version = PythonLanguageVersion.V27, bool assertIfNoSession = true ) { if (index < 0) { index += buffer.CurrentSnapshot.Length; } var fact = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version.ToVersion()); var sp = PythonToolsTestUtilities.CreateMockServiceProvider(); var analyzer = new VsProjectAnalyzer(sp, fact, new[] { fact }); buffer.AddProperty(typeof(VsProjectAnalyzer), analyzer); var classifierProvider = new PythonClassifierProvider( new MockContentTypeRegistryService(PythonCoreConstants.ContentType), sp ); classifierProvider._classificationRegistry = new MockClassificationTypeRegistryService(); classifierProvider.GetClassifier(buffer); var view = new MockTextView(buffer); var monitoredBuffer = analyzer.MonitorTextBuffer(view, buffer); analyzer.WaitForCompleteAnalysis(x => true); while (((IPythonProjectEntry)buffer.GetProjectEntry()).Analysis == null) { System.Threading.Thread.Sleep(500); } analyzer.StopMonitoringTextBuffer(monitoredBuffer.BufferParser, view); view.TextViewModel = new MockTextViewModel { DataBuffer = buffer, EditBuffer = buffer }; var snapshot = buffer.CurrentSnapshot; var broker = new MockSmartTagBroker(); broker.SourceProviders.Add(new SmartTagSourceProvider(sp)); var cont = new SmartTagController(broker, view); view.Caret.MoveTo(new SnapshotPoint(snapshot, index)); cont.ShowSmartTag(); var session = broker.GetSessions(view).FirstOrDefault(); Assert.IsNull(session, "Session should not be active"); var task = Volatile.Read(ref cont._curTask); if (assertIfNoSession) { Assert.IsNotNull(task, "Session should have task running"); } else if (task == null) { // No session and no task means we won't ever get a session here return(null); } // Simulate repeatedly starting a session like the idle loop would for (int retries = 1000; session == null && retries > 0; --retries) { Thread.Sleep(10); cont.ShowSmartTag(); session = broker.GetSessions(view).FirstOrDefault(); } if (assertIfNoSession) { Assert.IsNotNull(session, "No session is active"); Assert.IsFalse(session.IsDismissed, "Session should not be dismissed"); } if (session != null) { Console.WriteLine("Found session with following tags:"); foreach (var t in session.ActionSets.SelectMany(s => s.Actions).Select(s => s.DisplayText)) { Console.WriteLine(" {0}", t); } } return(session); }