コード例 #1
0
        private async void OnNewAnalysis(object sender, EventArgs e)
        {
            var bi = sender as PythonTextBufferInfo;

            if (bi == null)
            {
                Debug.Fail("Unexpected Sender type " + sender?.GetType() ?? "(null)");
                return;
            }
            if (!_enabled && !_alwaysCreateSquiggle)
            {
                _taskProvider.Clear(bi.AnalysisEntry, VsProjectAnalyzer.UnresolvedImportMoniker);
                return;
            }

            var entry = bi.AnalysisEntry;

            if (entry == null)
            {
                return;
            }

            var missingImports = await entry.Analyzer.GetMissingImportsAsync(entry, bi.Buffer);

            if (missingImports == null)
            {
                return;
            }

            if (missingImports.Data.unresolved.Any())
            {
                var translator = missingImports.GetTracker(missingImports.Data.version);
                if (translator != null)
                {
                    var f = new TaskProviderItemFactory(translator);

                    _taskProvider.ReplaceItems(
                        entry,
                        VsProjectAnalyzer.UnresolvedImportMoniker,
                        missingImports.Data.unresolved.Select(t => f.FromUnresolvedImport(
                                                                  _services.Site,
                                                                  entry.Analyzer.InterpreterFactory as IPythonInterpreterFactoryWithDatabase,
                                                                  t.name,
                                                                  new SourceSpan(
                                                                      new SourceLocation(t.startIndex, t.startLine, t.startColumn),
                                                                      new SourceLocation(t.endIndex, t.endLine, t.endColumn)
                                                                      )
                                                                  )).ToList()
                        );
                }
            }
            else
            {
                _taskProvider.Clear(entry, VsProjectAnalyzer.UnresolvedImportMoniker);
            }
        }
コード例 #2
0
        protected override async Task OnNewAnalysis(PythonTextBufferInfo bi, AnalysisEntry entry)
        {
            if (!Enabled && !_alwaysCreateSquiggle || bi?.Document == null || bi.Buffer?.Properties == null)
            {
                TaskProvider.Clear(bi.Filename, VsProjectAnalyzer.InvalidEncodingMoniker);
                return;
            }

            var snapshot = bi.CurrentSnapshot;

            var message = CheckEncoding(snapshot, bi.Document.Encoding, out var magicEncodingName, out var magicEncodingIndex);

            if (message != null)
            {
                if (!bi.Buffer.Properties.TryGetProperty <string>(VsProjectAnalyzer.InvalidEncodingMoniker, out var prevMessage) ||
                    prevMessage != message)
                {
                    bi.Buffer.Properties[VsProjectAnalyzer.InvalidEncodingMoniker] = message;
                    SourceSpan span;
                    if (string.IsNullOrEmpty(magicEncodingName))
                    {
                        var pt = new SnapshotPoint(snapshot, magicEncodingIndex).ToSourceLocation();
                        span = new SourceSpan(pt, new SourceLocation(pt.Line, int.MaxValue));
                    }
                    else
                    {
                        span = new SnapshotSpan(snapshot, magicEncodingIndex, magicEncodingName.Length).ToSourceSpan();
                    }

                    TaskProvider.ReplaceItems(
                        bi.Filename,
                        VsProjectAnalyzer.InvalidEncodingMoniker,
                        new List <TaskProviderItem> {
                        new TaskProviderItem(
                            Services.Site,
                            VsProjectAnalyzer.InvalidEncodingMoniker,
                            message,
                            span,
                            VSTASKPRIORITY.TP_NORMAL,
                            VSTASKCATEGORY.CAT_CODESENSE,
                            true,
                            bi.LocationTracker,
                            snapshot.Version.VersionNumber
                            )
                    });
                }
            }
            else
            {
                TaskProvider.Clear(bi.Filename, VsProjectAnalyzer.InvalidEncodingMoniker);
                bi.Buffer.Properties.RemoveProperty(VsProjectAnalyzer.InvalidEncodingMoniker);
            }
        }
コード例 #3
0
        private async void OnNewAnalysis(AnalysisEntry entry, ITextBuffer buffer)
        {
            if (!_alwaysCreateSquiggle)
            {
                var service = _serviceProvider.GetPythonToolsService();
                if (service == null || !service.GeneralOptions.UnresolvedImportWarning)
                {
                    return;
                }
            }

            var missingImports = await entry.Analyzer.GetMissingImportsAsync(entry, buffer);

            if (missingImports != null)
            {
                var missing = missingImports.Data;

                if (missing.unresolved.Any())
                {
                    var translator = missingImports.GetTracker(missingImports.Data.version);
                    if (translator != null)
                    {
                        var f = new TaskProviderItemFactory(translator);

                        _taskProvider.ReplaceItems(
                            entry,
                            VsProjectAnalyzer.UnresolvedImportMoniker,
                            missingImports.Data.unresolved.Select(t => f.FromUnresolvedImport(
                                                                      _serviceProvider,
                                                                      entry.Analyzer.InterpreterFactory as IPythonInterpreterFactoryWithDatabase,
                                                                      t.name,
                                                                      new SourceSpan(
                                                                          new SourceLocation(t.startIndex, t.startLine, t.startColumn),
                                                                          new SourceLocation(t.endIndex, t.endLine, t.endColumn)
                                                                          )
                                                                      )).ToList()
                            );
                    }
                }
                else
                {
                    _taskProvider.Clear(entry, VsProjectAnalyzer.UnresolvedImportMoniker);
                }
            }
        }
コード例 #4
0
        protected override async Task OnNewAnalysis(PythonTextBufferInfo bi, AnalysisEntry entry)
        {
            if (!Enabled && !_alwaysCreateSquiggle || entry == null)
            {
                TaskProvider.Clear(bi.Filename, VsProjectAnalyzer.UnresolvedImportMoniker);
                return;
            }

            var missingImports = await entry.Analyzer.GetMissingImportsAsync(entry, bi.Buffer);

            if (missingImports == null)
            {
                return;
            }

            if (missingImports.Data.unresolved.Any())
            {
                var translator = missingImports.GetTracker(missingImports.Data.version);
                if (translator != null)
                {
                    var f = new TaskProviderItemFactory(translator);

                    TaskProvider.ReplaceItems(
                        bi.Filename,
                        VsProjectAnalyzer.UnresolvedImportMoniker,
                        missingImports.Data.unresolved.Select(t => f.FromUnresolvedImport(
                                                                  Services.Site,
                                                                  entry.Analyzer.InterpreterFactory as IPythonInterpreterFactoryWithDatabase,
                                                                  t.name,
                                                                  new SourceSpan(
                                                                      new SourceLocation(t.startLine, t.startColumn),
                                                                      new SourceLocation(t.endLine, t.endColumn)
                                                                      )
                                                                  )).ToList()
                        );
                }
            }
            else
            {
                TaskProvider.Clear(bi.Filename, VsProjectAnalyzer.UnresolvedImportMoniker);
            }
        }