private void AnalyzeExpression(CaretPosition position) { var trackingSpan = position.CreateTrackingSpan(buffer); if (trackingSpan != null) { var vars = buffer.CurrentSnapshot.AnalyzeExpression( trackingSpan, false, _provider._PublicFunctionProvider, _provider._DatabaseInfoProvider, _provider._ProgramFileProvider ); if (String.IsNullOrWhiteSpace(vars.Expression)) { Clear(); return; } if (vars.Value != null && vars.Variables != null) { IProjectEntry currProj = buffer.GetAnalysis(); if (currProj != null) { var references = vars.Variables .Where(x => { if (x.Location != null) { if ((x.Location.ProjectEntry != null && x.Location.ProjectEntry != currProj) || (!string.IsNullOrWhiteSpace(x.Location.FilePath) && !x.Location.FilePath.Equals(currProj.FilePath, StringComparison.OrdinalIgnoreCase))) { return(false); } return(true); } return(false); }) .Select(x => new IndexSpan(x.Location.Index, vars.Value.Name.Length)); if (references != null) { ITextSnapshot currentSnapshot = this.buffer.CurrentSnapshot; NormalizedSnapshotSpanCollection spans = new NormalizedSnapshotSpanCollection(references.Where(x => x.Start >= 0 && x.End < currentSnapshot.Length).Select(x => x.ToSnapshotSpan(currentSnapshot))); if (this.highlightReferencesSpans != spans) { this.highlightReferencesSpans = spans; this.FireTagsChangedEvent(); } return; } } } } Clear(); }