Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove ImportCompletion feature flag and enable by default #65259

Merged
merged 1 commit into from
Nov 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ public async Task<VSCompletionContext> GetCompletionContextAsync(

var sessionData = CompletionSessionData.GetOrCreateSessionData(session);

if (!options.ShouldShowItemsFromUnimportedNamespaces())
if (!options.ShouldShowItemsFromUnimportedNamespaces)
{
// No need to trigger expanded providers at all if the feature is disabled, just trigger core providers and return;
var (context, list) = await GetCompletionContextWorkerAsync(session, document, trigger, triggerLocation,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6894,7 +6894,6 @@ namespace NS2
showCompletionInArgumentLists:=showCompletionInArgumentLists)

state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ForceExpandedCompletionIndexCreation), True)
state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)

' trigger completion with import completion disabled
state.SendInvokeCompletionList()
Expand Down Expand Up @@ -7093,7 +7092,6 @@ public class AA
}</Document>)

state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ForceExpandedCompletionIndexCreation), True)
state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)

state.SendInvokeCompletionList()
Await state.WaitForUIRenderedAsync()
Expand Down Expand Up @@ -7878,9 +7876,6 @@ namespace NS
} </Document>,
showCompletionInArgumentLists:=showCompletionInArgumentLists)

state.Workspace.GlobalOptions.SetGlobalOption(
New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)

state.SendTypeChars("task")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem(displayText:="Task")
Expand Down Expand Up @@ -10283,8 +10278,6 @@ class MyClass
</Document>,
extraExportedTypes:={GetType(ItemWithAdditionalFilterTextsProvider)}.ToList())

state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)

state.SendTypeChars(" ")
Await state.AssertCompletionItemsContainAll("Consolation", "Add code that write to console", "Add code that write line to console")

Expand Down Expand Up @@ -10374,7 +10367,6 @@ class MyClass
}
</Document>)

state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)
state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowNewSnippetExperienceUserOption, LanguageNames.CSharp), True)
state.SendTypeChars("if")
Await state.AssertSelectedCompletionItem(displayText:="if", inlineDescription:=Nothing, isHardSelected:=True)
Expand Down Expand Up @@ -10449,7 +10441,6 @@ class MyClass
}
</Document>)

state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)
state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowNewSnippetExperienceUserOption, LanguageNames.CSharp), False)
state.SendInvokeCompletionList()
' We should still work normally w/o pythia recommender
Expand All @@ -10473,7 +10464,6 @@ class MyClass
</Document>,
extraExportedTypes:={GetType(TestPythiaDeclarationNameRecommenderImplmentation)}.ToList())

state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)
state.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowNewSnippetExperienceUserOption, LanguageNames.CSharp), False)

state.SendInvokeCompletionList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ public abstract class AbstractCompletionProviderTests<TWorkspaceFixture> : TestB
protected readonly Mock<ICompletionSession> MockCompletionSession;

protected bool? ShowTargetTypedCompletionFilter { get; set; }
protected bool? TypeImportCompletionFeatureFlag { get; set; }
protected bool? ShowImportCompletionItemsOptionValue { get; set; }
protected bool? ForceExpandedCompletionIndexCreation { get; set; }
protected bool? HideAdvancedMembers { get; set; }
Expand All @@ -69,9 +68,6 @@ private CompletionOptions GetCompletionOptions()
if (ShowTargetTypedCompletionFilter.HasValue)
options = options with { TargetTypedCompletionFilter = ShowTargetTypedCompletionFilter.Value };

if (TypeImportCompletionFeatureFlag.HasValue)
options = options with { TypeImportCompletion = TypeImportCompletionFeatureFlag.Value };

if (ShowImportCompletionItemsOptionValue.HasValue)
options = options with { ShowItemsFromUnimportedNamespaces = ShowImportCompletionItemsOptionValue.Value };

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.

Imports Microsoft.CodeAnalysis.CSharp
Imports Microsoft.CodeAnalysis.Completion
Imports Microsoft.CodeAnalysis.CSharp
Imports Microsoft.CodeAnalysis.Options

Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
Expand All @@ -25,24 +25,28 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
excludedTypes, extraExportedTypes,
includeFormatCommandHandler, workspaceKind:=Nothing)

testState.Workspace.GlobalOptions.SetGlobalOption(
New OptionKey(CompletionOptionsStorage.TriggerInArgumentLists, LanguageNames.CSharp), showCompletionInArgumentLists)
testState.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.TriggerInArgumentLists, LanguageNames.CSharp), showCompletionInArgumentLists)
testState.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp), False)

Return testState
End Function

Public Shared Function CreateVisualBasicTestState(documentElement As XElement,
Optional extraExportedTypes As List(Of Type) = Nothing) As TestState

