提交 751de0f9 编写于 作者: D David Poeschl

Disallow Rename Tracking on named tuple elements

Fixes
https://devdiv.visualstudio.com/DevDiv/_workitems?_a=edit&id=371205
上级 1ee8539e
...@@ -179,6 +179,13 @@ private async Task<TriggerIdentifierKind> DetermineIfRenamableIdentifierAsync(Sn ...@@ -179,6 +179,13 @@ private async Task<TriggerIdentifierKind> DetermineIfRenamableIdentifierAsync(Sn
} }
else else
{ {
// We do not yet support renaming (inline rename or rename tracking) on
// named tuple elements.
if (renameSymbolInfo.Symbols.Single().ContainingType?.IsTupleType() == true)
{
return TriggerIdentifierKind.NotRenamable;
}
return await DetermineIfRenamableSymbolAsync(renameSymbolInfo.Symbols.Single(), document, token).ConfigureAwait(false); return await DetermineIfRenamableSymbolAsync(renameSymbolInfo.Symbols.Single(), document, token).ConfigureAwait(false);
} }
} }
......
...@@ -1284,15 +1284,16 @@ End Class ...@@ -1284,15 +1284,16 @@ End Class
[WpfFact] [WpfFact]
[Trait(Traits.Feature, Traits.Features.RenameTracking)] [Trait(Traits.Feature, Traits.Features.RenameTracking)]
public async Task RenameExplicitTupleField() [WorkItem(371205, "https://devdiv.visualstudio.com/DevDiv/_workitems?_a=edit&id=371205")]
public async Task RenameTrackingNotOnExplicitTupleReturnDeclaration_CSharp()
{ {
var code = @" var code = @"
class C class C
{ {
void M() void M()
{ {
(int Item1, int) x = (1, 2); (int abc$$, int) x = (1, 2);
var y = x.Item1$$; var y = x.abc;
} }
}"; }";
using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.CSharp)) using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.CSharp))
...@@ -1300,32 +1301,20 @@ void M() ...@@ -1300,32 +1301,20 @@ void M()
state.EditorOperations.Backspace(); state.EditorOperations.Backspace();
state.EditorOperations.Backspace(); state.EditorOperations.Backspace();
await state.AssertTag("Item1", "Ite", invokeAction: true);
// Make sure the rename completed
var expectedCode = @"
class C
{
void M()
{
(int Ite, int) x = (1, 2);
var y = x.Ite;
}
}";
Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText());
await state.AssertNoTag(); await state.AssertNoTag();
} }
} }
[WpfFact] [WpfFact]
[Trait(Traits.Feature, Traits.Features.RenameTracking)] [Trait(Traits.Feature, Traits.Features.RenameTracking)]
public async Task RenameExplicitTupleFieldVB() [WorkItem(371205, "https://devdiv.visualstudio.com/DevDiv/_workitems?_a=edit&id=371205")]
public async Task RenameTrackingNotOnExplicitTupleReturnDeclaration_VB()
{ {
var code = @" var code = @"
class C class C
Sub M() Sub M()
Dim x as (Item1 as integer, int Item2 as integer) = (1, 2) Dim x as (abc$$ as integer, int Item2 as integer) = (1, 2)
Dim y = x.Item1$$ Dim y = x.abc
End Sub End Sub
End Class"; End Class";
using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.VisualBasic)) using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.VisualBasic))
...@@ -1333,148 +1322,88 @@ End Sub ...@@ -1333,148 +1322,88 @@ End Sub
state.EditorOperations.Backspace(); state.EditorOperations.Backspace();
state.EditorOperations.Backspace(); state.EditorOperations.Backspace();
await state.AssertTag("Item1", "Ite", invokeAction: true);
// Make sure the rename completed
var expectedCode = @"
class C
Sub M()
Dim x as (Ite as integer, int Item2 as integer) = (1, 2)
Dim y = x.Ite
End Sub
End Class";
Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText());
await state.AssertNoTag(); await state.AssertNoTag();
} }
} }
[WpfFact] [WpfFact]
[Trait(Traits.Feature, Traits.Features.RenameTracking)] [Trait(Traits.Feature, Traits.Features.RenameTracking)]
public async Task RenameExplicitTupleField01() [WorkItem(371205, "https://devdiv.visualstudio.com/DevDiv/_workitems?_a=edit&id=371205")]
public async Task RenameTrackingNotOnExplicitTupleFieldReference_CSharp()
{ {
var code = @" var code = @"
class C class C
{ {
void M() void M()
{ {
(int Ite, int) x = (1, 2); (int abc, int) x = (1, 2);
var y = x.Ite$$; var y = x.abc$$;
} }
}"; }";
using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.CSharp)) using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.CSharp))
{ {
state.EditorOperations.InsertText("m1"); state.EditorOperations.Backspace();
state.EditorOperations.Backspace();
await state.AssertTag("Ite", "Item1", invokeAction: true);
// Make sure the rename completed
var expectedCode = @"
class C
{
void M()
{
(int Item1, int) x = (1, 2);
var y = x.Item1;
}
}";
Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText());
await state.AssertNoTag(); await state.AssertNoTag();
} }
} }
[WpfFact] [WpfFact]
[Trait(Traits.Feature, Traits.Features.RenameTracking)] [Trait(Traits.Feature, Traits.Features.RenameTracking)]
public async Task RenameExplicitTupleField01VB() [WorkItem(371205, "https://devdiv.visualstudio.com/DevDiv/_workitems?_a=edit&id=371205")]
public async Task RenameTrackingNotOnExplicitTupleFieldReference_VB()
{ {
var code = @" var code = @"
class C class C
Sub M() Sub M()
Dim x as (Ite as Integer, Item2 as Integer) = (1, 2) Dim x as (abc as integer, int Item2 as integer) = (1, 2)
var y = x.Ite$$ Dim y = x.abc$$
End Sub End Sub
End Class"; End Class";
using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.VisualBasic)) using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.VisualBasic))
{ {
state.EditorOperations.InsertText("m1"); state.EditorOperations.Backspace();
state.EditorOperations.Backspace();
await state.AssertTag("Ite", "Item1", invokeAction: true);
// Make sure the rename completed
var expectedCode = @"
class C
Sub M()
Dim x as (Item1 as Integer, Item2 as Integer) = (1, 2)
var y = x.Item1
End Sub
End Class";
Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText());
await state.AssertNoTag(); await state.AssertNoTag();
} }
} }
[WpfFact] [WpfFact]
[Trait(Traits.Feature, Traits.Features.RenameTracking)] [Trait(Traits.Feature, Traits.Features.RenameTracking)]
public async Task RenameExplicitTupleFieldExtended() [WorkItem(371205, "https://devdiv.visualstudio.com/DevDiv/_workitems?_a=edit&id=371205")]
public async Task RenameTrackingNotOnExplicitTupleElementsInDeclarations_CSharp()
{ {
var code = @" var code = @"
class C class C
{ {
void M() void M()
{ {
(int, int, int, int, int, int, int, int, int Item9, int) x = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); var t = (x$$: 1, y: 2);
var y = x.Item9$$;
} }
}"; }";
using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.CSharp)) using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.CSharp))
{ {
state.EditorOperations.Backspace(); state.EditorOperations.InsertText("2");
state.EditorOperations.Backspace();
await state.AssertTag("Item9", "Ite", invokeAction: true);
// Make sure the rename completed
var expectedCode = @"
class C
{
void M()
{
(int, int, int, int, int, int, int, int, int Ite, int) x = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
var y = x.Ite;
}
}";
Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText());
await state.AssertNoTag(); await state.AssertNoTag();
} }
} }
[WpfFact] [WpfFact]
[Trait(Traits.Feature, Traits.Features.RenameTracking)] [Trait(Traits.Feature, Traits.Features.RenameTracking)]
public async Task RenameExplicitTupleFieldExtendedVB() [WorkItem(371205, "https://devdiv.visualstudio.com/DevDiv/_workitems?_a=edit&id=371205")]
public async Task RenameTrackingNotOnExplicitTupleElementsInDeclarations_VB()
{ {
var code = @" var code = @"
class C Class C
Sub M() Sub M()
Dim x as (Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Item9 As Integer, Integer) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Dim t = (x$$:=1, y:=2)
var y = x.Item9$$;
End Sub End Sub
End Class"; End Class";
using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.VisualBasic)) using (var state = await RenameTrackingTestState.CreateAsync(code, LanguageNames.VisualBasic))
{ {
state.EditorOperations.Backspace(); state.EditorOperations.InsertText("2");
state.EditorOperations.Backspace();
await state.AssertTag("Item9", "Ite", invokeAction: true);
// Make sure the rename completed
var expectedCode = @"
class C
Sub M()
Dim x as (Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Ite As Integer, Integer) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
var y = x.Ite;
End Sub
End Class";
Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText());
await state.AssertNoTag(); await state.AssertNoTag();
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册