Skip to content

Commit

Permalink
Ensure completion providers have been indexed when searching for a pa…
Browse files Browse the repository at this point in the history
…rticular provider

Fixes #24112
  • Loading branch information
dpoeschl committed Apr 26, 2018
1 parent 79ae6bc commit 7ede59e
Showing 1 changed file with 9 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public abstract class CompletionServiceWithProviders : CompletionService, IEqual
private readonly Dictionary<string, CompletionProvider> _nameToProvider = new Dictionary<string, CompletionProvider>();
private readonly Dictionary<ImmutableHashSet<string>, ImmutableArray<CompletionProvider>> _rolesToProviders;
private readonly Func<ImmutableHashSet<string>, ImmutableArray<CompletionProvider>> _createRoleProviders;
private readonly Func<string, CompletionProvider> _getProviderByName;

private readonly Workspace _workspace;

Expand All @@ -52,6 +53,7 @@ internal CompletionServiceWithProviders(
ExclusiveProviders = exclusiveProviders;
_rolesToProviders = new Dictionary<ImmutableHashSet<string>, ImmutableArray<CompletionProvider>>(this);
_createRoleProviders = CreateRoleProviders;
_getProviderByName = GetProviderByName;
}

public override CompletionRules GetRules()
Expand Down Expand Up @@ -194,13 +196,19 @@ internal protected CompletionProvider GetProvider(CompletionItem item)
{
lock (_gate)
{
_nameToProvider.TryGetValue(name, out provider);
provider = _nameToProvider.GetOrAdd(name, _getProviderByName);
}
}

return provider;
}

private CompletionProvider GetProviderByName(string providerName)
{
var providers = GetAllProviders(roles: ImmutableHashSet<string>.Empty);
return providers.FirstOrDefault(p => p.Name == providerName);
}

public override async Task<CompletionList> GetCompletionsAsync(
Document document,
int caretPosition,
Expand Down

0 comments on commit 7ede59e

Please sign in to comment.