未验证 提交 525c301f 编写于 作者: G Gen Lu 提交者: GitHub

Merge pull request #47647 from genlu/TriggerLocation

Keep track of the trigger location for async completion
......@@ -123,7 +123,7 @@ internal CommitManager(ITextView textView, RecentItemsManager recentItemsManager
return new AsyncCompletionData.CommitResult(isHandled: true, AsyncCompletionData.CommitBehavior.None);
}
if (!Helpers.TryGetInitialTriggerLocation(item, out var triggerLocation))
if (!Helpers.TryGetInitialTriggerLocation(session, out var triggerLocation))
{
// Need the trigger snapshot to calculate the span when the commit changes to be applied.
// They should always be available from VS. Just to be defensive, if it's not found here, Roslyn should not make a commit.
......
......@@ -220,6 +220,7 @@ static void CheckForExperimentStatus(ITextView textView, Document document)
SnapshotSpan applicableToSpan,
CancellationToken cancellationToken)
{
session.Properties[TriggerLocation] = triggerLocation;
return GetCompletionContextWorkerAsync(session, trigger, triggerLocation, isExpanded: false, cancellationToken);
}
......@@ -306,7 +307,7 @@ static void CheckForExperimentStatus(ITextView textView, Document document)
foreach (var roslynItem in completionList.Items)
{
cancellationToken.ThrowIfCancellationRequested();
var item = Convert(document, roslynItem, filterSet, triggerLocation);
var item = Convert(document, roslynItem, filterSet);
itemsBuilder.Add(item);
}
......@@ -435,8 +436,7 @@ public async Task<object> GetDescriptionAsync(IAsyncCompletionSession session, V
private VSCompletionItem Convert(
Document document,
RoslynCompletionItem roslynItem,
FilterSet filterSet,
SnapshotPoint triggerLocation)
FilterSet filterSet)
{
VSCompletionItemData itemData;
......@@ -490,7 +490,6 @@ public async Task<object> GetDescriptionAsync(IAsyncCompletionSession session, V
attributeIcons: itemData.AttributeIcons);
item.Properties.AddProperty(RoslynItem, roslynItem);
item.Properties.AddProperty(TriggerLocation, triggerLocation);
return item;
}
......
......@@ -140,27 +140,7 @@ internal static bool IsStandardCommitCharacter(char c)
=> c == '\t' || c == '\n' || c == '\0';
internal static bool TryGetInitialTriggerLocation(EditorAsyncCompletion.IAsyncCompletionSession session, out SnapshotPoint initialTriggerLocation)
{
if (session is EditorAsyncCompletion.IAsyncCompletionSessionOperations sessionOperations)
{
initialTriggerLocation = sessionOperations.InitialTriggerLocation;
return true;
}
initialTriggerLocation = default;
return false;
}
internal static bool TryGetInitialTriggerLocation(VSCompletionItem item, out SnapshotPoint initialTriggerLocation)
{
if (item.Properties.TryGetProperty(CompletionSource.TriggerLocation, out initialTriggerLocation))
{
return true;
}
initialTriggerLocation = default;
return false;
}
=> session.Properties.TryGetProperty(CompletionSource.TriggerLocation, out initialTriggerLocation);
// This is a temporarily method to support preference of IntelliCode items comparing to non-IntelliCode items.
// We expect that Editor will introduce this support and we will get rid of relying on the "★" then.
......
......@@ -730,5 +730,31 @@ $$</Document>
Assert.False(state.HasSuggestedItem())
End Using
End Function
<WorkItem(1163608, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1163608")>
<ConditionalWpfFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.DebuggingIntelliSense)>
Public Async Function TestItemDescription() As Task
Dim text = <Workspace>
<Project Language="C#" CommonReferences="true">
<Document>class Program
{
static void Main(string[] args)
[|{|]
}
}</Document>
</Project>
</Workspace>
Using state = TestState.CreateCSharpTestState(text, True)
state.SendTypeChars("arg")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertCompletionSession()
Await state.AssertSelectedCompletionItem("args")
Dim description = Await state.GetSelectedItemDescriptionAsync()
Assert.Contains("args", description.Text)
state.SendTab()
Assert.Contains("args", state.GetCurrentViewLineText())
End Using
End Function
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册