diff --git a/docs/wiki/Manual-Testing.md b/docs/wiki/Manual-Testing.md
index 05ab1927ecd8f..979cf1cf1a964 100644
--- a/docs/wiki/Manual-Testing.md
+++ b/docs/wiki/Manual-Testing.md
@@ -66,7 +66,7 @@ When doing a test pass, copy this page and consider using these status indicator
| **Typing** | :fast_forward: **General Typing**
- Type and paste new constructs
- Nothing interferes with verbatim typing | | | |
| | :mag: :fast_forward: **Completion**
- Typing new keyword/construct names
- Dotting off of new constructs
- Matching part of the identifier is highlighted (including word prefix matches) [Visual Studio 2015 Update 1]
- Target type preselection [Visual Studio 2017]
IntelliSense filtering [Visual Studio 2017] | | | |
| | :fast_forward: **Formatting**
- Spacing in and around new constructs
- Spacing options
- Format Document command
`Tools > Options` settings should be respected | | | |
-| | :fast_forward: **Automatic Brace Completion** (*C# only*)
- Auto-insert close brace
- Shift+Enter commit of IntelliSense and any pending brace completion sessions (Currently C# only: https://github.com/dotnet/roslyn/issues/18065) | | | N/A |
+| | :fast_forward: **Automatic Brace Completion** (*C# only*)
- Auto-insert close brace
- Shift+Enter commit of IntelliSense and any pending brace completion sessions | | | N/A |
| | :fast_forward: **Indentation**
- Typing `Enter` in an unfinished statement indents the next line | | | |
| **Navigating** | :mag: :fast_forward: **Go To Definition**
- F12 from callsites to definition
- Ctrl+click [Visual Studio 2017 version 15.4] | | | |
| | :fast_forward: **Go To Implementation**
- Ctrl+F12 to jump from virtual members to their implementations
- Jump from inheritable types to their implementations | | | N/A |
diff --git a/src/Features/Core/Portable/Rename/SymbolicRenameInfo.cs b/src/Features/Core/Portable/Rename/SymbolicRenameInfo.cs
index ed8c79f41fdf9..88e3b271cdd2b 100644
--- a/src/Features/Core/Portable/Rename/SymbolicRenameInfo.cs
+++ b/src/Features/Core/Portable/Rename/SymbolicRenameInfo.cs
@@ -70,11 +70,8 @@ private bool CanRenameAttributePrefix(string triggerText)
// Ok, the symbol is good. Now, make sure that the trigger text starts with the prefix
// of the attribute. If it does, then we can rename just the attribute prefix (otherwise
// we need to rename the entire attribute).
-#pragma warning disable IDE0059 // Unnecessary assignment of a value - https://github.com/dotnet/roslyn/issues/45895
var nameWithoutAttribute = GetWithoutAttributeSuffix(this.Symbol.Name);
-
- return triggerText.StartsWith(triggerText); // TODO: Always true? What was it supposed to do?
-#pragma warning restore IDE0059 // Unnecessary assignment of a value
+ return triggerText.StartsWith(nameWithoutAttribute);
bool IsRenamingAttributeTypeWithAttributeSuffix()
{
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpAutomaticBraceCompletion.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpAutomaticBraceCompletion.cs
deleted file mode 100644
index 6491e640331cd..0000000000000
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpAutomaticBraceCompletion.cs
+++ /dev/null
@@ -1,814 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#nullable disable
-
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Test.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
-using Microsoft.VisualStudio.LanguageServices.Implementation.Log;
-using Roslyn.Test.Utilities;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace Roslyn.VisualStudio.IntegrationTests.CSharp
-{
- [Collection(nameof(SharedIntegrationHostFixture))]
- public class CSharpAutomaticBraceCompletion : AbstractEditorTest
- {
- protected override string LanguageName => LanguageNames.CSharp;
-
- public CSharpAutomaticBraceCompletion(VisualStudioInstanceFactory instanceFactory)
- : base(instanceFactory, nameof(CSharpAutomaticBraceCompletion))
- {
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_InsertionAndTabCompleting(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- void Goo() {
- $$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("if (true) {");
- VisualStudio.Editor.Verify.CurrentLineText("if (true) { $$}", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("if (true) { }$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_Overtyping(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- void Goo() {
- $$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("if (true) {");
- VisualStudio.Editor.Verify.CurrentLineText("if (true) { $$}", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys("}");
- VisualStudio.Editor.Verify.CurrentLineText("if (true) { }$$", assertCaretPosition: true);
- }
-
- ///
- /// This is a muscle-memory test for users who rely on the following sequence:
- ///
- /// - Enter
- /// - {
- /// - Enter
- /// - }
- ///
- ///
- [WpfFact, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_Overtyping_Method()
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Editor.SendKeys("public void A()");
- VisualStudio.Editor.SendKeys(VirtualKey.Enter, '{', VirtualKey.Enter, '}');
-
- VisualStudio.Editor.Verify.CurrentLineText("}$$", assertCaretPosition: true);
- }
-
- ///
- /// This is a muscle-memory test for users who rely on the following sequence:
- ///
- /// - Enter
- /// - {
- /// - Enter
- /// - }
- ///
- ///
- [WpfFact, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_Overtyping_Property()
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Editor.SendKeys("public int X");
- VisualStudio.Editor.SendKeys(VirtualKey.Enter, '{', VirtualKey.Enter, '}');
-
- VisualStudio.Editor.Verify.CurrentLineText("}$$", assertCaretPosition: true);
- }
-
- ///
- /// This is a muscle-memory test for users who rely on the following sequence:
- ///
- /// - Enter
- /// - {
- /// - Enter
- /// - }
- ///
- ///
- [WpfFact, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_Overtyping_CollectionInitializer()
- {
- SetUpEditor(@"
-using System.Collections.Generic;
-class C {
- void Method() {
- $$
- }
-}");
-
- VisualStudio.Editor.SendKeys("var x = new List()");
- VisualStudio.Editor.SendKeys(VirtualKey.Enter, '{', VirtualKey.Enter, '}');
-
- VisualStudio.Editor.Verify.CurrentLineText("}$$", assertCaretPosition: true);
- }
-
- ///
- /// This is a muscle-memory test for users who rely on the following sequence:
- ///
- /// - Enter
- /// - {
- /// - Enter
- /// - }
- ///
- ///
- [WpfFact, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_Overtyping_ObjectInitializer()
- {
- SetUpEditor(@"
-class C {
- void Method() {
- $$
- }
-}");
-
- VisualStudio.Editor.SendKeys("var x = new object()");
- VisualStudio.Editor.SendKeys(VirtualKey.Enter, '{', VirtualKey.Enter, '}');
-
- VisualStudio.Editor.Verify.CurrentLineText("}$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_OnReturnNoFormattingOnlyIndentationBeforeCloseBrace(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- void Goo() {
- $$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys(
- "if (true) {",
- VirtualKey.Enter,
- "var a = 1;");
-
- VisualStudio.Editor.Verify.TextContains(@"
-class C {
- void Goo() {
- if (true)
- {
- var a = 1;$$
- }
- }
-}",
-assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_OnReturnOvertypingTheClosingBrace(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- void Goo() {
- $$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys(
- "if (true) {",
- VirtualKey.Enter,
- "var a = 1;",
- '}');
-
- VisualStudio.Editor.Verify.TextContains(@"
-class C {
- void Goo() {
- if (true)
- {
- var a = 1;
- }$$
- }
-}",
-assertCaretPosition: true);
- }
-
- [WorkItem(653540, "DevDiv")]
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_OnReturnWithNonWhitespaceSpanInside(bool showCompletionInArgumentLists)
- {
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys(
- "class A { int i;",
- VirtualKey.Enter);
-
- VisualStudio.Editor.Verify.TextContains(@"class A { int i;
-$$}",
-assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Paren_InsertionAndTabCompleting(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("void Goo(");
- VisualStudio.Editor.Verify.CurrentLineText("void Goo($$)", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys("int x", VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("void Goo(int x)$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Paren_Overtyping(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys(
- "void Goo(",
- VirtualKey.Escape,
- ")");
-
- VisualStudio.Editor.Verify.CurrentLineText("void Goo()$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void SquareBracket_Insertion(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("int [");
- VisualStudio.Editor.Verify.CurrentLineText("int[$$]", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void SquareBracket_Overtyping(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("int [", ']');
- VisualStudio.Editor.Verify.CurrentLineText(" int[]$$ ", assertCaretPosition: true, trimWhitespace: false);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void DoubleQuote_InsertionAndTabCompletion(bool showCompletionInArgumentLists)
-
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("string str = \"", VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("string str = \"\"$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void DoubleQuote_InsertionAndOvertyping(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("string str = \"Hi Roslyn!", '"');
- VisualStudio.Editor.Verify.CurrentLineText("string str = \"Hi Roslyn!\"$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void DoubleQuote_FixedInterpolatedVerbatimString(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C
-{
- void M()
- {
- $$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("var v = @$\"");
- VisualStudio.Editor.Verify.CurrentLineText("var v = $@\"$$\"", assertCaretPosition: true);
-
- // Backspace removes quotes
- VisualStudio.Editor.SendKeys(VirtualKey.Backspace);
- VisualStudio.Editor.Verify.CurrentLineText("var v = $@$$", assertCaretPosition: true);
-
- // Undo puts them back
- VisualStudio.Editor.Undo();
- // Incorrect assertion: https://github.com/dotnet/roslyn/issues/33672
- VisualStudio.Editor.Verify.CurrentLineText("var v = $@\"\"$$", assertCaretPosition: true);
-
- // First, the FixInterpolatedVerbatimString action is undone (@$ reordering)
- VisualStudio.Editor.Undo();
- // Incorrect assertion: https://github.com/dotnet/roslyn/issues/33672
- VisualStudio.Editor.Verify.CurrentLineText("var v = @$\"\"$$", assertCaretPosition: true);
-
- // Then the automatic quote completion is undone
- VisualStudio.Editor.Undo();
- VisualStudio.Editor.Verify.CurrentLineText("var v = @$\"$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void AngleBracket_PossibleGenerics_InsertionAndCompletion(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- //field
- $$
-}");
-
- // Disable new rename UI for now, it's causing these tests to fail.
- // https://github.com/dotnet/roslyn/issues/63576
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_UseNewUI, language: null, false);
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("System.Action<", VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("System.Action<>$$", assertCaretPosition: true);
-
- SetUpEditor(@"
-class C {
- //method decl
- $$
-}");
-
- VisualStudio.Editor.SendKeys("void GenericMethod<", VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("void GenericMethod<>$$", assertCaretPosition: true);
-
- SetUpEditor(@"
-class C {
- //delegate
- $$
-}");
-
- VisualStudio.Editor.SendKeys("delegate void Del<");
- VisualStudio.Editor.Verify.CurrentLineText("delegate void Del<$$>", assertCaretPosition: true);
-
- SetUpEditor(@"
-//using directive
-$$
-");
-
- VisualStudio.Editor.SendKeys("using ActionOfT = System.Action<");
- VisualStudio.Editor.Verify.CurrentLineText("using ActionOfT = System.Action<$$>", assertCaretPosition: true);
-
- SetUpEditor(@"
-//class
-$$
-");
-
- VisualStudio.Editor.SendKeys("class GenericClass<", '>');
- VisualStudio.Editor.Verify.CurrentLineText("class GenericClass<>$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void SingleQuote_InsertionAndCompletion(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("char c = '");
- VisualStudio.Editor.Verify.CurrentLineText("char c = '$$'", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Delete, VirtualKey.Backspace);
- VisualStudio.Editor.SendKeys("'\u6666", "'");
-
- VisualStudio.Editor.Verify.CurrentLineText("char c = '\u6666'$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Nested_AllKinds(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class Bar
-{
- T Goo(T t) { return t; }
- void M()
- {
- $$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys(
- "var arr=new object[,]{{Goo(0");
-
- if (showCompletionInArgumentLists)
- {
- Assert.False(VisualStudio.Editor.IsCompletionActive());
- }
-
- VisualStudio.Editor.SendKeys(
- VirtualKey.Tab,
- VirtualKey.Tab,
- ",{Goo(Goo(\"hello",
- VirtualKey.Tab,
- VirtualKey.Tab,
- VirtualKey.Tab,
- VirtualKey.Tab,
- VirtualKey.Tab,
- ';');
-
- VisualStudio.Editor.Verify.CurrentLineText("var arr = new object[,] { { Goo(0) }, { Goo(Goo(\"hello\")) } };$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionInSingleLineComments(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- // $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("{([\"'");
- VisualStudio.Editor.Verify.CurrentLineText("// {([\"'$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionInMultiLineComments(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- /*
- $$
- */
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("{([\"'");
- VisualStudio.Editor.Verify.CurrentLineText("{([\"'$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionStringVerbatimStringOrCharLiterals(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- $$
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("string s = \"{([<'");
- VisualStudio.Editor.Verify.CurrentLineText("string s = \"{([<'$$\"", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.End, ';', VirtualKey.Enter);
-
- VisualStudio.Editor.SendKeys("string y = @\"{([<'");
- VisualStudio.Editor.Verify.CurrentLineText("string y = @\"{([<'$$\"", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.End, ';', VirtualKey.Enter);
-
- VisualStudio.Editor.SendKeys("char ch = '{([<\"");
- VisualStudio.Editor.Verify.CurrentLineText("char ch = '{([<\"$$'", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionInXmlDocComments(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-$$
-class C { }");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys(
- "///",
- "{([<\"'");
-
- VisualStudio.Editor.Verify.CurrentLineText("/// {([<\"'$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionInDisabledPreprocesser(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
-#if false
-$$
-#endif
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("void Goo(");
- VisualStudio.Editor.Verify.CurrentLineText("void Goo($$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionAfterRegionPreprocesser(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-#region $$
-
-#endregion
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("{([<\"'");
- VisualStudio.Editor.Verify.CurrentLineText("#region {([<\"'$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionAfterEndregionPreprocesser(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-#region
-
-#endregion $$
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("{([<\"'");
- VisualStudio.Editor.Verify.CurrentLineText("#endregion {([<\"'$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionAfterIfPreprocesser(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-#if $$
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("{([<\"'");
- VisualStudio.Editor.Verify.CurrentLineText("#if {([<\"'$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Negative_NoCompletionAfterPragmaPreprocesser(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-#pragma $$
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("{([<\"'");
- VisualStudio.Editor.Verify.CurrentLineText("#pragma {([<\"'$$", assertCaretPosition: true);
- }
-
- [WorkItem(651954, "DevDiv")]
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void InteractionWithOverrideStubGeneration(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class A
-{
- public virtual void Goo() { }
-}
-class B : A
-{
- // type ""override Goo(""
- $$
-}
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("override ");
- Assert.True(VisualStudio.Editor.IsCompletionActive());
-
- VisualStudio.Editor.SendKeys("Goo(");
- var actualText = VisualStudio.Editor.GetText();
- Assert.Contains(@"
-class B : A
-{
- // type ""override Goo(""
- public override void Goo()
- {
- base.Goo();
- }
-}", actualText);
- }
-
- [WorkItem(531107, "DevDiv")]
- [WpfTheory, CombinatorialData]
- [Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void InteractionWithCompletionList(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-using System.Collections.Generic;
-class C
-{
- void M()
- {
- List li = $$
- }
-}
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("new Li");
- Assert.True(VisualStudio.Editor.IsCompletionActive());
-
- if (showCompletionInArgumentLists)
- {
- VisualStudio.Editor.SendKeys("(", ")");
- }
- else
- {
- VisualStudio.Editor.SendKeys("(", VirtualKey.Tab);
- }
-
- VisualStudio.Editor.Verify.CurrentLineText("List li = new List()$$", assertCaretPosition: true);
- }
-
- [WorkItem(823958, "DevDiv")]
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void AutoBraceCompleteDoesNotFormatBracePairInInitializers(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C
-{
- void M()
- {
- var x = $$
- }
-}
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("new int[]{");
- VisualStudio.Editor.Verify.CurrentLineText("var x = new int[] {$$}", assertCaretPosition: true);
- }
-
- [WorkItem(823958, "DevDiv")]
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void AutoBraceCompleteDoesNotFormatBracePairInObjectCreationExpression(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C
-{
- void M()
- {
- var x = $$
- }
-}
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("new {");
- VisualStudio.Editor.Verify.CurrentLineText("var x = new {$$}", assertCaretPosition: true);
- }
-
- [WorkItem(823958, "DevDiv")]
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void AutoBraceCompleteFormatsBracePairInClassDeclarationAndAutoProperty(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class $$
-");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("C{");
- VisualStudio.Editor.Verify.CurrentLineText("class C { $$}", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(
- VirtualKey.Enter,
- "int Prop {");
- VisualStudio.Editor.Verify.TextContains(@"
-class C
-{
- int Prop { $$}
-}",
-assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- [Trait(Traits.Feature, Traits.Features.CompleteStatement)]
- [WorkItem("https://github.com/dotnet/roslyn/issues/18104")]
- public void CompleteStatementTriggersCompletion(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class Program
-{
- static void Main(string[] args)
- {
- Main$$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("(ar");
- VisualStudio.Editor.Verify.CurrentLineText("Main(ar$$)", assertCaretPosition: true);
-
- if (showCompletionInArgumentLists)
- {
- Assert.True(VisualStudio.Editor.IsCompletionActive());
- }
-
- VisualStudio.Editor.SendKeys(";");
- VisualStudio.Editor.Verify.CurrentLineText("Main(args);$$", assertCaretPosition: true);
- }
-
- [WpfTheory, CombinatorialData, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public void Braces_InsertionOnNewLine(bool showCompletionInArgumentLists)
- {
- SetUpEditor(@"
-class C {
- void Goo() {
- $$
- }
-}");
-
- VisualStudio.Workspace.SetTriggerCompletionInArgumentLists(showCompletionInArgumentLists);
-
- VisualStudio.Editor.SendKeys("if (true)",
- VirtualKey.Enter,
- "{");
- VisualStudio.Editor.Verify.CurrentLineText("{ $$}", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-class C {
- void Goo() {
- if (true)
- {
-
- }
- }
-}");
-
- VisualStudio.Editor.SendKeys("}");
- VisualStudio.Editor.Verify.TextContains(@"
-class C {
- void Goo() {
- if (true)
- {
- }$$
- }
-}", assertCaretPosition: true);
- }
- }
-}
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpExtractMethod.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpExtractMethod.cs
index 99f3f2dc7b3ae..1859a7484703a 100644
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpExtractMethod.cs
+++ b/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpExtractMethod.cs
@@ -11,6 +11,7 @@
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
+using Microsoft.VisualStudio.IntegrationTest.Utilities.OutOfProcess;
using Roslyn.Test.Utilities;
using Xunit;
using Xunit.Abstractions;
@@ -76,7 +77,7 @@ public int Method()
MarkupTestFile.GetSpans(expectedMarkup, out var expectedText, out ImmutableArray spans);
VisualStudio.Editor.Verify.TextContains(expectedText);
- AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(VisualStudio.InlineRenameDialog.ValidRenameTag));
+ AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(InlineRenameDialog_OutOfProc.ValidRenameTag));
VisualStudio.Editor.SendKeys("SayHello", VirtualKey.Enter);
VisualStudio.Editor.Verify.TextContains(@"private static void SayHello()
@@ -116,7 +117,7 @@ public int Method()
MarkupTestFile.GetSpans(expectedMarkup, out var expectedText, out ImmutableArray spans);
Assert.Equal(expectedText, VisualStudio.Editor.GetText());
- AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(VisualStudio.InlineRenameDialog.ValidRenameTag));
+ AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(InlineRenameDialog_OutOfProc.ValidRenameTag));
VisualStudio.Editor.SendKeys("SayHello", VirtualKey.Enter);
VisualStudio.Editor.Verify.TextContains(@"private static int SayHello(int a, int b)
@@ -157,7 +158,7 @@ public int Method()
MarkupTestFile.GetSpans(expectedMarkup, out var expectedText, out ImmutableArray spans);
Assert.Equal(expectedText, VisualStudio.Editor.GetText());
- AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(VisualStudio.InlineRenameDialog.ValidRenameTag));
+ AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(InlineRenameDialog_OutOfProc.ValidRenameTag));
}
}
}
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpFormatting.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpFormatting.cs
deleted file mode 100644
index 42ffb27cc6722..0000000000000
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpFormatting.cs
+++ /dev/null
@@ -1,367 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#nullable disable
-
-using System.Collections.Immutable;
-using System.Threading;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Shared.TestHooks;
-using Microsoft.CodeAnalysis.Test.Utilities;
-using Microsoft.CodeAnalysis.Text;
-using Microsoft.VisualStudio.IntegrationTest.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
-using Roslyn.Test.Utilities;
-using Xunit;
-using Xunit.Abstractions;
-using ProjectUtils = Microsoft.VisualStudio.IntegrationTest.Utilities.Common.ProjectUtils;
-
-namespace Roslyn.VisualStudio.IntegrationTests.CSharp
-{
- [Collection(nameof(SharedIntegrationHostFixture))]
- public class CSharpFormatting : AbstractEditorTest
- {
- protected override string LanguageName => LanguageNames.CSharp;
-
- public CSharpFormatting(VisualStudioInstanceFactory instanceFactory)
- : base(instanceFactory, nameof(CSharpFormatting))
- {
- }
-
- [WpfFact(Skip = "https://github.com/dotnet/roslyn/issues/67244")]
- [Trait(Traits.Feature, Traits.Features.Formatting)]
- public void AlignOpenBraceWithMethodDeclaration()
- {
- using (var telemetry = VisualStudio.EnableTestTelemetryChannel())
- {
- SetUpEditor(@"
-$$class C
-{
- void Main()
- {
- }
-}");
-
- VisualStudio.Editor.FormatDocument();
- VisualStudio.Editor.Verify.TextContains(@"
-class C
-{
- void Main()
- {
- }
-}");
- telemetry.VerifyFired("vs/ide/vbcs/commandhandler/formatcommand");
- }
- }
-
- [WpfFact, Trait(Traits.Feature, Traits.Features.Formatting)]
- public void FormatOnSemicolon()
- {
- SetUpEditor(@"
-public class C
-{
- void Goo()
- {
- var x = from a in new List()
- where x % 2 = 0
- select x ;$$
- }
-}");
-
- VisualStudio.Editor.SendKeys(VirtualKey.Backspace, ";");
- VisualStudio.Editor.Verify.TextContains(@"
-public class C
-{
- void Goo()
- {
- var x = from a in new List()
- where x % 2 = 0
- select x;
- }
-}");
- }
-
- [WpfFact, Trait(Traits.Feature, Traits.Features.Formatting)]
- public void FormatSelection()
- {
- SetUpEditor(@"
-public class C {
- public void M( ) {$$
- }
-}");
-
- VisualStudio.Editor.SelectTextInCurrentDocument("public void M( ) {");
- VisualStudio.Editor.FormatSelection();
- VisualStudio.Editor.Verify.TextContains(@"
-public class C {
- public void M()
- {
- }
-}");
- }
-
- [WpfFact, Trait(Traits.Feature, Traits.Features.Formatting)]
- public void PasteCodeWithLambdaBody()
- {
- SetUpEditor(@"
-using System;
-class Program
-{
- static void Main()
- {
- Action a = () =>
- {
- using (null)
- {
- $$
- }
- };
- }
-}");
- VisualStudio.Editor.Paste(@" Action b = () =>
- {
-
- };");
-
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-class Program
-{
- static void Main()
- {
- Action a = () =>
- {
- using (null)
- {
- Action b = () =>
- {
-
- };
- }
- };
- }
-}");
- // Undo should only undo the formatting
- VisualStudio.Editor.Undo();
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-class Program
-{
- static void Main()
- {
- Action a = () =>
- {
- using (null)
- {
- Action b = () =>
- {
-
- };
- }
- };
- }
-}");
- }
-
- [WpfFact, Trait(Traits.Feature, Traits.Features.Formatting)]
- public void PasteCodeWithLambdaBody2()
- {
- SetUpEditor(@"
-using System;
-class Program
-{
- static void Main()
- {
- Action a = () =>
- {
- using (null)
- {
- $$
- }
- };
- }
-}");
- VisualStudio.Editor.Paste(@" Action b = n =>
- {
- Console.Writeline(n);
- };");
-
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-class Program
-{
- static void Main()
- {
- Action a = () =>
- {
- using (null)
- {
- Action b = n =>
- {
- Console.Writeline(n);
- };
- }
- };
- }
-}");
- }
-
- [WpfFact, Trait(Traits.Feature, Traits.Features.Formatting)]
- public void PasteCodeWithLambdaBody3()
- {
- SetUpEditor(@"
-using System;
-class Program
-{
- static void Main()
- {
- Action a = () =>
- {
- using (null)
- {
- $$
- }
- };
- }
-}");
- VisualStudio.Editor.Paste(@" D d = delegate(int x)
-{
- return 2 * x;
-};");
-
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-class Program
-{
- static void Main()
- {
- Action a = () =>
- {
- using (null)
- {
- D d = delegate (int x)
- {
- return 2 * x;
- };
- }
- };
- }
-}");
- }
-
- [WpfFact, Trait(Traits.Feature, Traits.Features.Formatting)]
- public void ShiftEnterWithIntelliSenseAndBraceMatching()
- {
- SetUpEditor(@"
-class Program
-{
- object M(object bar)
- {
- return M$$
- }
-}");
- VisualStudio.Workspace.WaitForAsyncOperations(Helper.HangMitigatingTimeout, FeatureAttribute.Workspace);
- VisualStudio.Editor.SendKeys("(ba", new KeyPress(VirtualKey.Enter, ShiftState.Shift), "// comment");
- VisualStudio.Editor.Verify.TextContains(@"
-class Program
-{
- object M(object bar)
- {
- return M(bar);
- // comment
- }
-}");
- }
-
- [WpfFact]
- [Trait(Traits.Feature, Traits.Features.EditorConfig)]
- [Trait(Traits.Feature, Traits.Features.Formatting)]
- [WorkItem("https://github.com/dotnet/roslyn/issues/15003")]
- public void ApplyEditorConfigAndFormatDocument()
- {
- var markup = @"
-class C
-{
- public int X1
- {
- get
- {
- $$return 3;
- }
- }
-}";
- var expectedTextTwoSpaceIndent = @"
-class C
-{
- public int X1
- {
- get
- {
- return 3;
- }
- }
-}";
-
- VisualStudio.SolutionExplorer.OpenFile(new ProjectUtils.Project(ProjectName), "Class1.cs");
-
- MarkupTestFile.GetSpans(markup, out var expectedTextFourSpaceIndent, out ImmutableArray _);
- SetUpEditor(markup);
-
- /*
- * The first portion of this test verifies that Format Document uses the default indentation settings when
- * no .editorconfig is available.
- */
-
- VisualStudio.Workspace.WaitForAllAsyncOperations(
- Helper.HangMitigatingTimeout,
- FeatureAttribute.Workspace,
- FeatureAttribute.SolutionCrawlerLegacy,
- FeatureAttribute.DiagnosticService,
- FeatureAttribute.ErrorSquiggles);
- VisualStudio.Editor.FormatDocumentViaCommand();
-
- Assert.Equal(expectedTextFourSpaceIndent, VisualStudio.Editor.GetText());
-
- /*
- * The second portion of this test adds a .editorconfig file to configure the indentation behavior, and
- * verifies that the next Format Document operation adheres to the formatting.
- */
-
- var editorConfig = @"root = true
-
-[*.cs]
-indent_size = 2
-";
-
- VisualStudio.SolutionExplorer.AddFile(new ProjectUtils.Project(ProjectName), ".editorconfig", editorConfig, open: false);
-
- VisualStudio.Workspace.WaitForAllAsyncOperations(
- Helper.HangMitigatingTimeout,
- FeatureAttribute.Workspace,
- FeatureAttribute.SolutionCrawlerLegacy,
- FeatureAttribute.DiagnosticService,
- FeatureAttribute.ErrorSquiggles);
- VisualStudio.Editor.FormatDocumentViaCommand();
-
- Assert.Equal(expectedTextTwoSpaceIndent, VisualStudio.Editor.GetText());
-
- /*
- * The third portion of this test modifies the existing .editorconfig file with a new indentation behavior,
- * and verifies that the next Format Document operation adheres to the updated formatting.
- */
-
- VisualStudio.SolutionExplorer.SetFileContents(new ProjectUtils.Project(ProjectName), ".editorconfig", editorConfig.Replace("2", "4"));
-
- VisualStudio.Workspace.WaitForAllAsyncOperations(
- Helper.HangMitigatingTimeout,
- FeatureAttribute.Workspace,
- FeatureAttribute.SolutionCrawlerLegacy,
- FeatureAttribute.DiagnosticService,
- FeatureAttribute.ErrorSquiggles);
- VisualStudio.Editor.FormatDocumentViaCommand();
-
- Assert.Equal(expectedTextFourSpaceIndent, VisualStudio.Editor.GetText());
- }
- }
-}
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpRename.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpRename.cs
deleted file mode 100644
index 709a6e5d76225..0000000000000
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/CSharp/CSharpRename.cs
+++ /dev/null
@@ -1,628 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#nullable disable
-
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using EnvDTE;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Shared.TestHooks;
-using Microsoft.CodeAnalysis.Test.Utilities;
-using Microsoft.CodeAnalysis.Text;
-using Microsoft.VisualStudio.IntegrationTest.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.OutOfProcess;
-using Roslyn.Test.Utilities;
-using Xunit;
-using Xunit.Abstractions;
-using ProjectUtils = Microsoft.VisualStudio.IntegrationTest.Utilities.Common.ProjectUtils;
-
-namespace Roslyn.VisualStudio.IntegrationTests.CSharp
-{
- [Collection(nameof(SharedIntegrationHostFixture))]
- [Trait(Traits.Feature, Traits.Features.Rename)]
- public class CSharpRename : AbstractEditorTest
- {
- protected override string LanguageName => LanguageNames.CSharp;
-
- private InlineRenameDialog_OutOfProc InlineRenameDialog => VisualStudio.InlineRenameDialog;
-
- public CSharpRename(VisualStudioInstanceFactory instanceFactory)
- : base(instanceFactory, nameof(CSharpRename))
- {
- }
-
- public override async Task InitializeAsync()
- {
- await base.InitializeAsync();
-
- // reset relevant global options to default values:
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameInComments, language: null, value: false);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameInStrings, language: null, value: false);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameOverloads, language: null, value: false);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameFile, language: null, value: true);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_PreviewChanges, language: null, value: false);
- }
-
- [WpfFact(Skip = "https://github.com/dotnet/roslyn/issues/67245")]
- public void VerifyLocalVariableRename()
- {
- var markup = @"
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-class Program
-{
- static void Main(string[] args)
- {
- int [|x|]$$ = 0;
- [|x|] = 5;
- TestMethod([|x|]);
- }
-
- static void TestMethod(int y)
- {
-
- }
-}";
- using (var telemetry = VisualStudio.EnableTestTelemetryChannel())
- {
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-class Program
-{
- static void Main(string[] args)
- {
- int y = 0;
- y = 5;
- TestMethod(y);
- }
-
- static void TestMethod(int y)
- {
-
- }
-}");
- telemetry.VerifyFired("vs/ide/vbcs/rename/inlinesession/session", "vs/ide/vbcs/rename/commitcore");
- }
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRename()
- {
- var markup = @"
-using System;
-
-class [|$$ustom|]Attribute : Attribute
-{
-}
-";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys("Custom", VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-
-class CustomAttribute : Attribute
-{
-}");
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRenameWhileRenameClasss()
- {
- var markup = @"
-using System;
-
-class [|$$stom|]Attribute : Attribute
-{
-}
-";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys("Custom");
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-
-class Custom$$Attribute : Attribute
-{
-}
-", true);
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRenameWhileRenameAttribute()
- {
- var markup = @"
-using System;
-
-[[|$$stom|]]
-class Bar
-{
-}
-
-class stomAttribute : Attribute
-{
-}
-";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out _, out ImmutableArray _);
- _ = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
-
- VisualStudio.Editor.SendKeys("Custom");
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-
-[Custom$$]
-class Bar
-{
-}
-
-class CustomAttribute : Attribute
-{
-}
-", true);
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRenameWhileRenameAttributeClass()
- {
- var markup = @"
-using System;
-
-[stom]
-class Bar
-{
-}
-
-class [|$$stom|]Attribute : Attribute
-{
-}
-";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out _, out ImmutableArray _);
- _ = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
-
- VisualStudio.Editor.SendKeys("Custom");
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-
-[Custom]
-class Bar
-{
-}
-
-class Custom$$Attribute : Attribute
-{
-}
-", true);
- }
-
- [WpfFact]
- public void VerifyLocalVariableRenameWithCommentsUpdated()
- {
- // "variable" is intentionally misspelled as "varixable" and "this" is misspelled as
- // "thix" below to ensure we don't change instances of "x" in comments that are part of
- // larger words
- var markup = @"
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-class Program
-{
- ///
- /// creates a varixable named [|x|] xx
- ///
- ///
- static void Main(string[] args)
- {
- // thix varixable is named [|x|] xx
- int [|x|]$$ = 0;
- [|x|] = 5;
- TestMethod([|x|]);
- }
-
- static void TestMethod(int y)
- {
- /*
- * [|x|]
- * xx
- */
- }
-}";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
- InlineRenameDialog.ToggleIncludeComments();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-class Program
-{
- ///
- /// creates a varixable named y xx
- ///
- ///
- static void Main(string[] args)
- {
- // thix varixable is named y xx
- int y = 0;
- y = 5;
- TestMethod(y);
- }
-
- static void TestMethod(int y)
- {
- /*
- * y
- * xx
- */
- }
-}");
- }
-
- [WpfFact]
- public void VerifyLocalVariableRenameWithStringsUpdated()
- {
- var markup = @"
-class Program
-{
- static void Main(string[] args)
- {
- int [|x|]$$ = 0;
- [|x|] = 5;
- var s = ""[|x|] xx [|x|]"";
- var sLiteral =
- @""
- [|x|]
- xx
- [|x|]
- "";
- char c = 'x';
- char cUnit = '\u0078';
- }
-}";
- SetUpEditor(markup);
-
- InlineRenameDialog.Invoke();
- InlineRenameDialog.ToggleIncludeStrings();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-class Program
-{
- static void Main(string[] args)
- {
- int y = 0;
- y = 5;
- var s = ""y xx y"";
- var sLiteral =
- @""
- y
- xx
- y
- "";
- char c = 'x';
- char cUnit = '\u0078';
- }
-}");
- }
-
- [WpfFact]
- public void VerifyOverloadsUpdated()
- {
- var markup = @"
-interface I
-{
- void [|TestMethod|]$$(int y);
- void [|TestMethod|](string y);
-}
-
-class B : I
-{
- public virtual void [|TestMethod|](int y)
- { }
-
- public virtual void [|TestMethod|](string y)
- { }
-}";
- SetUpEditor(markup);
-
- InlineRenameDialog.Invoke();
- InlineRenameDialog.ToggleIncludeOverloads();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-interface I
-{
- void y(int y);
- void y(string y);
-}
-
-class B : I
-{
- public virtual void y(int y)
- { }
-
- public virtual void y(string y)
- { }
-}");
- }
-
- [WpfFact]
- public void VerifyMultiFileRename()
- {
- SetUpEditor(@"
-class $$Program
-{
-}");
- var project = new ProjectUtils.Project(ProjectName);
- VisualStudio.SolutionExplorer.AddFile(project, "Class2.cs", @"");
- VisualStudio.SolutionExplorer.OpenFile(project, "Class2.cs");
-
- const string class2Markup = @"
-class SomeOtherClass
-{
- void M()
- {
- [|Program|] p = new [|Program|]();
- }
-}";
- MarkupTestFile.GetSpans(class2Markup, out var code, out ImmutableArray renameSpans);
-
- VisualStudio.Editor.SetText(code);
- VisualStudio.Editor.PlaceCaret("Program");
-
- InlineRenameDialog.Invoke();
-
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-class SomeOtherClass
-{
- void M()
- {
- y p = new y();
- }
-}");
-
- VisualStudio.SolutionExplorer.OpenFile(project, "Class1.cs");
- VisualStudio.Editor.Verify.TextContains(@"
-class y
-{
-}");
- }
-
- [WpfFact]
- public void VerifyRenameCancellation()
- {
- SetUpEditor(@"
-class $$Program
-{
-}");
-
- var project = new ProjectUtils.Project(ProjectName);
- VisualStudio.SolutionExplorer.AddFile(project, "Class2.cs", @"");
- VisualStudio.SolutionExplorer.OpenFile(project, "Class2.cs");
- VisualStudio.Editor.SetText(@"
-class SomeOtherClass
-{
- void M()
- {
- Program p = new Program();
- }
-}");
- VisualStudio.Editor.PlaceCaret("Program");
-
- InlineRenameDialog.Invoke();
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y);
- VisualStudio.Editor.Verify.TextContains(@"class SomeOtherClass
-{
- void M()
- {
- y p = new y();
- }
-}");
-
- VisualStudio.SolutionExplorer.OpenFile(project, "Class1.cs");
- VisualStudio.Editor.Verify.TextContains(@"
-class y
-{
-}");
-
- VisualStudio.Editor.SendKeys(VirtualKey.Escape);
- VisualStudio.Workspace.WaitForAsyncOperations(Helper.HangMitigatingTimeout, FeatureAttribute.Rename);
-
- VisualStudio.Editor.Verify.TextContains(@"
-class Program
-{
-}");
-
- VisualStudio.SolutionExplorer.OpenFile(project, "Class2.cs");
- VisualStudio.Editor.Verify.TextContains(@"
-class SomeOtherClass
-{
- void M()
- {
- Program p = new Program();
- }
-}");
- }
-
- [WpfFact]
- public void VerifyCrossProjectRename()
- {
- SetUpEditor(@"
-$$class RenameRocks
-{
- static void Main(string[] args)
- {
- Class2 c = null;
- c.ToString();
- }
-}");
- var project1 = new ProjectUtils.Project(ProjectName);
- var project2 = new ProjectUtils.Project("Project2");
-
- VisualStudio.SolutionExplorer.AddProject(project2, WellKnownProjectTemplates.ClassLibrary, LanguageName);
- VisualStudio.SolutionExplorer.AddProjectReference(fromProjectName: project1, toProjectName: new ProjectUtils.ProjectReference("Project2"));
-
- VisualStudio.SolutionExplorer.AddFile(project2, "Class2.cs", @"");
- VisualStudio.SolutionExplorer.OpenFile(project2, "Class2.cs");
-
- VisualStudio.Editor.SetText(@"
-public class Class2 { static void Main(string [] args) { } }");
-
- VisualStudio.SolutionExplorer.OpenFile(project1, "Class1.cs");
- VisualStudio.Editor.PlaceCaret("Class2");
-
- InlineRenameDialog.Invoke();
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
-
- VisualStudio.Editor.Verify.TextContains(@"
-class RenameRocks
-{
- static void Main(string[] args)
- {
- y c = null;
- c.ToString();
- }
-}");
-
- VisualStudio.SolutionExplorer.OpenFile(project2, "y.cs");
- VisualStudio.Editor.Verify.TextContains(@"
-public class y { static void Main(string [] args) { } }");
- }
-
- [WpfFact]
- public void VerifyRenameUndo()
- {
- VerifyCrossProjectRename();
-
- VisualStudio.Editor.SendKeys(Ctrl(VirtualKey.Z));
-
- VisualStudio.Editor.Verify.TextContains(@"
-public class Class2 { static void Main(string [] args) { } }");
-
- VisualStudio.SolutionExplorer.OpenFile(new ProjectUtils.Project(ProjectName), "Class1.cs");
- VisualStudio.Editor.Verify.TextContains(@"
-class RenameRocks
-{
- static void Main(string[] args)
- {
- Class2 c = null;
- c.ToString();
- }
-}");
- }
-
- [WpfFact]
- public void VerifyRenameInStandaloneFiles()
- {
- VisualStudio.SolutionExplorer.CloseSolution();
- VisualStudio.SolutionExplorer.AddStandaloneFile("StandaloneFile1.cs");
- VisualStudio.Editor.SetText(@"
-class Program
-{
- void Goo()
- {
- var ids = 1;
- ids = 2;
- }
-}");
- VisualStudio.Editor.PlaceCaret("ids");
-
- InlineRenameDialog.Invoke();
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
-
- VisualStudio.Editor.Verify.TextContains(@"
-class Program
-{
- void Goo()
- {
- var y = 1;
- y = 2;
- }
-}");
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/39617")]
- public void VerifyRenameCaseChange()
- {
- var project = new ProjectUtils.Project(ProjectName);
- VisualStudio.SolutionExplorer.AddFile(project, "Program.cs",
-@"
-class Program
-{
- static void Main(string[] args)
- {
- }
-}");
-
- VisualStudio.SolutionExplorer.OpenFile(project, "Program.cs");
- VisualStudio.Editor.PlaceCaret("Program");
-
- InlineRenameDialog.Invoke();
-
- VisualStudio.Editor.SendKeys(VirtualKey.Home, VirtualKey.Delete, VirtualKey.P, VirtualKey.Enter);
-
- AssertEx.EqualOrDiff(
- @"
-class program
-{
- static void Main(string[] args)
- {
- }
-}",
- VisualStudio.SolutionExplorer.GetFileContents(project, "program.cs"));
- }
- }
-}
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicAutomaticBraceCompletion.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicAutomaticBraceCompletion.cs
deleted file mode 100644
index 39f08788ba3ee..0000000000000
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicAutomaticBraceCompletion.cs
+++ /dev/null
@@ -1,384 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#nullable disable
-
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Shared.TestHooks;
-using Microsoft.CodeAnalysis.Test.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
-using Roslyn.Test.Utilities;
-using Xunit;
-
-namespace Roslyn.VisualStudio.IntegrationTests.VisualBasic
-{
- [Collection(nameof(SharedIntegrationHostFixture))]
- [Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
- public class BasicAutomaticBraceCompletion : AbstractEditorTest
- {
- protected override string LanguageName => LanguageNames.VisualBasic;
-
- public BasicAutomaticBraceCompletion(VisualStudioInstanceFactory instanceFactory)
- : base(instanceFactory, nameof(BasicAutomaticBraceCompletion))
- {
- }
-
- [WpfTheory, CombinatorialData]
- public void Braces_InsertionAndTabCompleting(bool argumentCompletion)
- {
- VisualStudio.Workspace.SetArgumentCompletionSnippetsOption(argumentCompletion);
-
- // Disable new rename UI for now, it's causing these tests to fail.
- // https://github.com/dotnet/roslyn/issues/63576
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_UseNewUI, language: null, false);
-
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim x = {");
- VisualStudio.Editor.Verify.CurrentLineText("Dim x = {$$}", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(
- "New Object",
- VirtualKey.Escape,
- VirtualKey.Tab);
-
- if (argumentCompletion)
- {
- VisualStudio.Editor.Verify.CurrentLineText("Dim x = {New Object($$)}", assertCaretPosition: true);
- VisualStudio.Workspace.WaitForAllAsyncOperations(Helper.HangMitigatingTimeout, FeatureAttribute.SignatureHelp);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("Dim x = {New Object()$$}", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("Dim x = {New Object()}$$", assertCaretPosition: true);
- }
- else
- {
- VisualStudio.Editor.Verify.CurrentLineText("Dim x = {New Object}$$", assertCaretPosition: true);
- }
- }
-
- [WpfFact]
- public void Braces_Overtyping()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim x = {");
- VisualStudio.Editor.SendKeys('}');
- VisualStudio.Editor.Verify.CurrentLineText("Dim x = {}$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void ParenthesesTypeoverAfterStringLiterals()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Console.Write(");
- VisualStudio.Editor.Verify.CurrentLineText("Console.Write($$)", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys('"');
- VisualStudio.Editor.Verify.CurrentLineText("Console.Write(\"$$\")", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys('"');
- VisualStudio.Editor.Verify.CurrentLineText("Console.Write(\"\"$$)", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(')');
- VisualStudio.Editor.Verify.CurrentLineText("Console.Write(\"\")$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Braces_OnReturnNoFormattingOnlyIndentationBeforeCloseBrace()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim x = {");
- VisualStudio.Editor.SendKeys(VirtualKey.Enter);
- VisualStudio.Editor.Verify.CurrentLineText(" $$}", assertCaretPosition: true, trimWhitespace: false);
- VisualStudio.Editor.Verify.TextContains(@"
-Class C
- Sub Goo()
- Dim x = {
- $$}
- End Sub
-End Class",
-assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Paren_InsertionAndTabCompleting()
- {
- SetUpEditor(@"
-Class C
- $$
-End Class");
-
- VisualStudio.Editor.SendKeys("Sub Goo(");
- VisualStudio.Editor.Verify.CurrentLineText("Sub Goo($$)", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys("x As Long");
- VisualStudio.Editor.SendKeys(VirtualKey.Escape);
- VisualStudio.Editor.SendKeys(VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("Sub Goo(x As Long)$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Paren_Overtyping()
- {
- SetUpEditor(@"
-Class C
- $$
-End Class");
-
- VisualStudio.Editor.SendKeys("Sub Goo(");
- VisualStudio.Editor.Verify.CurrentLineText("Sub Goo($$)", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Escape);
- VisualStudio.Editor.SendKeys(')');
- VisualStudio.Editor.Verify.CurrentLineText("Sub Goo()$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Bracket_Insertion()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim [Dim");
- VisualStudio.Editor.Verify.CurrentLineText("Dim [Dim$$]", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Bracket_Overtyping()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim [Dim");
- VisualStudio.Editor.Verify.CurrentLineText("Dim [Dim$$]", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys("] As Long");
- VisualStudio.Editor.Verify.CurrentLineText("Dim [Dim] As Long$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void DoubleQuote_InsertionAndTabCompletion()
- {
- // Disable new rename UI for now, it's causing these tests to fail.
- // https://github.com/dotnet/roslyn/issues/63576
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_UseNewUI, language: null, false);
-
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim str = \"");
- VisualStudio.Editor.Verify.CurrentLineText("Dim str = \"$$\"", assertCaretPosition: true);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Tab);
- VisualStudio.Editor.Verify.CurrentLineText("Dim str = \"\"$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Nested_AllKinds_1()
- {
- SetUpEditor(@"
-Class C
- Sub New([dim] As String)
- End Sub
-
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys(
- "Dim y = {New C([dim",
- VirtualKey.Escape,
- "]:=\"hello({[\")}",
- VirtualKey.Enter);
- var actualText = VisualStudio.Editor.GetText();
- Assert.Contains("Dim y = {New C([dim]:=\"hello({[\")}", actualText);
- }
-
- [WpfFact]
- public void Nested_AllKinds_2()
- {
- SetUpEditor(@"
-Class C
- Sub New([dim] As String)
- End Sub
-
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys(
- "Dim y = {New C([dim",
- VirtualKey.Escape,
- VirtualKey.Tab,
- ":=\"hello({[",
- VirtualKey.Tab,
- VirtualKey.Tab,
- VirtualKey.Tab,
- VirtualKey.Enter);
- var actualText = VisualStudio.Editor.GetText();
- Assert.Contains("Dim y = {New C([dim]:=\"hello({[\")}", actualText);
- }
-
- [WpfFact]
- public void Negative_NoCompletionInComments()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- ' $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("{([\"");
- VisualStudio.Editor.Verify.CurrentLineText("' {([\"$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Negative_NoCompletionInStringLiterals()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim s = \"{([");
- VisualStudio.Editor.Verify.CurrentLineText("Dim s = \"{([$$\"", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Negative_NoCompletionInXmlDocComment()
- {
- SetUpEditor(@"
-$$
-Class C
-End Class");
-
- VisualStudio.Editor.SendKeys("'''");
- VisualStudio.Editor.SendKeys('{');
- VisualStudio.Editor.SendKeys('(');
- VisualStudio.Editor.SendKeys('[');
- VisualStudio.Editor.SendKeys('"');
- VisualStudio.Editor.Verify.CurrentLineText("''' {([\"$$", assertCaretPosition: true);
- }
-
- [WpfFact]
- public void Negative_NoCompletionInXmlDocCommentAtEndOfTag()
- {
- SetUpEditor(@"
-Class C
- '''
- ''' $$
- '''
- Sub Goo()
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("(");
- VisualStudio.Editor.Verify.CurrentLineText("''' ($$", assertCaretPosition: true);
- }
-
- [WorkItem(652015, "DevDiv")]
- [WpfFact]
- public void LineCommittingIssue()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Dim x=\"\" '");
- VisualStudio.Editor.Verify.CurrentLineText("Dim x=\"\" '$$", assertCaretPosition: true);
- }
-
- [WorkItem(653399, "DevDiv")]
- [WpfFact]
- public void VirtualWhitespaceIssue()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()$$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys(VirtualKey.Enter);
- VisualStudio.Editor.SendKeys('(');
- VisualStudio.Editor.SendKeys(VirtualKey.Backspace);
-
- VisualStudio.Editor.Verify.CurrentLineText(" $$", assertCaretPosition: true, trimWhitespace: false);
- }
-
- [WorkItem(659684, "DevDiv")]
- [WpfFact]
- public void CompletionWithIntelliSenseWindowUp()
- {
- SetUpEditor(@"
-Class C
- Sub Goo()
- End Sub
- Sub Test()
- $$
- End Sub
-End Class");
-
- VisualStudio.Editor.SendKeys("Goo(");
- VisualStudio.Editor.Verify.CurrentLineText("Goo($$)", assertCaretPosition: true);
- }
-
- [WorkItem(657451, "DevDiv")]
- [WpfFact]
- public void CompletionAtTheEndOfFile()
- {
- SetUpEditor(@"
-Class C
- $$");
-
- VisualStudio.Editor.SendKeys("Sub Goo(");
- VisualStudio.Editor.Verify.CurrentLineText("Sub Goo($$)", assertCaretPosition: true);
- }
- }
-}
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicExtractMethod.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicExtractMethod.cs
index 1cb39192cf1af..b21c59a579e2b 100644
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicExtractMethod.cs
+++ b/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicExtractMethod.cs
@@ -9,6 +9,7 @@
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
+using Microsoft.VisualStudio.IntegrationTest.Utilities.OutOfProcess;
using Roslyn.Test.Utilities;
using Xunit;
using Xunit.Abstractions;
@@ -80,7 +81,7 @@ End Function
MarkupTestFile.GetSpans(expectedMarkup, out var expectedText, out ImmutableArray spans);
VisualStudio.Editor.Verify.TextContains(expectedText);
- AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(VisualStudio.InlineRenameDialog.ValidRenameTag));
+ AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(InlineRenameDialog_OutOfProc.ValidRenameTag));
VisualStudio.Editor.SendKeys("SayHello", VirtualKey.Enter);
VisualStudio.Editor.Verify.TextContains(@" Private Sub SayHello()
@@ -123,7 +124,7 @@ End Sub
MarkupTestFile.GetSpans(expectedMarkup, out var expectedText, out ImmutableArray spans);
Assert.Equal(expectedText, VisualStudio.Editor.GetText());
- AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(VisualStudio.InlineRenameDialog.ValidRenameTag));
+ AssertEx.SetEqual(spans, VisualStudio.Editor.GetTagSpans(InlineRenameDialog_OutOfProc.ValidRenameTag));
}
}
}
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicFormatting.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicFormatting.cs
deleted file mode 100644
index 4bd7d257d9d9a..0000000000000
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicFormatting.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Text;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Shared.TestHooks;
-using Microsoft.CodeAnalysis.Test.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
-using Roslyn.Test.Utilities;
-using Xunit;
-using Xunit.Abstractions;
-
-namespace Roslyn.VisualStudio.IntegrationTests.VisualBasic
-{
- [Collection(nameof(SharedIntegrationHostFixture))]
- [Trait(Traits.Feature, Traits.Features.Formatting)]
- public class BasicFormatting : AbstractEditorTest
- {
- protected override string LanguageName => LanguageNames.VisualBasic;
-
- public BasicFormatting(VisualStudioInstanceFactory instanceFactory)
- : base(instanceFactory, nameof(BasicFormatting))
- {
- }
-
- [WpfFact]
- public void VerifyFormattingIndent()
- {
- var testCode = new StringBuilder()
- .AppendLine("$$Module A")
- .AppendLine(" Sub Main(args As String())")
- .AppendLine(" ")
- .AppendLine(" End Sub")
- .AppendLine("End Module")
- .ToString();
-
- SetUpEditor(testCode);
-
- VisualStudio.Editor.FormatDocument();
- VisualStudio.Editor.Verify.TextContains(
-@"Module A
- Sub Main(args As String())
-
- End Sub
-End Module");
- }
-
- [WpfFact]
- public void VerifyCaseCorrection()
- {
- SetUpEditor(@"
-$$module A
-end module");
- VisualStudio.Editor.FormatDocument();
- VisualStudio.Editor.Verify.TextContains(@"
-Module A
-End Module");
- }
-
- [WpfFact(Skip = "https://github.com/dotnet/roslyn/issues/18065")]
- public void ShiftEnterWithIntelliSenseAndBraceMatching()
- {
- SetUpEditor(@"
-Module Program
- Function Main(ooo As Object) As Object
- Return Main$$
- End Function
-End Module");
- VisualStudio.Workspace.WaitForAsyncOperations(Helper.HangMitigatingTimeout, FeatureAttribute.Workspace);
- VisualStudio.Editor.SendKeys("(o", new KeyPress(VirtualKey.Enter, ShiftState.Shift), "'comment");
- VisualStudio.Editor.Verify.TextContains(@"
-Module Program
- Function Main(ooo As Object) As Object
- Return Main(ooo)
- 'comment
- End Function
-End Module");
- }
- }
-}
diff --git a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicRename.cs b/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicRename.cs
deleted file mode 100644
index 94f063fbd7944..0000000000000
--- a/src/VisualStudio/IntegrationTest/IntegrationTests/VisualBasic/BasicRename.cs
+++ /dev/null
@@ -1,376 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Test.Utilities;
-using Microsoft.CodeAnalysis.Text;
-using Microsoft.VisualStudio.IntegrationTest.Utilities;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
-using Microsoft.VisualStudio.IntegrationTest.Utilities.OutOfProcess;
-using Roslyn.Test.Utilities;
-using Xunit;
-
-namespace Roslyn.VisualStudio.IntegrationTests.VisualBasic
-{
- [Collection(nameof(SharedIntegrationHostFixture))]
- [Trait(Traits.Feature, Traits.Features.Rename)]
- public class BasicRename : AbstractEditorTest
- {
- protected override string LanguageName => LanguageNames.VisualBasic;
-
- private InlineRenameDialog_OutOfProc InlineRenameDialog => VisualStudio.InlineRenameDialog;
-
- public BasicRename(VisualStudioInstanceFactory instanceFactory)
- : base(instanceFactory, nameof(BasicRename))
- {
- }
-
- public override async Task InitializeAsync()
- {
- await base.InitializeAsync();
-
- // reset relevant global options to default values:
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameInComments, language: null, value: false);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameInStrings, language: null, value: false);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameOverloads, language: null, value: false);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_RenameFile, language: null, value: true);
- VisualStudio.Workspace.SetGlobalOption(WellKnownGlobalOption.InlineRenameSessionOptions_PreviewChanges, language: null, value: false);
- }
-
- [WpfFact]
- public void VerifyLocalVariableRename()
- {
- var markup = @"
-Imports System
-Imports System.Collections.Generic
-Imports System.Linq
-
-Module Program
- Sub Main(args As String())
- Dim [|x|]$$ As Integer = 0
- [|x|] = 5
- TestMethod([|x|])
- End Sub
- Sub TestMethod(y As Integer)
-
- End Sub
-End Module";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-Imports System
-Imports System.Collections.Generic
-Imports System.Linq
-
-Module Program
- Sub Main(args As String())
- Dim y As Integer = 0
- y = 5
- TestMethod(y)
- End Sub
- Sub TestMethod(y As Integer)
-
- End Sub
-End Module");
- }
-
- [WpfFact]
- public void VerifyLocalVariableRenameWithCommentsUpdated()
- {
- // "variable" is intentionally misspelled as "varixable" and "this" is misspelled as
- // "thix" below to ensure we don't change instances of "x" in comments that are part of
- // larger words
- var markup = @"
-Imports System
-Imports System.Collections.Generic
-Imports System.Linq
-
-Module Program
- '''
- ''' creates a varixable named [|x|] xx
- '''
- '''
- Sub Main(args As String())
- ' thix varixable is named [|x|] xx
- Dim [|x|]$$ As Integer = 0
- [|x|] = 5
- TestMethod([|x|])
-End Module";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
- InlineRenameDialog.ToggleIncludeComments();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-Imports System
-Imports System.Collections.Generic
-Imports System.Linq
-
-Module Program
- '''
- ''' creates a varixable named y xx
- '''
- '''
- Sub Main(args As String())
- ' thix varixable is named y xx
- Dim y As Integer = 0
- y = 5
- TestMethod(y)
-End Module");
- }
-
- [WpfFact]
- public void VerifyLocalVariableRenameWithStringsUpdated()
- {
- var markup = @"
-Imports System
-Imports System.Collections.Generic
-Imports System.Linq
-
-Module Program
- Sub Main(args As String())
- Dim [|x|]$$ As Integer = 0
- [|x|] = 5
- Dim s = ""[|x|] xx [|x|]""
- End Sub
-End Module";
- SetUpEditor(markup);
-
- InlineRenameDialog.Invoke();
- InlineRenameDialog.ToggleIncludeStrings();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-Imports System
-Imports System.Collections.Generic
-Imports System.Linq
-
-Module Program
- Sub Main(args As String())
- Dim y As Integer = 0
- y = 5
- Dim s = ""y xx y""
- End Sub
-End Module");
- }
-
- [WpfFact]
- public void VerifyOverloadsUpdated()
- {
- var markup = @"
-Interface I
- Sub [|TestMethod|]$$(y As Integer)
- Sub [|TestMethod|](y As String)
-End Interface
-
-Public MustInherit Class A
- Implements I
- Public MustOverride Sub [|TestMethod|](y As Integer) Implements I.[|TestMethod|]
- Public MustOverride Sub [|TestMethod|](y As String) Implements I.[|TestMethod|]
-End Class";
- SetUpEditor(markup);
-
- InlineRenameDialog.Invoke();
- InlineRenameDialog.ToggleIncludeOverloads();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys(VirtualKey.Y, VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-Interface I
- Sub y(y As Integer)
- Sub y(y As String)
-End Interface
-
-Public MustInherit Class A
- Implements I
- Public MustOverride Sub y(y As Integer) Implements I.y
- Public MustOverride Sub y(y As String) Implements I.y
-End Class");
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRename()
- {
- var markup = @"
-Import System;
-
-Public Class [|$$ustom|]Attribute
- Inherits Attribute
-End Class";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys("Custom", VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-Import System;
-
-Public Class CustomAttribute
- Inherits Attribute
-End Class");
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRenameWhileRenameClasss()
- {
- var markup = @"
-Import System;
-
-Public Class [|$$ustom|]Attribute
- Inherits Attribute
-End Class";
-
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys("Custom");
- VisualStudio.Editor.Verify.TextContains(@"
-Import System;
-
-Public Class Custom$$Attribute
- Inherits Attribute
-End Class", true);
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRenameWhileRenameAttribute()
- {
- var markup = @"
-Import System;
-
-<[|$$ustom|]>
-Class Bar
-End Class
-
-Public Class ustomAttribute
- Inherits Attribute
-End Class";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out _, out ImmutableArray _);
- _ = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
-
- VisualStudio.Editor.SendKeys("Custom");
- VisualStudio.Editor.Verify.TextContains(@"
-Import System;
-
-
-Class Bar
-End Class
-
-Public Class CustomAttribute
- Inherits Attribute
-End Class", true);
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeRenameWhileRenameAttributeClass()
- {
- var markup = @"
-Import System;
-
-
-Class Bar
-End Class
-
-Public Class [|$$ustom|]Attribute
- Inherits Attribute
-End Class";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out _, out ImmutableArray _);
- _ = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
-
- VisualStudio.Editor.SendKeys("Custom");
- VisualStudio.Editor.Verify.TextContains(@"
-Import System;
-
-
-Class Bar
-End Class
-
-Public Class Custom$$Attribute
- Inherits Attribute
-End Class", true);
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeCapitalizedRename()
- {
- var markup = @"
-Import System;
-
-Public Class [|$$ustom|]ATTRIBUTE
- Inherits Attribute
-End Class";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys("Custom", VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-Import System;
-
-Public Class CustomAttribute
- Inherits Attribute
-End Class");
- }
-
- [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
- public void VerifyAttributeNotCapitalizedRename()
- {
- var markup = @"
-Import System;
-
-Public Class [|$$ustom|]attribute
- Inherits Attribute
-End Class";
- SetUpEditor(markup);
- InlineRenameDialog.Invoke();
-
- MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
- var tags = VisualStudio.Editor.GetTagSpans(InlineRenameDialog.ValidRenameTag);
- AssertEx.SetEqual(renameSpans, tags);
-
- VisualStudio.Editor.SendKeys("Custom", VirtualKey.Enter);
- VisualStudio.Editor.Verify.TextContains(@"
-Import System;
-
-Public Class CustomAttribute
- Inherits Attribute
-End Class");
- }
- }
-}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpAddMissingUsingsOnPaste.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpAddMissingUsingsOnPaste.cs
index b5c807ddc8b24..ec0fea0edcd4e 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpAddMissingUsingsOnPaste.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpAddMissingUsingsOnPaste.cs
@@ -53,7 +53,7 @@ static void Main(string[] args)
var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
globalOptions.SetGlobalOption(AddImportOnPasteOptionsStorage.AddImportsOnPaste, LanguageNames.CSharp, false);
- await PasteAsync(@"Task DoThingAsync() => Task.CompletedTask;", HangMitigatingCancellationToken);
+ await TestServices.Editor.PasteAsync(@"Task DoThingAsync() => Task.CompletedTask;", HangMitigatingCancellationToken);
AssertEx.EqualOrDiff(@"
using System;
@@ -101,7 +101,7 @@ static void Main(string[] args)
var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
globalOptions.SetGlobalOption(AddImportOnPasteOptionsStorage.AddImportsOnPaste, LanguageNames.CSharp, true);
- await PasteAsync(@"Task DoThingAsync() => Task.CompletedTask;", HangMitigatingCancellationToken);
+ await TestServices.Editor.PasteAsync(@"Task DoThingAsync() => Task.CompletedTask;", HangMitigatingCancellationToken);
AssertEx.EqualOrDiff(
@"
@@ -148,7 +148,7 @@ static void Main(string[] args)
var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
globalOptions.SetGlobalOption(AddImportOnPasteOptionsStorage.AddImportsOnPaste, LanguageNames.CSharp, true);
- await PasteAsync(@"Task DoThingAsync() => Task.CompletedTask;", HangMitigatingCancellationToken);
+ await TestServices.Editor.PasteAsync(@"Task DoThingAsync() => Task.CompletedTask;", HangMitigatingCancellationToken);
AssertEx.EqualOrDiff(@"
namespace MyNs
@@ -166,17 +166,5 @@ static void Main(string[] args)
}
}", await TestServices.Editor.GetTextAsync(HangMitigatingCancellationToken));
}
-
- private async Task PasteAsync(string text, CancellationToken cancellationToken)
- {
- var provider = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
- var waiter = (IAsynchronousOperationWaiter)provider.GetListener(FeatureAttribute.AddImportsOnPaste);
-
- await TestServices.Workspace.WaitForAllAsyncOperationsAsync(new[] { FeatureAttribute.Workspace, FeatureAttribute.SolutionCrawlerLegacy }, cancellationToken);
- Clipboard.SetText(text);
- await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd97CmdID.Paste, cancellationToken);
-
- await waiter.ExpeditedWaitAsync();
- }
}
}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpAutomaticBraceCompletion.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpAutomaticBraceCompletion.cs
new file mode 100644
index 0000000000000..706227deb25bd
--- /dev/null
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpAutomaticBraceCompletion.cs
@@ -0,0 +1,852 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Editor.InlineRename;
+using Microsoft.CodeAnalysis.Options;
+using Microsoft.CodeAnalysis.Test.Utilities;
+using Microsoft.VisualStudio;
+using Roslyn.Test.Utilities;
+using Roslyn.VisualStudio.IntegrationTests;
+using Roslyn.VisualStudio.IntegrationTests.InProcess;
+using WindowsInput.Native;
+using Xunit;
+
+namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
+{
+ [Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
+ public class CSharpAutomaticBraceCompletion : AbstractEditorTest
+ {
+ protected override string LanguageName => LanguageNames.CSharp;
+
+ public CSharpAutomaticBraceCompletion()
+ : base(nameof(CSharpAutomaticBraceCompletion))
+ {
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Braces_InsertionAndTabCompleting(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ void Goo() {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("if (true) {", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" if (true) { $$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" if (true) { }$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Braces_Overtyping(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ void Goo() {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("if (true) {", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" if (true) { $$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("}", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" if (true) { }$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ ///
+ /// This is a muscle-memory test for users who rely on the following sequence:
+ ///
+ /// - Enter
+ /// - {
+ /// - Enter
+ /// - }
+ ///
+ ///
+ [IdeFact]
+ public async Task Braces_Overtyping_Method()
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("public void A()", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.RETURN, '{', VirtualKeyCode.RETURN, '}' }, HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" }$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ ///
+ /// This is a muscle-memory test for users who rely on the following sequence:
+ ///
+ /// - Enter
+ /// - {
+ /// - Enter
+ /// - }
+ ///
+ ///
+ [IdeFact]
+ public async Task Braces_Overtyping_Property()
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("public int X", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.RETURN, '{', VirtualKeyCode.RETURN, '}' }, HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" }$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ ///
+ /// This is a muscle-memory test for users who rely on the following sequence:
+ ///
+ /// - Enter
+ /// - {
+ /// - Enter
+ /// - }
+ ///
+ ///
+ [IdeFact]
+ public async Task Braces_Overtyping_CollectionInitializer()
+ {
+ await SetUpEditorAsync(@"
+using System.Collections.Generic;
+class C {
+ void Method() {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("var x = new List()", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.RETURN, '{', VirtualKeyCode.RETURN, '}' }, HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" }$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ ///
+ /// This is a muscle-memory test for users who rely on the following sequence:
+ ///
+ /// - Enter
+ /// - {
+ /// - Enter
+ /// - }
+ ///
+ ///
+ [IdeFact]
+ public async Task Braces_Overtyping_ObjectInitializer()
+ {
+ await SetUpEditorAsync(@"
+class C {
+ void Method() {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("var x = new object()", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.RETURN, '{', VirtualKeyCode.RETURN, '}' }, HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" }$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Braces_OnReturnNoFormattingOnlyIndentationBeforeCloseBrace(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ void Goo() {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "if (true) {",
+ VirtualKeyCode.RETURN,
+ "var a = 1;",
+ },
+ HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+class C {
+ void Goo() {
+ if (true)
+ {
+ var a = 1;$$
+ }
+ }
+}",
+assertCaretPosition: true,
+HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Braces_OnReturnOvertypingTheClosingBrace(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ void Goo() {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "if (true) {",
+ VirtualKeyCode.RETURN,
+ "var a = 1;",
+ '}',
+ },
+ HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+class C {
+ void Goo() {
+ if (true)
+ {
+ var a = 1;
+ }$$
+ }
+}",
+assertCaretPosition: true,
+HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(653540, "DevDiv")]
+ [IdeTheory, CombinatorialData]
+ public async Task Braces_OnReturnWithNonWhitespaceSpanInside(bool showCompletionInArgumentLists)
+ {
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "class A { int i;",
+ VirtualKeyCode.RETURN,
+ },
+ HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.TextContainsAsync(@"class A { int i;
+$$}",
+assertCaretPosition: true,
+HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Paren_InsertionAndTabCompleting(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("void Goo(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" void Goo($$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "int x", VirtualKeyCode.TAB }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" void Goo(int x)$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Paren_Overtyping(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "void Goo(",
+ VirtualKeyCode.ESCAPE,
+ ")",
+ },
+ HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" void Goo()$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task SquareBracket_Insertion(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("int [", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" int[$$] ", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task SquareBracket_Overtyping(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "int [", ']' }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" int[]$$ ", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task DoubleQuote_InsertionAndTabCompletion(bool showCompletionInArgumentLists)
+
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "string str = \"", VirtualKeyCode.TAB }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" string str = \"\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task DoubleQuote_InsertionAndOvertyping(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "string str = \"Hi Roslyn!", '"' }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" string str = \"Hi Roslyn!\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task DoubleQuote_FixedInterpolatedVerbatimString(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C
+{
+ void M()
+ {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("var v = @$\"", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var v = $@\"$$\"", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ // Backspace removes quotes
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.BACK, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var v = $@$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ // Undo puts them back
+ await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd97CmdID.Undo, HangMitigatingCancellationToken);
+ // Incorrect assertion: https://github.com/dotnet/roslyn/issues/33672
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var v = $@\"\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ // First, the FixInterpolatedVerbatimString action is undone (@$ reordering)
+ await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd97CmdID.Undo, HangMitigatingCancellationToken);
+ // Incorrect assertion: https://github.com/dotnet/roslyn/issues/33672
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var v = @$\"\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ // Then the automatic quote completion is undone
+ await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd97CmdID.Undo, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var v = @$\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task AngleBracket_PossibleGenerics_InsertionAndCompletion(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ //field
+ $$
+}", HangMitigatingCancellationToken);
+
+ // Disable new rename UI for now, it's causing these tests to fail.
+ // https://github.com/dotnet/roslyn/issues/63576
+ var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
+ globalOptions.SetGlobalOption(InlineRenameUIOptionsStorage.UseInlineAdornment, false);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "System.Action<", VirtualKeyCode.TAB }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" System.Action<>$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await SetUpEditorAsync(@"
+class C {
+ //method decl
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "void GenericMethod<", VirtualKeyCode.TAB }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" void GenericMethod<>$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await SetUpEditorAsync(@"
+class C {
+ //delegate
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("delegate void Del<", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" delegate void Del<$$>", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await SetUpEditorAsync(@"
+//using directive
+$$
+", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("using ActionOfT = System.Action<", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("using ActionOfT = System.Action<$$>", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await SetUpEditorAsync(@"
+//class
+$$
+", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "class GenericClass<", '>' }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("class GenericClass<>$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task SingleQuote_InsertionAndCompletion(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("char c = '", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" char c = '$$'", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.DELETE, VirtualKeyCode.BACK }, HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "'\u6666", "'" }, HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" char c = '\u6666'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Nested_AllKinds(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class Bar
+{
+ T Goo(T t) { return t; }
+ void M()
+ {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ "var arr=new object[,]{{Goo(0", HangMitigatingCancellationToken);
+
+ if (showCompletionInArgumentLists)
+ {
+ Assert.False(await TestServices.Editor.IsCompletionActiveAsync(HangMitigatingCancellationToken));
+ }
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.TAB,
+ ",{Goo(Goo(\"hello",
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.TAB,
+ ';',
+ },
+ HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var arr = new object[,] { { Goo(0) }, { Goo(Goo(\"hello\")) } };$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionInSingleLineComments(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ // $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("{([\"'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" // {([\"'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionInMultiLineComments(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ /*
+ $$
+ */
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("{([\"'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" {([\"'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionStringVerbatimStringOrCharLiterals(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ $$
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("string s = \"{([<'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" string s = \"{([<'$$\"", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.END, ';', VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("string y = @\"{([<'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" string y = @\"{([<'$$\"", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.END, ';', VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("char ch = '{([<\"", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" char ch = '{([<\"$$'", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionInXmlDocComments(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+$$
+class C { }", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "///",
+ "{([<\"'",
+ },
+ HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync("/// {([<\"'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionInDisabledPreprocesser(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+#if false
+$$
+#endif
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("void Goo(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("void Goo($$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionAfterRegionPreprocesser(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+#region $$
+
+#endregion
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("{([<\"'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("#region {([<\"'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionAfterEndregionPreprocesser(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+#region
+
+#endregion $$
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("{([<\"'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("#endregion {([<\"'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionAfterIfPreprocesser(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+#if $$
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("{([<\"'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("#if {([<\"'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Negative_NoCompletionAfterPragmaPreprocesser(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+#pragma $$
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("{([<\"'", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("#pragma {([<\"'$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(651954, "DevDiv")]
+ [IdeTheory, CombinatorialData]
+ public async Task InteractionWithOverrideStubGeneration(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class A
+{
+ public virtual void Goo() { }
+}
+class B : A
+{
+ // type ""override Goo(""
+ $$
+}
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("override ", HangMitigatingCancellationToken);
+ Assert.True(await TestServices.Editor.IsCompletionActiveAsync(HangMitigatingCancellationToken));
+
+ await TestServices.Input.SendWithoutActivateAsync("Goo(", HangMitigatingCancellationToken);
+ var actualText = await TestServices.Editor.GetTextAsync(HangMitigatingCancellationToken);
+ Assert.Contains(@"
+class B : A
+{
+ // type ""override Goo(""
+ public override void Goo()
+ {
+ base.Goo();
+ }
+}", actualText);
+ }
+
+ [WorkItem(531107, "DevDiv")]
+ [IdeTheory, CombinatorialData]
+ public async Task InteractionWithCompletionList(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ List li = $$
+ }
+}
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("new Li", HangMitigatingCancellationToken);
+ Assert.True(await TestServices.Editor.IsCompletionActiveAsync(HangMitigatingCancellationToken));
+
+ if (showCompletionInArgumentLists)
+ {
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "(", ")" }, HangMitigatingCancellationToken);
+ }
+ else
+ {
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "(", VirtualKeyCode.TAB }, HangMitigatingCancellationToken);
+ }
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" List li = new List()$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(823958, "DevDiv")]
+ [IdeTheory, CombinatorialData]
+ public async Task AutoBraceCompleteDoesNotFormatBracePairInInitializers(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C
+{
+ void M()
+ {
+ var x = $$
+ }
+}
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("new int[]{", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var x = new int[] {$$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(823958, "DevDiv")]
+ [IdeTheory, CombinatorialData]
+ public async Task AutoBraceCompleteDoesNotFormatBracePairInObjectCreationExpression(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C
+{
+ void M()
+ {
+ var x = $$
+ }
+}
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("new {", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" var x = new {$$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(823958, "DevDiv")]
+ [IdeTheory, CombinatorialData]
+ public async Task AutoBraceCompleteFormatsBracePairInClassDeclarationAndAutoProperty(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class $$
+", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("C{", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("class C { $$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ VirtualKeyCode.RETURN,
+ "int Prop {",
+ },
+ HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+class C
+{
+ int Prop { $$}
+}",
+assertCaretPosition: true,
+HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ [Trait(Traits.Feature, Traits.Features.CompleteStatement)]
+ [WorkItem("https://github.com/dotnet/roslyn/issues/18104")]
+ public async Task CompleteStatementTriggersCompletion(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class Program
+{
+ static void Main(string[] args)
+ {
+ Main$$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("(ar", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Main(ar$$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ if (showCompletionInArgumentLists)
+ {
+ Assert.True(await TestServices.Editor.IsCompletionActiveAsync(HangMitigatingCancellationToken));
+ }
+
+ await TestServices.Input.SendWithoutActivateAsync(";", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Main(args);$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Braces_InsertionOnNewLine(bool showCompletionInArgumentLists)
+ {
+ await SetUpEditorAsync(@"
+class C {
+ void Goo() {
+ $$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.SetTriggerCompletionInArgumentListsAsync(LanguageNames.CSharp, showCompletionInArgumentLists, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "if (true)",
+ VirtualKeyCode.RETURN,
+ "{",
+ },
+ HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" { $$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+class C {
+ void Goo() {
+ if (true)
+ {
+
+ }
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("}", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+class C {
+ void Goo() {
+ if (true)
+ {
+ }$$
+ }
+}", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+ }
+}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpCodeActions.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpCodeActions.cs
index 199f5a2e81a93..62a53b274babc 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpCodeActions.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpCodeActions.cs
@@ -505,6 +505,7 @@ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
FeatureAttribute.EventHookup,
FeatureAttribute.Rename,
FeatureAttribute.RenameTracking,
+ FeatureAttribute.InlineRenameFlyout,
FeatureAttribute.SolutionCrawlerLegacy,
FeatureAttribute.DiagnosticService,
FeatureAttribute.ErrorSquiggles,
@@ -570,6 +571,7 @@ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
FeatureAttribute.EventHookup,
FeatureAttribute.Rename,
FeatureAttribute.RenameTracking,
+ FeatureAttribute.InlineRenameFlyout,
FeatureAttribute.SolutionCrawlerLegacy,
FeatureAttribute.DiagnosticService,
FeatureAttribute.ErrorSquiggles,
@@ -1403,6 +1405,7 @@ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
FeatureAttribute.EventHookup,
FeatureAttribute.Rename,
FeatureAttribute.RenameTracking,
+ FeatureAttribute.InlineRenameFlyout,
FeatureAttribute.SolutionCrawlerLegacy,
FeatureAttribute.DiagnosticService,
FeatureAttribute.ErrorSquiggles,
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpFormatting.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpFormatting.cs
new file mode 100644
index 0000000000000..fa38540b38e92
--- /dev/null
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpFormatting.cs
@@ -0,0 +1,372 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Shared.TestHooks;
+using Microsoft.CodeAnalysis.Test.Utilities;
+using Microsoft.CodeAnalysis.Text;
+using Microsoft.VisualStudio;
+using Roslyn.Test.Utilities;
+using Roslyn.VisualStudio.IntegrationTests;
+using Roslyn.VisualStudio.IntegrationTests.InProcess;
+using WindowsInput.Native;
+using Xunit;
+
+namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
+{
+ [Trait(Traits.Feature, Traits.Features.Formatting)]
+ public class CSharpFormatting : AbstractEditorTest
+ {
+ protected override string LanguageName => LanguageNames.CSharp;
+
+ public CSharpFormatting()
+ : base(nameof(CSharpFormatting))
+ {
+ }
+
+ [IdeFact]
+ public async Task AlignOpenBraceWithMethodDeclaration()
+ {
+ await using (var telemetry = await TestServices.Telemetry.EnableTestTelemetryChannelAsync(HangMitigatingCancellationToken))
+ {
+ await SetUpEditorAsync(@"
+$$class C
+{
+ void Main()
+ {
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Editor.FormatDocumentAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+class C
+{
+ void Main()
+ {
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ await telemetry.VerifyFiredAsync(new[] { "vs/ide/vbcs/commandhandler/formatcommand" }, HangMitigatingCancellationToken);
+ }
+ }
+
+ [IdeFact]
+ public async Task FormatOnSemicolon()
+ {
+ await SetUpEditorAsync(@"
+public class C
+{
+ void Goo()
+ {
+ var x = from a in new List()
+ where x % 2 = 0
+ select x ;$$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendAsync(new InputKey[] { VirtualKeyCode.BACK, ';' }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+public class C
+{
+ void Goo()
+ {
+ var x = from a in new List()
+ where x % 2 = 0
+ select x;
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task FormatSelection()
+ {
+ await SetUpEditorAsync(@"
+public class C {
+ public void M( ) {$$
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Editor.SelectTextInCurrentDocumentAsync("public void M( ) {", HangMitigatingCancellationToken);
+ await TestServices.Editor.FormatSelectionAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+public class C {
+ public void M()
+ {
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task PasteCodeWithLambdaBody()
+ {
+ await SetUpEditorAsync(@"
+using System;
+class Program
+{
+ static void Main()
+ {
+ Action a = () =>
+ {
+ using (null)
+ {
+ $$
+ }
+ };
+ }
+}", HangMitigatingCancellationToken);
+ await TestServices.Editor.PasteAsync(@" Action b = () =>
+ {
+
+ };", HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+using System;
+class Program
+{
+ static void Main()
+ {
+ Action a = () =>
+ {
+ using (null)
+ {
+ Action b = () =>
+ {
+
+ };
+ }
+ };
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ // Undo should only undo the formatting
+ await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd97CmdID.Undo, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+using System;
+class Program
+{
+ static void Main()
+ {
+ Action a = () =>
+ {
+ using (null)
+ {
+ Action b = () =>
+ {
+
+ };
+ }
+ };
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task PasteCodeWithLambdaBody2()
+ {
+ await SetUpEditorAsync(@"
+using System;
+class Program
+{
+ static void Main()
+ {
+ Action a = () =>
+ {
+ using (null)
+ {
+ $$
+ }
+ };
+ }
+}", HangMitigatingCancellationToken);
+ await TestServices.Editor.PasteAsync(@" Action b = n =>
+ {
+ Console.Writeline(n);
+ };", HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+using System;
+class Program
+{
+ static void Main()
+ {
+ Action a = () =>
+ {
+ using (null)
+ {
+ Action b = n =>
+ {
+ Console.Writeline(n);
+ };
+ }
+ };
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task PasteCodeWithLambdaBody3()
+ {
+ await SetUpEditorAsync(@"
+using System;
+class Program
+{
+ static void Main()
+ {
+ Action a = () =>
+ {
+ using (null)
+ {
+ $$
+ }
+ };
+ }
+}", HangMitigatingCancellationToken);
+ await TestServices.Editor.PasteAsync(@" D d = delegate(int x)
+{
+ return 2 * x;
+};", HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+using System;
+class Program
+{
+ static void Main()
+ {
+ Action a = () =>
+ {
+ using (null)
+ {
+ D d = delegate (int x)
+ {
+ return 2 * x;
+ };
+ }
+ };
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task ShiftEnterWithIntelliSenseAndBraceMatching()
+ {
+ await SetUpEditorAsync(@"
+class Program
+{
+ object M(object bar)
+ {
+ return M$$
+ }
+}", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForAsyncOperationsAsync(FeatureAttribute.Workspace, HangMitigatingCancellationToken);
+ await TestServices.Input.SendAsync(new InputKey[] { "(ba", (VirtualKeyCode.RETURN, VirtualKeyCode.SHIFT), "// comment" }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+class Program
+{
+ object M(object bar)
+ {
+ return M(bar);
+ // comment
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ [Trait(Traits.Feature, Traits.Features.EditorConfig)]
+ [WorkItem("https://github.com/dotnet/roslyn/issues/15003")]
+ public async Task ApplyEditorConfigAndFormatDocument()
+ {
+ var markup = @"
+class C
+{
+ public int X1
+ {
+ get
+ {
+ $$return 3;
+ }
+ }
+}";
+ var expectedTextTwoSpaceIndent = @"
+class C
+{
+ public int X1
+ {
+ get
+ {
+ return 3;
+ }
+ }
+}";
+
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Class1.cs", HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var expectedTextFourSpaceIndent, out ImmutableArray _);
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+
+ /*
+ * The first portion of this test verifies that Format Document uses the default indentation settings when
+ * no .editorconfig is available.
+ */
+
+ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
+ new[]
+ {
+ FeatureAttribute.Workspace,
+ FeatureAttribute.SolutionCrawlerLegacy,
+ FeatureAttribute.DiagnosticService,
+ FeatureAttribute.ErrorSquiggles
+ },
+ HangMitigatingCancellationToken);
+ await TestServices.Editor.FormatDocumentAsync(HangMitigatingCancellationToken);
+
+ Assert.Equal(expectedTextFourSpaceIndent, await TestServices.Editor.GetTextAsync(HangMitigatingCancellationToken));
+
+ /*
+ * The second portion of this test adds a .editorconfig file to configure the indentation behavior, and
+ * verifies that the next Format Document operation adheres to the formatting.
+ */
+
+ var editorConfig = @"root = true
+
+[*.cs]
+indent_size = 2
+";
+
+ await TestServices.SolutionExplorer.AddFileAsync(ProjectName, ".editorconfig", editorConfig, open: false, HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
+ new[]
+ {
+ FeatureAttribute.Workspace,
+ FeatureAttribute.SolutionCrawlerLegacy,
+ FeatureAttribute.DiagnosticService,
+ FeatureAttribute.ErrorSquiggles
+ },
+ HangMitigatingCancellationToken);
+ await TestServices.Editor.FormatDocumentAsync(HangMitigatingCancellationToken);
+
+ Assert.Equal(expectedTextTwoSpaceIndent, await TestServices.Editor.GetTextAsync(HangMitigatingCancellationToken));
+
+ /*
+ * The third portion of this test modifies the existing .editorconfig file with a new indentation behavior,
+ * and verifies that the next Format Document operation adheres to the updated formatting.
+ */
+
+ await TestServices.SolutionExplorer.SetFileContentsAsync(ProjectName, ".editorconfig", editorConfig.Replace("2", "4"), HangMitigatingCancellationToken);
+
+ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
+ new[]
+ {
+ FeatureAttribute.Workspace,
+ FeatureAttribute.SolutionCrawlerLegacy,
+ FeatureAttribute.DiagnosticService,
+ FeatureAttribute.ErrorSquiggles
+ },
+ HangMitigatingCancellationToken);
+ await TestServices.Editor.FormatDocumentAsync(HangMitigatingCancellationToken);
+
+ Assert.Equal(expectedTextFourSpaceIndent, await TestServices.Editor.GetTextAsync(HangMitigatingCancellationToken));
+ }
+ }
+}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpRename.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpRename.cs
new file mode 100644
index 0000000000000..93f017de33dd6
--- /dev/null
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpRename.cs
@@ -0,0 +1,645 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Editor.InlineRename;
+using Microsoft.CodeAnalysis.InlineRename;
+using Microsoft.CodeAnalysis.Options;
+using Microsoft.CodeAnalysis.Shared.TestHooks;
+using Microsoft.CodeAnalysis.Test.Utilities;
+using Microsoft.CodeAnalysis.Text;
+using Microsoft.VisualStudio.IntegrationTest.Utilities;
+using Roslyn.Test.Utilities;
+using Roslyn.VisualStudio.IntegrationTests;
+using Roslyn.VisualStudio.IntegrationTests.InProcess;
+using WindowsInput.Native;
+using Xunit;
+
+namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp
+{
+ [Trait(Traits.Feature, Traits.Features.Rename)]
+ public class CSharpRename : AbstractEditorTest
+ {
+ protected override string LanguageName => LanguageNames.CSharp;
+
+ public CSharpRename()
+ : base(nameof(CSharpRename))
+ {
+ }
+
+ public override async Task InitializeAsync()
+ {
+ await base.InitializeAsync();
+
+ // reset relevant global options to default values:
+ var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
+ globalOptions.SetGlobalOption(InlineRenameUIOptionsStorage.UseInlineAdornment, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameInComments, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameInStrings, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameOverloads, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameFile, true);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.PreviewChanges, false);
+ }
+
+ [IdeFact]
+ public async Task VerifyLocalVariableRename()
+ {
+ var markup = @"
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+class Program
+{
+ static void Main(string[] args)
+ {
+ int [|x|]$$ = 0;
+ [|x|] = 5;
+ TestMethod([|x|]);
+ }
+
+ static void TestMethod(int y)
+ {
+
+ }
+}";
+ await using (var telemetry = await TestServices.Telemetry.EnableTestTelemetryChannelAsync(HangMitigatingCancellationToken))
+ {
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+class Program
+{
+ static void Main(string[] args)
+ {
+ int y$$ = 0;
+ y = 5;
+ TestMethod(y);
+ }
+
+ static void TestMethod(int y)
+ {
+
+ }
+}", HangMitigatingCancellationToken);
+ await telemetry.VerifyFiredAsync(new[] { "vs/ide/vbcs/rename/inlinesession/session", "vs/ide/vbcs/rename/commitcore" }, HangMitigatingCancellationToken);
+ }
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRename()
+ {
+ var markup = @"
+using System;
+
+class [|$$ustom|]Attribute : Attribute
+{
+}
+";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "Custom", VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+using System;
+
+class Custom$$Attribute : Attribute
+{
+}
+", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRenameWhileRenameClasss()
+ {
+ var markup = @"
+using System;
+
+class [|$$stom|]Attribute : Attribute
+{
+}
+";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync("Custom", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+using System;
+
+class Custom$$Attribute : Attribute
+{
+}
+", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRenameWhileRenameAttribute()
+ {
+ var markup = @"
+using System;
+
+[[|$$stom|]]
+class Bar
+{
+}
+
+class [|stom|]Attribute : Attribute
+{
+}
+";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync("Custom", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+using System;
+
+[Custom$$]
+class Bar
+{
+}
+
+class CustomAttribute : Attribute
+{
+}
+", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRenameWhileRenameAttributeClass()
+ {
+ var markup = @"
+using System;
+
+[[|stom|]]
+class Bar
+{
+}
+
+class [|$$stom|]Attribute : Attribute
+{
+}
+";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync("Custom", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+using System;
+
+[Custom]
+class Bar
+{
+}
+
+class Custom$$Attribute : Attribute
+{
+}
+", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyLocalVariableRenameWithCommentsUpdated()
+ {
+ // "variable" is intentionally misspelled as "varixable" and "this" is misspelled as
+ // "thix" below to ensure we don't change instances of "x" in comments that are part of
+ // larger words
+ var markup = @"
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+class Program
+{
+ ///
+ /// creates a varixable named [|x|] xx
+ ///
+ ///
+ static void Main(string[] args)
+ {
+ // thix varixable is named [|x|] xx
+ int [|x|]$$ = 0;
+ [|x|] = 5;
+ TestMethod([|x|]);
+ }
+
+ static void TestMethod(int y)
+ {
+ /*
+ * [|x|]
+ * xx
+ */
+ }
+}";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+ await TestServices.InlineRename.ToggleIncludeCommentsAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+class Program
+{
+ ///
+ /// creates a varixable named y xx
+ ///
+ ///
+ static void Main(string[] args)
+ {
+ // thix varixable is named y xx
+ int y$$ = 0;
+ y = 5;
+ TestMethod(y);
+ }
+
+ static void TestMethod(int y)
+ {
+ /*
+ * y
+ * xx
+ */
+ }
+}", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyLocalVariableRenameWithStringsUpdated()
+ {
+ var markup = @"
+class Program
+{
+ static void Main(string[] args)
+ {
+ int [|x|]$$ = 0;
+ [|x|] = 5;
+ var s = ""[|x|] xx [|x|]"";
+ var sLiteral =
+ @""
+ [|x|]
+ xx
+ [|x|]
+ "";
+ char c = 'x';
+ char cUnit = '\u0078';
+ }
+}";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+ await TestServices.InlineRename.ToggleIncludeStringsAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class Program
+{
+ static void Main(string[] args)
+ {
+ int y$$ = 0;
+ y = 5;
+ var s = ""y xx y"";
+ var sLiteral =
+ @""
+ y
+ xx
+ y
+ "";
+ char c = 'x';
+ char cUnit = '\u0078';
+ }
+}", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyOverloadsUpdated()
+ {
+ var markup = @"
+interface I
+{
+ void [|TestMethod|]$$(int y);
+ void [|TestMethod|](string y);
+}
+
+class B : I
+{
+ public virtual void [|TestMethod|](int y)
+ { }
+
+ public virtual void [|TestMethod|](string y)
+ { }
+}";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+ await TestServices.InlineRename.ToggleIncludeOverloadsAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+interface I
+{
+ void y$$(int y);
+ void y(string y);
+}
+
+class B : I
+{
+ public virtual void y(int y)
+ { }
+
+ public virtual void y(string y)
+ { }
+}", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyMultiFileRename()
+ {
+ await SetUpEditorAsync(@"
+class $$Program
+{
+}", HangMitigatingCancellationToken);
+ await TestServices.SolutionExplorer.AddFileAsync(ProjectName, "Class2.cs", @"", cancellationToken: HangMitigatingCancellationToken);
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Class2.cs", HangMitigatingCancellationToken);
+
+ const string class2Markup = @"
+class SomeOtherClass
+{
+ void M()
+ {
+ [|Program|] p = new [|Program|]();
+ }
+}";
+ MarkupTestFile.GetSpans(class2Markup, out var code, out ImmutableArray renameSpans);
+
+ await TestServices.Editor.SetTextAsync(code, HangMitigatingCancellationToken);
+ await TestServices.Editor.PlaceCaretAsync("Program", charsOffset: 0, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class SomeOtherClass
+{
+ void M()
+ {
+ y$$ p = new y();
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Class1.cs", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class y$$
+{
+}", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyRenameCancellation()
+ {
+ await SetUpEditorAsync(@"
+class $$Program
+{
+}", HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.AddFileAsync(ProjectName, "Class2.cs", @"", cancellationToken: HangMitigatingCancellationToken);
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Class2.cs", HangMitigatingCancellationToken);
+ await TestServices.Editor.SetTextAsync(@"
+class SomeOtherClass
+{
+ void M()
+ {
+ Program p = new Program();
+ }
+}", HangMitigatingCancellationToken);
+ await TestServices.Editor.PlaceCaretAsync("Program", charsOffset: 0, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.VK_Y, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class SomeOtherClass
+{
+ void M()
+ {
+ y$$ p = new y();
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Class1.cs", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class y$$
+{
+}", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.ESCAPE, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class Program$$
+{
+}", HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Class2.cs", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class SomeOtherClass
+{
+ void M()
+ {
+ Program$$ p = new Program();
+ }
+}", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyCrossProjectRename()
+ {
+ await SetUpEditorAsync(@"
+$$class RenameRocks
+{
+ static void Main(string[] args)
+ {
+ Class2 c = null;
+ c.ToString();
+ }
+}", HangMitigatingCancellationToken);
+ var project1 = ProjectName;
+ var project2 = "Project2";
+
+ await TestServices.SolutionExplorer.AddProjectAsync(project2, WellKnownProjectTemplates.ClassLibrary, LanguageName, HangMitigatingCancellationToken);
+ await TestServices.SolutionExplorer.AddProjectReferenceAsync(projectName: project1, projectToReferenceName: project2, HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.AddFileAsync(project2, "Class2.cs", @"", cancellationToken: HangMitigatingCancellationToken);
+ await TestServices.SolutionExplorer.OpenFileAsync(project2, "Class2.cs", HangMitigatingCancellationToken);
+
+ await TestServices.Editor.SetTextAsync(@"
+public class Class2 { static void Main(string [] args) { } }", HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.OpenFileAsync(project1, "Class1.cs", HangMitigatingCancellationToken);
+ await TestServices.Editor.PlaceCaretAsync("Class2", charsOffset: 0, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class RenameRocks
+{
+ static void Main(string[] args)
+ {
+ y$$ c = null;
+ c.ToString();
+ }
+}", HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.OpenFileAsync(project2, "y.cs", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+public class y { static void Main(string [] args) { } }$$", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyRenameUndo()
+ {
+ await VerifyCrossProjectRename();
+
+ await TestServices.Input.SendWithoutActivateAsync((VirtualKeyCode.VK_Z, VirtualKeyCode.CONTROL), HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+public class Class2 { static void Main(string [] args) { } }$$", HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Class1.cs", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class RenameRocks
+{
+ static void Main(string[] args)
+ {
+ Class2$$ c = null;
+ c.ToString();
+ }
+}", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyRenameInStandaloneFiles()
+ {
+ await TestServices.SolutionExplorer.CloseSolutionAsync(HangMitigatingCancellationToken);
+ await TestServices.SolutionExplorer.AddStandaloneFileAsync("StandaloneFile1.cs", HangMitigatingCancellationToken);
+ await TestServices.Editor.SetTextAsync(@"
+class Program
+{
+ void Goo()
+ {
+ var ids = 1;
+ ids = 2;
+ }
+}", HangMitigatingCancellationToken);
+ await TestServices.Editor.PlaceCaretAsync("ids", charsOffset: 0, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+class Program
+{
+ void Goo()
+ {
+ var y$$ = 1;
+ y = 2;
+ }
+}", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/39617")]
+ public async Task VerifyRenameCaseChange()
+ {
+ await TestServices.SolutionExplorer.AddFileAsync(ProjectName, "Program.cs",
+@"
+class Program
+{
+ static void Main(string[] args)
+ {
+ }
+}", cancellationToken: HangMitigatingCancellationToken);
+
+ await TestServices.SolutionExplorer.OpenFileAsync(ProjectName, "Program.cs", HangMitigatingCancellationToken);
+ await TestServices.Editor.PlaceCaretAsync("Program", charsOffset: 0, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.HOME, VirtualKeyCode.DELETE, VirtualKeyCode.VK_P, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.TextEqualsAsync(
+ @"
+class p$$rogram
+{
+ static void Main(string[] args)
+ {
+ }
+}", HangMitigatingCancellationToken);
+ }
+ }
+}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorInProcess.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorInProcess.cs
index de195b6a462f1..3e329c4f8b3c9 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorInProcess.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorInProcess.cs
@@ -17,6 +17,7 @@
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.CodeFixesAndRefactorings;
using Microsoft.CodeAnalysis.Editor;
+using Microsoft.CodeAnalysis.Editor.Implementation.InlineRename.HighlightTags;
using Microsoft.CodeAnalysis.Editor.Implementation.Suggestions;
using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
using Microsoft.CodeAnalysis.GoToBase;
@@ -207,6 +208,18 @@ public async Task DeleteTextAsync(string text, CancellationToken cancellationTok
await TestServices.Input.SendAsync(VirtualKeyCode.DELETE, cancellationToken);
}
+ public async Task PasteAsync(string text, CancellationToken cancellationToken)
+ {
+ var provider = await TestServices.Shell.GetComponentModelServiceAsync(cancellationToken);
+ var waiter = (IAsynchronousOperationWaiter)provider.GetListener(FeatureAttribute.AddImportsOnPaste);
+
+ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(new[] { FeatureAttribute.Workspace, FeatureAttribute.SolutionCrawlerLegacy }, cancellationToken);
+ Clipboard.SetText(text);
+ await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd97CmdID.Paste, cancellationToken);
+
+ await waiter.ExpeditedWaitAsync();
+ }
+
public async Task GetLightBulbPreviewClassificationsAsync(string menuText, CancellationToken cancellationToken)
{
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
@@ -400,18 +413,31 @@ public async Task SetUseSuggestionModeAsync(bool forDebuggerTextView, bool value
}
}
- public async Task>> GetErrorTagsAsync(CancellationToken cancellationToken)
+ public Task>> GetErrorTagsAsync(CancellationToken cancellationToken)
+ {
+ return GetTagsAsync(cancellationToken);
+ }
+
+ public async Task>> GetRenameTagsAsync(CancellationToken cancellationToken)
+ {
+ await TestServices.Workspace.WaitForRenameAsync(cancellationToken);
+ var tags = await GetTagsAsync(cancellationToken);
+ return tags.WhereAsArray(tag => tag.Tag.Type == RenameFieldBackgroundAndBorderTag.TagId);
+ }
+
+ public async Task>> GetTagsAsync(CancellationToken cancellationToken)
+ where TTag : ITag
{
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
var view = await GetActiveTextViewAsync(cancellationToken);
var viewTagAggregatorFactory = await GetComponentModelServiceAsync(cancellationToken);
- var aggregator = viewTagAggregatorFactory.CreateTagAggregator(view);
+ var aggregator = viewTagAggregatorFactory.CreateTagAggregator(view);
var tags = aggregator
.GetTags(new SnapshotSpan(view.TextSnapshot, 0, view.TextSnapshot.Length))
.Cast>();
- return tags.SelectAsArray(tag => (new TagSpan(tag.Span.GetSpans(view.TextBuffer).Single(), (IErrorTag)tag.Tag)));
+ return tags.SelectAsArray(tag => (new TagSpan(tag.Span.GetSpans(view.TextBuffer).Single(), (TTag)tag.Tag)));
}
private static bool IsDebuggerTextView(ITextView textView)
@@ -655,6 +681,20 @@ public async Task DismissCompletionSessionsAsync(CancellationToken cancellationT
broker.DismissAllSessions(view);
}
+ public async Task IsCompletionActiveAsync(CancellationToken cancellationToken)
+ {
+ await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
+
+ await WaitForCompletionSetAsync(cancellationToken);
+
+ var view = await GetActiveTextViewAsync(cancellationToken);
+ if (view is null)
+ return false;
+
+ var broker = await TestServices.Shell.GetComponentModelServiceAsync(cancellationToken);
+ return broker.IsCompletionActive(view);
+ }
+
public async Task ShowLightBulbAsync(CancellationToken cancellationToken)
{
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
@@ -1079,6 +1119,16 @@ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(
});
}
+ public Task FormatDocumentAsync(CancellationToken cancellationToken)
+ {
+ return TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd2KCmdID.FORMATDOCUMENT, cancellationToken);
+ }
+
+ public Task FormatSelectionAsync(CancellationToken cancellationToken)
+ {
+ return TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd2KCmdID.FORMATSELECTION, cancellationToken);
+ }
+
private async Task WaitForCompletionSetAsync(CancellationToken cancellationToken)
{
await TestServices.Workspace.WaitForAsyncOperationsAsync(FeatureAttribute.CompletionSet, cancellationToken);
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorVerifierInProcess.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorVerifierInProcess.cs
index 5af9e9ab2f6c5..07ff3200a9135 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorVerifierInProcess.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EditorVerifierInProcess.cs
@@ -67,6 +67,17 @@ private async Task CurrentLineTextAndAssertCaretPositionAsync(
Assert.Equal(expectedTextBeforeCaret.Length + expectedTextAfterCaret.Length, lineText.Length);
}
+ public async Task TextEqualsAsync(
+ string expectedText,
+ CancellationToken cancellationToken)
+ {
+ var view = await TestServices.Editor.GetActiveTextViewAsync(cancellationToken);
+ var editorText = view.TextSnapshot.GetText();
+ var caretPosition = await TestServices.Editor.GetCaretPositionAsync(cancellationToken);
+ editorText = editorText.Insert(caretPosition, "$$");
+ AssertEx.EqualOrDiff(expectedText, editorText);
+ }
+
public async Task TextContainsAsync(
string expectedText,
bool assertCaretPosition = false,
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EncapsulateFieldInProcess.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EncapsulateFieldInProcess.cs
index 87c1861d3e89d..f346139c758d4 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EncapsulateFieldInProcess.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/EncapsulateFieldInProcess.cs
@@ -16,9 +16,6 @@ internal partial class EncapsulateFieldInProcess
internal Task InvokeAsync(CancellationToken cancellationToken)
{
- // Cancellation is not currently supported by SendAsync
- _ = cancellationToken;
-
return TestServices.Input.SendAsync(new InputKey[] { (VirtualKeyCode.VK_R, VirtualKeyCode.CONTROL), (VirtualKeyCode.VK_E, VirtualKeyCode.CONTROL) }, cancellationToken);
}
}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/InlineRenameInProcess.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/InlineRenameInProcess.cs
new file mode 100644
index 0000000000000..cbde0a2029a08
--- /dev/null
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/InlineRenameInProcess.cs
@@ -0,0 +1,41 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis.Shared.TestHooks;
+using Microsoft.VisualStudio;
+using Microsoft.VisualStudio.Extensibility.Testing;
+using WindowsInput.Native;
+
+namespace Roslyn.VisualStudio.IntegrationTests.InProcess
+{
+ [TestService]
+ internal partial class InlineRenameInProcess
+ {
+ public async Task InvokeAsync(CancellationToken cancellationToken)
+ {
+ await TestServices.Shell.ExecuteCommandAsync(VSConstants.VSStd2KCmdID.RENAME, cancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(cancellationToken);
+ }
+
+ public async Task ToggleIncludeCommentsAsync(CancellationToken cancellationToken)
+ {
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { (VirtualKeyCode.VK_C, VirtualKeyCode.MENU) }, cancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(cancellationToken);
+ }
+
+ public async Task ToggleIncludeStringsAsync(CancellationToken cancellationToken)
+ {
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { (VirtualKeyCode.VK_S, VirtualKeyCode.MENU) }, cancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(cancellationToken);
+ }
+
+ public async Task ToggleIncludeOverloadsAsync(CancellationToken cancellationToken)
+ {
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { (VirtualKeyCode.VK_O, VirtualKeyCode.MENU) }, cancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(cancellationToken);
+ }
+ }
+}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/SolutionExplorerInProcess.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/SolutionExplorerInProcess.cs
index eb8a650da42c4..a96d0b9af77b4 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/SolutionExplorerInProcess.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/SolutionExplorerInProcess.cs
@@ -432,6 +432,39 @@ public async Task AddFileAsync(string projectName, string fileName, string? cont
}
}
+ ///
+ /// Adds a new standalone file to the Miscellaneous Files workspace.
+ ///
+ /// The name of the file to add.
+ public async Task AddStandaloneFileAsync(string fileName, CancellationToken cancellationToken)
+ {
+ await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
+
+ string itemTemplate;
+
+ var extension = Path.GetExtension(fileName).ToLowerInvariant();
+ switch (extension)
+ {
+ case ".cs":
+ itemTemplate = @"General\C# Class";
+ break;
+ case ".csx":
+ itemTemplate = @"Script\Visual C# Script";
+ break;
+ case ".vb":
+ itemTemplate = @"General\Visual Basic Class";
+ break;
+ case ".txt":
+ itemTemplate = @"General\Text File";
+ break;
+ default:
+ throw new NotSupportedException($"File type '{extension}' is not yet supported.");
+ }
+
+ var dte = await GetRequiredGlobalServiceAsync(cancellationToken);
+ dte.ItemOperations.NewFile(itemTemplate, fileName);
+ }
+
public async Task RenameFileAsync(string projectName, string oldFileName, string newFileName, CancellationToken cancellationToken)
{
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/StateResetInProcess.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/StateResetInProcess.cs
index fa47925a67142..aaa86e5b317e3 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/StateResetInProcess.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/StateResetInProcess.cs
@@ -9,11 +9,17 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.AddImportOnPaste;
using Microsoft.CodeAnalysis.Completion;
+using Microsoft.CodeAnalysis.CSharp.CodeStyle;
+using Microsoft.CodeAnalysis.Editor.InlineRename;
using Microsoft.CodeAnalysis.Editor.Options;
using Microsoft.CodeAnalysis.Editor.VisualBasic.LineCommit;
using Microsoft.CodeAnalysis.Host;
+using Microsoft.CodeAnalysis.InheritanceMargin;
+using Microsoft.CodeAnalysis.InlineRename;
using Microsoft.CodeAnalysis.MetadataAsSource;
using Microsoft.CodeAnalysis.Options;
+using Microsoft.CodeAnalysis.SolutionCrawler;
+using Microsoft.CodeAnalysis.Structure;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Extensibility.Testing;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
@@ -44,9 +50,23 @@ public async Task ResetGlobalOptionsAsync(CancellationToken cancellationToken)
configurationService.Clear();
var globalOptions = await GetComponentModelServiceAsync(cancellationToken);
+ ResetOption(globalOptions, CSharpCodeStyleOptions.NamespaceDeclarations);
+ ResetOption(globalOptions, InheritanceMarginOptionsStorage.InheritanceMarginCombinedWithIndicatorMargin);
+ ResetOption(globalOptions, InlineRenameSessionOptionsStorage.PreviewChanges);
+ ResetOption(globalOptions, InlineRenameSessionOptionsStorage.RenameFile);
+ ResetOption(globalOptions, InlineRenameSessionOptionsStorage.RenameInComments);
+ ResetOption(globalOptions, InlineRenameSessionOptionsStorage.RenameInStrings);
+ ResetOption(globalOptions, InlineRenameSessionOptionsStorage.RenameOverloads);
+ ResetOption(globalOptions, InlineRenameUIOptionsStorage.UseInlineAdornment);
ResetOption(globalOptions, MetadataAsSourceOptionsStorage.NavigateToDecompiledSources);
ResetOption(globalOptions, WorkspaceConfigurationOptionsStorage.EnableOpeningSourceGeneratedFilesInWorkspace);
+ ResetPerLanguageOption(globalOptions, BlockStructureOptionsStorage.CollapseSourceLinkEmbeddedDecompiledFilesWhenFirstOpened);
+ ResetPerLanguageOption(globalOptions, CompletionOptionsStorage.TriggerInArgumentLists);
+ ResetPerLanguageOption(globalOptions, InheritanceMarginOptionsStorage.InheritanceMarginIncludeGlobalImports);
+ ResetPerLanguageOption(globalOptions, InheritanceMarginOptionsStorage.ShowInheritanceMargin);
ResetPerLanguageOption(globalOptions, NavigationBarViewOptionsStorage.ShowNavigationBar);
+ ResetPerLanguageOption(globalOptions, SolutionCrawlerOptionsStorage.BackgroundAnalysisScopeOption);
+ ResetPerLanguageOption(globalOptions, SolutionCrawlerOptionsStorage.CompilerDiagnosticsScopeOption);
ResetPerLanguageOption(globalOptions, VisualStudioNavigationOptionsStorage.NavigateToObjectBrowser);
ResetPerLanguageOption(globalOptions, AddImportOnPasteOptionsStorage.AddImportsOnPaste);
ResetPerLanguageOption(globalOptions, LineCommitOptionsStorage.PrettyListing);
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/WorkspaceInProcess.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/WorkspaceInProcess.cs
index 324bfd23d56ef..d9706b4083b99 100644
--- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/WorkspaceInProcess.cs
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/InProcess/WorkspaceInProcess.cs
@@ -6,6 +6,7 @@
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeStyle;
+using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
using Microsoft.CodeAnalysis.Editor.VisualBasic.LineCommit;
using Microsoft.CodeAnalysis.Host;
@@ -65,6 +66,14 @@ public async Task SetPrettyListingAsync(string languageName, bool value, Cancell
globalOptions.SetGlobalOption(LineCommitOptionsStorage.PrettyListing, languageName, value);
}
+ public async Task SetTriggerCompletionInArgumentListsAsync(string languageName, bool value, CancellationToken cancellationToken)
+ {
+ await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
+
+ var globalOptions = await GetComponentModelServiceAsync(cancellationToken);
+ globalOptions.SetGlobalOption(CompletionOptionsStorage.TriggerInArgumentLists, languageName, value);
+ }
+
public async Task SetFileScopedNamespaceAsync(bool value, CancellationToken cancellationToken)
{
await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
@@ -142,6 +151,18 @@ public async Task WaitForAllAsyncOperationsAsync(string[] featureNames, Cancella
await listenerProvider.WaitAllAsync(workspace, featureNames).WithCancellation(cancellationToken);
}
+ public async Task WaitForRenameAsync(CancellationToken cancellationToken)
+ {
+ await WaitForAllAsyncOperationsAsync(
+ new[]
+ {
+ FeatureAttribute.Rename,
+ FeatureAttribute.RenameTracking,
+ FeatureAttribute.InlineRenameFlyout,
+ },
+ cancellationToken);
+ }
+
///
/// This event listener is an adapter to expose asynchronous file save operations to Roslyn via its standard
/// workspace event waiters.
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicAutomaticBraceCompletion.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicAutomaticBraceCompletion.cs
new file mode 100644
index 0000000000000..c0fef93a976eb
--- /dev/null
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicAutomaticBraceCompletion.cs
@@ -0,0 +1,401 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Completion;
+using Microsoft.CodeAnalysis.Editor.InlineRename;
+using Microsoft.CodeAnalysis.Options;
+using Microsoft.CodeAnalysis.Shared.TestHooks;
+using Microsoft.CodeAnalysis.Test.Utilities;
+using Roslyn.Test.Utilities;
+using Roslyn.VisualStudio.IntegrationTests;
+using Roslyn.VisualStudio.IntegrationTests.InProcess;
+using WindowsInput.Native;
+using Xunit;
+
+namespace Roslyn.VisualStudio.NewIntegrationTests.VisualBasic
+{
+ [Trait(Traits.Feature, Traits.Features.AutomaticCompletion)]
+ public class BasicAutomaticBraceCompletion : AbstractEditorTest
+ {
+ protected override string LanguageName => LanguageNames.VisualBasic;
+
+ public BasicAutomaticBraceCompletion()
+ : base(nameof(BasicAutomaticBraceCompletion))
+ {
+ }
+
+ [IdeTheory, CombinatorialData]
+ public async Task Braces_InsertionAndTabCompleting(bool argumentCompletion)
+ {
+ var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
+ globalOptions.SetGlobalOption(CompletionViewOptionsStorage.EnableArgumentCompletionSnippets, LanguageNames.VisualBasic, argumentCompletion);
+
+ // Disable new rename UI for now, it's causing these tests to fail.
+ // https://github.com/dotnet/roslyn/issues/63576
+ globalOptions.SetGlobalOption(InlineRenameUIOptionsStorage.UseInlineAdornment, false);
+
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim x = {", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim x = {$$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "New Object",
+ VirtualKeyCode.ESCAPE,
+ VirtualKeyCode.TAB,
+ },
+ HangMitigatingCancellationToken);
+
+ if (argumentCompletion)
+ {
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim x = {New Object($$)}", assertCaretPosition: true, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForAllAsyncOperationsAsync(new[] { FeatureAttribute.SignatureHelp }, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim x = {New Object()$$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim x = {New Object()}$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+ else
+ {
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim x = {New Object}$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+ }
+
+ [IdeFact]
+ public async Task Braces_Overtyping()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim x = {", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync('}', HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim x = {}$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task ParenthesesTypeoverAfterStringLiterals()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Console.Write(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Console.Write($$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync('"', HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Console.Write(\"$$\")", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync('"', HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Console.Write(\"\"$$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(')', HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Console.Write(\"\")$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Braces_OnReturnNoFormattingOnlyIndentationBeforeCloseBrace()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim x = {", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" $$}", assertCaretPosition: true, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+Class C
+ Sub Goo()
+ Dim x = {
+ $$}
+ End Sub
+End Class",
+assertCaretPosition: true,
+HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Paren_InsertionAndTabCompleting()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ $$
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Sub Goo(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Sub Goo($$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("x As Long", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.ESCAPE, HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Sub Goo(x As Long)$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Paren_Overtyping()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ $$
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Sub Goo(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Sub Goo($$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.ESCAPE, HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(')', HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Sub Goo()$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Bracket_Insertion()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim [Dim", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim [Dim$$]", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Bracket_Overtyping()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim [Dim", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim [Dim$$]", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("] As Long", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim [Dim] As Long$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task DoubleQuote_InsertionAndTabCompletion()
+ {
+ // Disable new rename UI for now, it's causing these tests to fail.
+ // https://github.com/dotnet/roslyn/issues/63576
+ var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
+ globalOptions.SetGlobalOption(InlineRenameUIOptionsStorage.UseInlineAdornment, false);
+
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim str = \"", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim str = \"$$\"", assertCaretPosition: true, HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.TAB, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim str = \"\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Nested_AllKinds_1()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub New([dim] As String)
+ End Sub
+
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "Dim y = {New C([dim",
+ VirtualKeyCode.ESCAPE,
+ "]:=\"hello({[\")}",
+ VirtualKeyCode.RETURN,
+ },
+ HangMitigatingCancellationToken);
+ var actualText = await TestServices.Editor.GetTextAsync(HangMitigatingCancellationToken);
+ Assert.Contains("Dim y = {New C([dim]:=\"hello({[\")}", actualText);
+ }
+
+ [IdeFact]
+ public async Task Nested_AllKinds_2()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub New([dim] As String)
+ End Sub
+
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(
+ new InputKey[]
+ {
+ "Dim y = {New C([dim",
+ VirtualKeyCode.ESCAPE,
+ VirtualKeyCode.TAB,
+ ":=\"hello({[",
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.TAB,
+ VirtualKeyCode.RETURN,
+ },
+ HangMitigatingCancellationToken);
+ var actualText = await TestServices.Editor.GetTextAsync(HangMitigatingCancellationToken);
+ Assert.Contains("Dim y = {New C([dim]:=\"hello({[\")}", actualText);
+ }
+
+ [IdeFact]
+ public async Task Negative_NoCompletionInComments()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ ' $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("{([\"", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" ' {([\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Negative_NoCompletionInStringLiterals()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim s = \"{([", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim s = \"{([$$\"", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Negative_NoCompletionInXmlDocComment()
+ {
+ await SetUpEditorAsync(@"
+$$
+Class C
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("'''", HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync('{', HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync('(', HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync('[', HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync('"', HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync("''' {([\"$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task Negative_NoCompletionInXmlDocCommentAtEndOfTag()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ '''
+ ''' $$
+ '''
+ Sub Goo()
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" ''' ($$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(652015, "DevDiv")]
+ [IdeFact]
+ public async Task LineCommittingIssue()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Dim x=\"\" '", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Dim x=\"\" '$$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(653399, "DevDiv")]
+ [IdeFact]
+ public async Task VirtualWhitespaceIssue()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()$$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.RETURN, HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync('(', HangMitigatingCancellationToken);
+ await TestServices.Input.SendWithoutActivateAsync(VirtualKeyCode.BACK, HangMitigatingCancellationToken);
+
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" $$", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(659684, "DevDiv")]
+ [IdeFact]
+ public async Task CompletionWithIntelliSenseWindowUp()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ Sub Goo()
+ End Sub
+ Sub Test()
+ $$
+ End Sub
+End Class", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Goo(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Goo($$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+
+ [WorkItem(657451, "DevDiv")]
+ [IdeFact]
+ public async Task CompletionAtTheEndOfFile()
+ {
+ await SetUpEditorAsync(@"
+Class C
+ $$", HangMitigatingCancellationToken);
+
+ await TestServices.Input.SendWithoutActivateAsync("Sub Goo(", HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.CurrentLineTextAsync(" Sub Goo($$)", assertCaretPosition: true, HangMitigatingCancellationToken);
+ }
+ }
+}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicFormatting.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicFormatting.cs
new file mode 100644
index 0000000000000..a7497149e1c5b
--- /dev/null
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicFormatting.cs
@@ -0,0 +1,81 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Shared.TestHooks;
+using Microsoft.CodeAnalysis.Test.Utilities;
+using Roslyn.VisualStudio.IntegrationTests;
+using Roslyn.VisualStudio.IntegrationTests.InProcess;
+using WindowsInput.Native;
+using Xunit;
+
+namespace Roslyn.VisualStudio.NewIntegrationTests.VisualBasic
+{
+ [Trait(Traits.Feature, Traits.Features.Formatting)]
+ public class BasicFormatting : AbstractEditorTest
+ {
+ protected override string LanguageName => LanguageNames.VisualBasic;
+
+ public BasicFormatting()
+ : base(nameof(BasicFormatting))
+ {
+ }
+
+ [IdeFact]
+ public async Task VerifyFormattingIndent()
+ {
+ var testCode = new StringBuilder()
+ .AppendLine("$$Module A")
+ .AppendLine(" Sub Main(args As String())")
+ .AppendLine(" ")
+ .AppendLine(" End Sub")
+ .AppendLine("End Module")
+ .ToString();
+
+ await SetUpEditorAsync(testCode, HangMitigatingCancellationToken);
+
+ await TestServices.Editor.FormatDocumentAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(
+@"Module A
+ Sub Main(args As String())
+
+ End Sub
+End Module", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyCaseCorrection()
+ {
+ await SetUpEditorAsync(@"
+$$module A
+end module", HangMitigatingCancellationToken);
+ await TestServices.Editor.FormatDocumentAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+Module A
+End Module", cancellationToken: HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task ShiftEnterWithIntelliSenseAndBraceMatching()
+ {
+ await SetUpEditorAsync(@"
+Module Program
+ Function Main(ooo As Object) As Object
+ Return Main$$
+ End Function
+End Module", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForAsyncOperationsAsync(FeatureAttribute.Workspace, HangMitigatingCancellationToken);
+ await TestServices.Input.SendAsync(new InputKey[] { "(o", (VirtualKeyCode.RETURN, VirtualKeyCode.SHIFT), "'comment" }, HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextContainsAsync(@"
+Module Program
+ Function Main(ooo As Object) As Object
+ Return Main(ooo)
+ 'comment
+ End Function
+End Module", cancellationToken: HangMitigatingCancellationToken);
+ }
+ }
+}
diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicRename.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicRename.cs
new file mode 100644
index 0000000000000..adadde27151ae
--- /dev/null
+++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicRename.cs
@@ -0,0 +1,415 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Editor.InlineRename;
+using Microsoft.CodeAnalysis.InlineRename;
+using Microsoft.CodeAnalysis.Options;
+using Microsoft.CodeAnalysis.Test.Utilities;
+using Microsoft.CodeAnalysis.Text;
+using Roslyn.Test.Utilities;
+using Roslyn.VisualStudio.IntegrationTests;
+using Roslyn.VisualStudio.IntegrationTests.InProcess;
+using WindowsInput.Native;
+using Xunit;
+using Xunit.Sdk;
+
+namespace Roslyn.VisualStudio.NewIntegrationTests.VisualBasic
+{
+ [Trait(Traits.Feature, Traits.Features.Rename)]
+ public class BasicRename : AbstractEditorTest
+ {
+ protected override string LanguageName => LanguageNames.VisualBasic;
+
+ public BasicRename()
+ : base(nameof(BasicRename))
+ {
+ }
+
+ public override async Task InitializeAsync()
+ {
+ await base.InitializeAsync();
+
+ // reset relevant global options to default values:
+ var globalOptions = await TestServices.Shell.GetComponentModelServiceAsync(HangMitigatingCancellationToken);
+ globalOptions.SetGlobalOption(InlineRenameUIOptionsStorage.UseInlineAdornment, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameInComments, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameInStrings, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameOverloads, false);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.RenameFile, true);
+ globalOptions.SetGlobalOption(InlineRenameSessionOptionsStorage.PreviewChanges, false);
+ }
+
+ [IdeFact]
+ public async Task VerifyLocalVariableRename()
+ {
+ var markup = @"
+Imports System
+Imports System.Collections.Generic
+Imports System.Linq
+
+Module Program
+ Sub Main(args As String())
+ Dim [|x|]$$ As Integer = 0
+ [|x|] = 5
+ TestMethod([|x|])
+ End Sub
+ Sub TestMethod(y As Integer)
+
+ End Sub
+End Module";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+Imports System.Collections.Generic
+Imports System.Linq
+
+Module Program
+ Sub Main(args As String())
+ Dim y$$ As Integer = 0
+ y = 5
+ TestMethod(y)
+ End Sub
+ Sub TestMethod(y As Integer)
+
+ End Sub
+End Module", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyLocalVariableRenameWithCommentsUpdated()
+ {
+ // "variable" is intentionally misspelled as "varixable" and "this" is misspelled as
+ // "thix" below to ensure we don't change instances of "x" in comments that are part of
+ // larger words
+ var markup = @"
+Imports System
+Imports System.Collections.Generic
+Imports System.Linq
+
+Module Program
+ '''
+ ''' creates a varixable named [|x|] xx
+ '''
+ '''
+ Sub Main(args As String())
+ ' thix varixable is named [|x|] xx
+ Dim [|x|]$$ As Integer = 0
+ [|x|] = 5
+ TestMethod([|x|])
+End Module";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+ await TestServices.InlineRename.ToggleIncludeCommentsAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+Imports System.Collections.Generic
+Imports System.Linq
+
+Module Program
+ '''
+ ''' creates a varixable named y xx
+ '''
+ '''
+ Sub Main(args As String())
+ ' thix varixable is named y xx
+ Dim y$$ As Integer = 0
+ y = 5
+ TestMethod(y)
+End Module", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyLocalVariableRenameWithStringsUpdated()
+ {
+ var markup = @"
+Imports System
+Imports System.Collections.Generic
+Imports System.Linq
+
+Module Program
+ Sub Main(args As String())
+ Dim [|x|]$$ As Integer = 0
+ [|x|] = 5
+ Dim s = ""[|x|] xx [|x|]""
+ End Sub
+End Module";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+ await TestServices.InlineRename.ToggleIncludeStringsAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+Imports System.Collections.Generic
+Imports System.Linq
+
+Module Program
+ Sub Main(args As String())
+ Dim y$$ As Integer = 0
+ y = 5
+ Dim s = ""y xx y""
+ End Sub
+End Module", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact]
+ public async Task VerifyOverloadsUpdated()
+ {
+ var markup = @"
+Interface I
+ Sub [|TestMethod|]$$(y As Integer)
+ Sub [|TestMethod|](y As String)
+End Interface
+
+Public MustInherit Class A
+ Implements I
+ Public MustOverride Sub [|TestMethod|](y As Integer) Implements I.[|TestMethod|]
+ Public MustOverride Sub [|TestMethod|](y As String) Implements I.[|TestMethod|]
+End Class";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+ await TestServices.InlineRename.ToggleIncludeOverloadsAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { VirtualKeyCode.VK_Y, VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Interface I
+ Sub y$$(y As Integer)
+ Sub y(y As String)
+End Interface
+
+Public MustInherit Class A
+ Implements I
+ Public MustOverride Sub y(y As Integer) Implements I.y
+ Public MustOverride Sub y(y As String) Implements I.y
+End Class", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRename()
+ {
+ var markup = @"
+Imports System
+
+Public Class [|$$ustom|]Attribute
+ Inherits Attribute
+End Class";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "Custom", VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+
+Public Class Custom$$Attribute
+ Inherits Attribute
+End Class", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRenameWhileRenameClasss()
+ {
+ var markup = @"
+Imports System
+
+Public Class [|$$ustom|]Attribute
+ Inherits Attribute
+End Class";
+
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync("Custom", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+
+Public Class Custom$$Attribute
+ Inherits Attribute
+End Class", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRenameWhileRenameAttribute()
+ {
+ var markup = @"
+Imports System
+
+<[|$$ustom|]>
+Class Bar
+End Class
+
+Public Class [|ustom|]Attribute
+ Inherits Attribute
+End Class";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync("Custom", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+
+
+Class Bar
+End Class
+
+Public Class CustomAttribute
+ Inherits Attribute
+End Class", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeRenameWhileRenameAttributeClass()
+ {
+ var markup = @"
+Imports System
+
+<[|ustom|]>
+Class Bar
+End Class
+
+Public Class [|$$ustom|]Attribute
+ Inherits Attribute
+End Class";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync("Custom", HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+
+
+Class Bar
+End Class
+
+Public Class Custom$$Attribute
+ Inherits Attribute
+End Class", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeCapitalizedRename()
+ {
+ var markup = @"
+Imports System
+
+Public Class [|$$ustom|]ATTRIBUTE
+ Inherits Attribute
+End Class";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "Custom", VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+
+Public Class CustomAttribute$$
+ Inherits Attribute
+End Class", HangMitigatingCancellationToken);
+ }
+
+ [IdeFact, WorkItem("https://github.com/dotnet/roslyn/issues/21657")]
+ public async Task VerifyAttributeNotCapitalizedRename()
+ {
+ var markup = @"
+Imports System
+
+Public Class [|$$ustom|]attribute
+ Inherits Attribute
+End Class";
+ await SetUpEditorAsync(markup, HangMitigatingCancellationToken);
+ await TestServices.InlineRename.InvokeAsync(HangMitigatingCancellationToken);
+
+ MarkupTestFile.GetSpans(markup, out var _, out ImmutableArray renameSpans);
+ var tags = await TestServices.Editor.GetRenameTagsAsync(HangMitigatingCancellationToken);
+ var tagSpans = tags.SelectAsArray(tag => new TextSpan(tag.Span.Start, tag.Span.Length));
+ AssertEx.SetEqual(renameSpans, tagSpans);
+
+ await TestServices.Input.SendWithoutActivateAsync(new InputKey[] { "Custom", VirtualKeyCode.RETURN }, HangMitigatingCancellationToken);
+ await TestServices.Workspace.WaitForRenameAsync(HangMitigatingCancellationToken);
+ try
+ {
+ // This is the expected behavior
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+
+Public Class CustomAttribute$$
+ Inherits Attribute
+End Class", HangMitigatingCancellationToken);
+ }
+ catch (XunitException)
+ {
+ // But sometimes we get this instead
+ await TestServices.EditorVerifier.TextEqualsAsync(@"
+Imports System
+
+Public Class CustomA$$ttribute
+ Inherits Attribute
+End Class", HangMitigatingCancellationToken);
+ }
+ }
+ }
+}
diff --git a/src/VisualStudio/IntegrationTest/TestUtilities/InProcess/Editor_InProc.cs b/src/VisualStudio/IntegrationTest/TestUtilities/InProcess/Editor_InProc.cs
index beed7eb372548..7e35aa086e6da 100644
--- a/src/VisualStudio/IntegrationTest/TestUtilities/InProcess/Editor_InProc.cs
+++ b/src/VisualStudio/IntegrationTest/TestUtilities/InProcess/Editor_InProc.cs
@@ -36,7 +36,6 @@
using Microsoft.VisualStudio.Utilities;
using Roslyn.Utilities;
using UIAutomationClient;
-using ThreadHelper = Microsoft.VisualStudio.Shell.ThreadHelper;
namespace Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess
{
@@ -61,13 +60,6 @@ protected override bool HasActiveTextView()
protected override IWpfTextView GetActiveTextView()
=> GetActiveTextViewHost().TextView;
- private static IVsTextView GetActiveVsTextView()
- {
- var (textView, hr) = TryGetActiveVsTextView();
- Marshal.ThrowExceptionForHR(hr);
- return textView;
- }
-
private static (IVsTextView textView, int hr) TryGetActiveVsTextView()
{
var vsTextManager = GetGlobalService();
@@ -160,17 +152,6 @@ public void SetUseSuggestionMode(bool value)
}
}
- public string GetActiveBufferName()
- {
- return GetDTE().ActiveDocument.Name;
- }
-
- public void WaitForActiveView(string expectedView)
- {
- using var cts = new CancellationTokenSource(Helper.HangMitigatingTimeout);
- Retry(_ => GetActiveBufferName(), (actual, _) => actual == expectedView, TimeSpan.FromMilliseconds(100), cts.Token);
- }
-
public void Activate()
=> GetDTE().ActiveDocument.Activate();
@@ -246,16 +227,6 @@ public string GetLineTextAfterCaret()
return text[(bufferPosition.Position - line.Start)..];
});
- public string GetSelectedText()
- => ExecuteOnActiveView(view =>
- {
- var subjectBuffer = view.GetBufferContainingCaret();
- Contract.ThrowIfNull(subjectBuffer);
-
- var selectedSpan = view.Selection.SelectedSpans[0];
- return subjectBuffer.CurrentSnapshot.GetText(selectedSpan);
- });
-
public void MoveCaret(int position)
=> ExecuteOnActiveView(view =>
{
@@ -278,9 +249,6 @@ public bool IsSignatureHelpActive()
return broker.IsSignatureHelpActive(view);
});
- public string[] GetErrorTags()
- => GetTags();
-
public string[] GetHighlightTags()
=> GetTags(tag => tag.Type == KeywordHighlightTag.TagId);
@@ -432,60 +400,11 @@ public void DialogSendKeys(string dialogAutomationName, object[] keys)
_sendKeys.Send(keys);
}
- public void SendKeysToNavigateTo(object[] keys)
- {
- var dialogAutomationElement = FindNavigateTo();
- if (dialogAutomationElement == null)
- {
- throw new InvalidOperationException($"Expected the NavigateTo dialog to be open, but it is not.");
- }
-
- dialogAutomationElement.SetFocus();
- _sendKeys.Send(keys);
- }
-
public void PressDialogButton(string dialogAutomationName, string buttonAutomationName)
{
DialogHelpers.PressButton(GetDTE().MainWindow.HWnd, dialogAutomationName, buttonAutomationName);
}
- private static IUIAutomationElement FindNavigateTo()
- {
- var vsAutomationElement = Helper.Automation.ElementFromHandle(GetDTE().MainWindow.HWnd);
- return vsAutomationElement.FindDescendantByAutomationId("PART_SearchBox");
- }
-
- private T Retry(Func action, Func stoppingCondition, TimeSpan delay, CancellationToken cancellationToken)
- {
- do
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- T retval;
- try
- {
- retval = action(cancellationToken);
- }
- catch (COMException)
- {
- // Devenv can throw COMExceptions if it's busy when we make DTE calls.
-
- Thread.Sleep(delay);
- continue;
- }
-
- if (stoppingCondition(retval, cancellationToken))
- {
- return retval;
- }
- else
- {
- Thread.Sleep(delay);
- }
- }
- while (true);
- }
-
public void AddWinFormButton(string buttonName)
{
using (var waitHandle = new ManualResetEvent(false))
@@ -658,12 +577,6 @@ void ComponentChanged(object sender, ComponentChangedEventArgs e)
return properties[propertyName].GetValue(button) as string;
}
- public void FormatDocumentViaCommand()
- => ExecuteCommand(WellKnownCommandNames.Edit_FormatDocument);
-
- public void Paste()
- => ExecuteCommand(WellKnownCommandNames.Edit_Paste);
-
public void Undo()
=> ExecuteCommand(WellKnownCommandNames.Edit_Undo);
@@ -713,13 +626,6 @@ public int[] GetTagSpans(string tagId)
return matchingTags.Select(t => t.Span.GetSpans(view.TextBuffer).Single().Span.ToTextSpan()).SelectMany(t => new List { t.Start, t.Length }).ToArray();
});
- public void SendExplicitFocus()
- => InvokeOnUIThread(cancellationToken =>
- {
- var view = GetActiveVsTextView();
- view.SendExplicitFocus();
- });
-
public void WaitForEditorOperations(TimeSpan timeout)
{
var joinableTaskCollection = InvokeOnUIThread(cancellationToken =>
diff --git a/src/VisualStudio/IntegrationTest/TestUtilities/InProcess/Editor_InProc_NavigationBar.cs b/src/VisualStudio/IntegrationTest/TestUtilities/InProcess/Editor_InProc_NavigationBar.cs
deleted file mode 100644
index 31ce476ac41c2..0000000000000
--- a/src/VisualStudio/IntegrationTest/TestUtilities/InProcess/Editor_InProc_NavigationBar.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using Microsoft.CodeAnalysis.UnitTests;
-using Microsoft.VisualStudio.Editor;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Text.Editor;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Roslyn.Utilities;
-using IObjectWithSite = Microsoft.VisualStudio.OLE.Interop.IObjectWithSite;
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
-
-namespace Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess
-{
- internal partial class Editor_InProc
- {
- public string[] GetNavBarItems(int comboBoxIndex)
- => ExecuteOnActiveView(v =>
- GetNavigationBarComboBoxes(v)[comboBoxIndex]
- .Items
- .OfType
public void SelectItemAtPath(params string[] path)
=> _inProc.SelectItemAtPath(path);
-
- public void AddStandaloneFile(string fileName)
- => _inProc.AddStandaloneFile(fileName);
}
}
diff --git a/src/VisualStudio/IntegrationTest/TestUtilities/OutOfProcess/VisualStudioWorkspace_OutOfProc.cs b/src/VisualStudio/IntegrationTest/TestUtilities/OutOfProcess/VisualStudioWorkspace_OutOfProc.cs
index f5d7ac92ddceb..7e0478bfa7af7 100644
--- a/src/VisualStudio/IntegrationTest/TestUtilities/OutOfProcess/VisualStudioWorkspace_OutOfProc.cs
+++ b/src/VisualStudio/IntegrationTest/TestUtilities/OutOfProcess/VisualStudioWorkspace_OutOfProc.cs
@@ -55,12 +55,6 @@ public void SetEnableDecompilationOption(bool value)
SetGlobalOption(WellKnownGlobalOption.MetadataAsSourceOptions_NavigateToDecompiledSources, language: null, value);
}
- public void SetArgumentCompletionSnippetsOption(bool value)
- {
- SetGlobalOption(WellKnownGlobalOption.CompletionViewOptions_EnableArgumentCompletionSnippets, LanguageNames.CSharp, value);
- SetGlobalOption(WellKnownGlobalOption.CompletionViewOptions_EnableArgumentCompletionSnippets, LanguageNames.VisualBasic, value);
- }
-
public void SetTriggerCompletionInArgumentLists(bool value)
=> SetGlobalOption(WellKnownGlobalOption.CompletionOptions_TriggerInArgumentLists, LanguageNames.CSharp, value);
diff --git a/src/VisualStudio/IntegrationTest/TestUtilities/VisualStudioInstance.cs b/src/VisualStudio/IntegrationTest/TestUtilities/VisualStudioInstance.cs
index 6bb5f942181ec..bb85b8ebcc47a 100644
--- a/src/VisualStudio/IntegrationTest/TestUtilities/VisualStudioInstance.cs
+++ b/src/VisualStudio/IntegrationTest/TestUtilities/VisualStudioInstance.cs
@@ -52,8 +52,6 @@ public class VisualStudioInstance
public ImmediateWindow_OutOfProc ImmediateWindow { get; }
- public InlineRenameDialog_OutOfProc InlineRenameDialog { get; set; }
-
public LocalsWindow_OutOfProc LocalsWindow { get; set; }
public MoveToNamespaceDialog_OutOfProc MoveToNamespaceDialog { get; }
public PickMembersDialog_OutOfProc PickMembersDialog { get; set; }
@@ -131,7 +129,6 @@ public VisualStudioInstance(Process hostProcess, DTE dte, ImmutableHashSet CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces,
WellKnownGlobalOption.CompletionOptions_TriggerInArgumentLists => CompletionOptionsStorage.TriggerInArgumentLists,
- WellKnownGlobalOption.CompletionViewOptions_EnableArgumentCompletionSnippets => CompletionViewOptionsStorage.EnableArgumentCompletionSnippets,
- WellKnownGlobalOption.InlineRenameSessionOptions_RenameInComments => InlineRenameSessionOptionsStorage.RenameInComments,
- WellKnownGlobalOption.InlineRenameSessionOptions_RenameInStrings => InlineRenameSessionOptionsStorage.RenameInStrings,
- WellKnownGlobalOption.InlineRenameSessionOptions_RenameOverloads => InlineRenameSessionOptionsStorage.RenameOverloads,
- WellKnownGlobalOption.InlineRenameSessionOptions_RenameFile => InlineRenameSessionOptionsStorage.RenameFile,
- WellKnownGlobalOption.InlineRenameSessionOptions_PreviewChanges => InlineRenameSessionOptionsStorage.PreviewChanges,
WellKnownGlobalOption.MetadataAsSourceOptions_NavigateToDecompiledSources => MetadataAsSourceOptionsStorage.NavigateToDecompiledSources,
- WellKnownGlobalOption.WorkspaceConfigurationOptions_EnableOpeningSourceGeneratedFilesInWorkspace => WorkspaceConfigurationOptionsStorage.EnableOpeningSourceGeneratedFilesInWorkspace,
- WellKnownGlobalOption.SolutionCrawlerOptions_BackgroundAnalysisScopeOption => SolutionCrawlerOptionsStorage.BackgroundAnalysisScopeOption,
- WellKnownGlobalOption.SolutionCrawlerOptions_CompilerDiagnosticsScopeOption => SolutionCrawlerOptionsStorage.CompilerDiagnosticsScopeOption,
- WellKnownGlobalOption.InlineRenameSessionOptions_UseNewUI => InlineRenameUIOptionsStorage.UseInlineAdornment,
_ => throw ExceptionUtilities.Unreachable()
};