1
using Microsoft
.VisualStudio
.Language
.Intellisense
;
2 using Microsoft
.VisualStudio
.Text
;
3 using Microsoft
.VisualStudio
.Text
.Editor
;
4 using Microsoft
.VisualStudio
.Text
.Operations
;
6 using System
.Collections
.Generic
;
8 using System
.Threading
;
9 using System
.Threading
.Tasks
;
11 namespace TestLightBulb
13 class TestSuggestedActionsSource
: ISuggestedActionsSource
15 private readonly TestSuggestedActionsSourceProvider _factory
;
16 private readonly ITextBuffer _textBuffer
;
17 private readonly ITextView _textView
;
19 public TestSuggestedActionsSource(TestSuggestedActionsSourceProvider testSuggestedActionsSourceProvider
, ITextView textView
, ITextBuffer textBuffer
)
21 _factory
= testSuggestedActionsSourceProvider
;
22 _textBuffer
= textBuffer
;
26 #pragma warning disable 0067
27 public event EventHandler
<EventArgs
> SuggestedActionsChanged
;
28 #pragma warning restore 0067
34 public IEnumerable
<SuggestedActionSet
> GetSuggestedActions(ISuggestedActionCategorySet requestedActionCategories
, SnapshotSpan range
, CancellationToken cancellationToken
)
37 if (TryGetWordUnderCaret(out extent
) && extent
.IsSignificant
)
39 ITrackingSpan trackingSpan
= range
.Snapshot
.CreateTrackingSpan(extent
.Span
, SpanTrackingMode
.EdgeInclusive
);
40 var upperAction
= new UpperCaseSuggestedAction(trackingSpan
);
41 var lowerAction
= new LowerCaseSuggestedAction(trackingSpan
);
42 return new SuggestedActionSet
[] { new SuggestedActionSet(new ISuggestedAction[] { upperAction, lowerAction }
) };
44 return Enumerable
.Empty
<SuggestedActionSet
>();
47 public Task
<bool> HasSuggestedActionsAsync(ISuggestedActionCategorySet requestedActionCategories
, SnapshotSpan range
, CancellationToken cancellationToken
)
49 return Task
.Factory
.StartNew(() =>
52 if (TryGetWordUnderCaret(out extent
))
54 // don't display the tag if the extent has whitespace
55 return extent
.IsSignificant
;
61 public bool TryGetTelemetryId(out Guid telemetryId
)
63 telemetryId
= Guid
.Empty
;
67 private bool TryGetWordUnderCaret(out TextExtent wordExtent
)
69 ITextCaret caret
= _textView
.Caret
;
72 if (caret
.Position
.BufferPosition
> 0)
74 point
= caret
.Position
.BufferPosition
- 1;
78 wordExtent
= default(TextExtent
);
82 ITextStructureNavigator navigator
= _factory
.NavigatorService
.GetTextStructureNavigator(_textBuffer
);
84 wordExtent
= navigator
.GetExtentOfWord(point
);