未验证 提交 9cbb7342 编写于 作者: I Ivan Basov 提交者: GitHub

Ignore await in completion when triggers completion between two dots (#39302)

上级 f64581a7
......@@ -7178,6 +7178,89 @@ async Task<int> goo()
await VerifyItemWithMscorlib45Async(markup, "goo", description, "C#");
}
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task AwaitableDotsLikeRangeExpression()
{
var markup = @"
using System.IO;
using System.Threading.Tasks;
namespace N
{
class C
{
async Task M()
{
var request = new Request();
var m = await request.$$.ReadAsStreamAsync();
}
}
class Request
{
public Task<Stream> ReadAsStreamAsync() => null;
}
}";
await VerifyItemExistsAsync(markup, "ReadAsStreamAsync");
}
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task AwaitableDotsLikeRangeExpressionWithParentheses()
{
var markup = @"
using System.IO;
using System.Threading.Tasks;
namespace N
{
class C
{
async Task M()
{
var request = new Request();
var m = (await request).$$.ReadAsStreamAsync();
}
}
class Request
{
public Task<Stream> ReadAsStreamAsync() => null;
}
}";
// Nothing should be found: no awaiter for request.
await VerifyItemIsAbsentAsync(markup, "Result");
await VerifyItemIsAbsentAsync(markup, "ReadAsStreamAsync");
}
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task AwaitableDotsLikeRangeExpressionWithTaskAndParentheses()
{
var markup = @"
using System.IO;
using System.Threading.Tasks;
namespace N
{
class C
{
async Task M()
{
var request = new Task<Request>();
var m = (await request).$$.ReadAsStreamAsync();
}
}
class Request
{
public Task<Stream> ReadAsStreamAsync() => null;
}
}";
await VerifyItemIsAbsentAsync(markup, "Result");
await VerifyItemExistsAsync(markup, "ReadAsStreamAsync");
}
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task ObsoleteItem()
{
......
......@@ -323,7 +323,12 @@ private ImmutableArray<ISymbol> GetSymbolsOffOfName(NameSyntax name)
private ImmutableArray<ISymbol> GetSymbolsOffOfExpression(ExpressionSyntax originalExpression)
{
var expression = originalExpression.WalkDownParentheses();
// In case of 'await x$$', we want to move to 'x' to get it's members.
// To run GetSymbolInfo, we also need to get rid of parenthesis.
var expression = originalExpression is AwaitExpressionSyntax awaitExpression
? awaitExpression.Expression.WalkDownParentheses()
: originalExpression.WalkDownParentheses();
var leftHandBinding = _context.SemanticModel.GetSymbolInfo(expression, _cancellationToken);
var container = _context.SemanticModel.GetTypeInfo(expression, _cancellationToken).Type;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册