Return New TestState(<Workspace>
<Project Language="Visual Basic" CommonReferences="true">
<Document>
<%= documentElement.Value %>
</Document>
</Project>
</Workspace>,
Dim testState = New TestState(<Workspace>
<Project Language="Visual Basic" CommonReferences="true">
<Document>
<%= documentElement.Value %>
</Document>
</Project>
</Workspace>,
excludedTypes:=Nothing, extraExportedTypes,
includeFormatCommandHandler:=False, workspaceKind:=Nothing)

testState.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.VisualBasic), False)

Return testState
End Function

Public Shared Function CreateTestStateFromWorkspace(workspaceElement As XElement,
Expand All @@ -53,8 +57,8 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
Dim testState = New TestState(
workspaceElement, excludedTypes:=Nothing, extraExportedTypes, includeFormatCommandHandler:=False, workspaceKind)

testState.Workspace.GlobalOptions.SetGlobalOption(
New OptionKey(CompletionOptionsStorage.TriggerInArgumentLists, LanguageNames.CSharp), showCompletionInArgumentLists)
testState.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.TriggerInArgumentLists, LanguageNames.CSharp), showCompletionInArgumentLists)
testState.Workspace.GlobalOptions.SetGlobalOption(New OptionKey(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces, LanguageNames.VisualBasic), False)

Return testState
End Function
Expand Down
12 changes: 3 additions & 9 deletions src/Features/Core/Portable/Completion/CompletionOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,9 @@ internal sealed record class CompletionOptions
public SnippetsRule SnippetsBehavior { get; init; } = SnippetsRule.Default;
public bool HideAdvancedMembers { get; init; } = false;
public bool ShowNameSuggestions { get; init; } = true;
public bool? ShowItemsFromUnimportedNamespaces { get; init; } = null;
public bool? ShowItemsFromUnimportedNamespaces { get; init; } = true;
public bool UnnamedSymbolCompletionDisabled { get; init; } = false;
public bool TargetTypedCompletionFilter { get; init; } = false;
public bool TypeImportCompletion { get; init; } = false;
public bool ProvideDateAndTimeCompletions { get; init; } = true;
public bool ProvideRegexCompletions { get; init; } = true;
public bool ForceExpandedCompletionIndexCreation { get; init; } = false;
Expand All @@ -43,14 +42,9 @@ public RecommendationServiceOptions ToRecommendationServiceOptions()

/// <summary>
/// Whether items from unimported namespaces should be included in the completion list.
/// This takes into consideration the experiment we are running in addition to the value
/// from user facing options.
/// </summary>
public bool ShouldShowItemsFromUnimportedNamespaces()
{
// Don't trigger import completion if the option value is "default" and the experiment is disabled for the user.
return ShowItemsFromUnimportedNamespaces ?? TypeImportCompletion;
}
public bool ShouldShowItemsFromUnimportedNamespaces
=> !ShowItemsFromUnimportedNamespaces.HasValue || ShowItemsFromUnimportedNamespaces.Value;

/// <summary>
/// Whether items from new snippet experience should be included in the completion list.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public Task NotifyCommittingItemAsync(Document document, CompletionItem item, ch

public override async Task ProvideCompletionsAsync(CompletionContext completionContext)
{
if (!completionContext.CompletionOptions.ShouldShowItemsFromUnimportedNamespaces())
if (!completionContext.CompletionOptions.ShouldShowItemsFromUnimportedNamespaces)
return;

var cancellationToken = completionContext.CancellationToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public static CompletionOptions GetCompletionOptions(this IGlobalOptionService o
ShowNameSuggestions = options.GetOption(ShowNameSuggestions, language),
ShowItemsFromUnimportedNamespaces = options.GetOption(ShowItemsFromUnimportedNamespaces, language),
UnnamedSymbolCompletionDisabled = options.GetOption(UnnamedSymbolCompletionDisabledFeatureFlag),
TypeImportCompletion = options.GetOption(TypeImportCompletionFeatureFlag),
ProvideDateAndTimeCompletions = options.GetOption(ProvideDateAndTimeCompletions, language),
ProvideRegexCompletions = options.GetOption(ProvideRegexCompletions, language),
ForceExpandedCompletionIndexCreation = options.GetOption(ForceExpandedCompletionIndexCreation),
Expand All @@ -35,10 +34,6 @@ public static CompletionOptions GetCompletionOptions(this IGlobalOptionService o

// feature flags

public static readonly Option2<bool> TypeImportCompletionFeatureFlag = new(nameof(CompletionOptions), nameof(TypeImportCompletionFeatureFlag),
CompletionOptions.Default.TypeImportCompletion,
new FeatureFlagStorageLocation("Roslyn.TypeImportCompletion"));

public static readonly Option2<bool> UnnamedSymbolCompletionDisabledFeatureFlag = new(nameof(CompletionOptions), nameof(UnnamedSymbolCompletionDisabledFeatureFlag),
CompletionOptions.Default.UnnamedSymbolCompletionDisabled,
new FeatureFlagStorageLocation("Roslyn.UnnamedSymbolCompletionDisabled"));
Expand Down