未验证 提交 c43808a3 编写于 作者: S Sam Harwell 提交者: GitHub

Merge pull request #31844 from CyrusNajmabadi/opNames

Use recommended msdn names for parameters when generating operators.
...@@ -1056,14 +1056,14 @@ public override bool Equals(object obj) ...@@ -1056,14 +1056,14 @@ public override bool Equals(object obj)
s == program.s; s == program.s;
} }
public static bool operator ==(Program program1, Program program2) public static bool operator ==(Program left, Program right)
{ {
return EqualityComparer<Program>.Default.Equals(program1, program2); return EqualityComparer<Program>.Default.Equals(left, right);
} }
public static bool operator !=(Program program1, Program program2) public static bool operator !=(Program left, Program right)
{ {
return !(program1 == program2); return !(left == right);
} }
}", }",
chosenSymbols: null, chosenSymbols: null,
...@@ -1096,8 +1096,8 @@ public override bool Equals(object obj) ...@@ -1096,8 +1096,8 @@ public override bool Equals(object obj)
s == program.s; s == program.s;
} }
public static bool operator ==(Program program1, Program program2) => EqualityComparer<Program>.Default.Equals(program1, program2); public static bool operator ==(Program left, Program right) => EqualityComparer<Program>.Default.Equals(left, right);
public static bool operator !=(Program program1, Program program2) => !(program1 == program2); public static bool operator !=(Program left, Program right) => !(left == right);
}", }",
chosenSymbols: null, chosenSymbols: null,
optionsCallback: options => EnableOption(options, GenerateOperatorsId), optionsCallback: options => EnableOption(options, GenerateOperatorsId),
...@@ -1117,7 +1117,7 @@ class Program ...@@ -1117,7 +1117,7 @@ class Program
public string s; public string s;
[||] [||]
public static bool operator ==(Program program1, Program program2) => true; public static bool operator ==(Program left, Program right) => true;
}", }",
@" @"
using System.Collections.Generic; using System.Collections.Generic;
...@@ -1133,7 +1133,7 @@ public override bool Equals(object obj) ...@@ -1133,7 +1133,7 @@ public override bool Equals(object obj)
s == program.s; s == program.s;
} }
public static bool operator ==(Program program1, Program program2) => true; public static bool operator ==(Program left, Program right) => true;
}", }",
chosenSymbols: null, chosenSymbols: null,
optionsCallback: options => Assert.Null(options.FirstOrDefault(i => i.Id == GenerateOperatorsId))); optionsCallback: options => Assert.Null(options.FirstOrDefault(i => i.Id == GenerateOperatorsId)));
...@@ -1169,14 +1169,14 @@ public override bool Equals(object obj) ...@@ -1169,14 +1169,14 @@ public override bool Equals(object obj)
return s == program.s; return s == program.s;
} }
public static bool operator ==(Program program1, Program program2) public static bool operator ==(Program left, Program right)
{ {
return program1.Equals(program2); return left.Equals(right);
} }
public static bool operator !=(Program program1, Program program2) public static bool operator !=(Program left, Program right)
{ {
return !(program1 == program2); return !(left == right);
} }
}", }",
chosenSymbols: null, chosenSymbols: null,
......
...@@ -267,12 +267,12 @@ Class Program ...@@ -267,12 +267,12 @@ Class Program
s = program.s s = program.s
End Function End Function
Public Shared Operator =(program1 As Program, program2 As Program) As Boolean Public Shared Operator =(left As Program, right As Program) As Boolean
Return EqualityComparer(Of Program).Default.Equals(program1, program2) Return EqualityComparer(Of Program).Default.Equals(left, right)
End Operator End Operator
Public Shared Operator <>(program1 As Program, program2 As Program) As Boolean Public Shared Operator <>(left As Program, right As Program) As Boolean
Return Not program1 = program2 Return Not left = right
End Operator End Operator
End Class", End Class",
chosenSymbols:=Nothing, chosenSymbols:=Nothing,
...@@ -289,7 +289,7 @@ Class Program ...@@ -289,7 +289,7 @@ Class Program
Public s As String Public s As String
[||] [||]
Public Shared Operator =(program1 As Program, program2 As Program) As Boolean Public Shared Operator =(left As Program, right As Program) As Boolean
Return True Return True
End Operator End Operator
End Class", End Class",
...@@ -305,7 +305,7 @@ Class Program ...@@ -305,7 +305,7 @@ Class Program
s = program.s s = program.s
End Function End Function
Public Shared Operator =(program1 As Program, program2 As Program) As Boolean Public Shared Operator =(left As Program, right As Program) As Boolean
Return True Return True
End Operator End Operator
End Class", End Class",
...@@ -338,12 +338,12 @@ Structure Program ...@@ -338,12 +338,12 @@ Structure Program
Return s = program.s Return s = program.s
End Function End Function
Public Shared Operator =(program1 As Program, program2 As Program) As Boolean Public Shared Operator =(left As Program, right As Program) As Boolean
Return program1.Equals(program2) Return left.Equals(right)
End Operator End Operator
Public Shared Operator <>(program1 As Program, program2 As Program) As Boolean Public Shared Operator <>(left As Program, right As Program) As Boolean
Return Not program1 = program2 Return Not left = right
End Operator End Operator
End Structure", End Structure",
chosenSymbols:=Nothing, chosenSymbols:=Nothing,
......
...@@ -19,6 +19,11 @@ internal partial class GenerateEqualsAndGetHashCodeFromMembersCodeRefactoringPro ...@@ -19,6 +19,11 @@ internal partial class GenerateEqualsAndGetHashCodeFromMembersCodeRefactoringPro
{ {
private partial class GenerateEqualsAndGetHashCodeAction : CodeAction private partial class GenerateEqualsAndGetHashCodeAction : CodeAction
{ {
// https://docs.microsoft.com/dotnet/standard/design-guidelines/naming-parameters#naming-operator-overload-parameters
// DO use left and right for binary operator overload parameter names if there is no meaning to the parameters.
private const string LeftName = "left";
private const string RightName = "right";
private readonly bool _generateEquals; private readonly bool _generateEquals;
private readonly bool _generateGetHashCode; private readonly bool _generateGetHashCode;
private readonly bool _implementIEquatable; private readonly bool _implementIEquatable;
...@@ -139,31 +144,29 @@ private async Task AddOperatorsAsync(List<IMethodSymbol> members, CancellationTo ...@@ -139,31 +144,29 @@ private async Task AddOperatorsAsync(List<IMethodSymbol> members, CancellationTo
var generator = _document.GetLanguageService<SyntaxGenerator>(); var generator = _document.GetLanguageService<SyntaxGenerator>();
var localName = _containingType.GetLocalName(); var localName = _containingType.GetLocalName();
var left = localName + "1";
var right = localName + "2";
var parameters = ImmutableArray.Create( var parameters = ImmutableArray.Create(
CodeGenerationSymbolFactory.CreateParameterSymbol(_containingType, left), CodeGenerationSymbolFactory.CreateParameterSymbol(_containingType, LeftName),
CodeGenerationSymbolFactory.CreateParameterSymbol(_containingType, right)); CodeGenerationSymbolFactory.CreateParameterSymbol(_containingType, RightName));
members.Add(CreateEqualityOperator(compilation, generator, left, right, parameters)); members.Add(CreateEqualityOperator(compilation, generator, parameters));
members.Add(CreateInequalityOperator(compilation, generator, left, right, parameters)); members.Add(CreateInequalityOperator(compilation, generator, parameters));
} }
private IMethodSymbol CreateEqualityOperator(Compilation compilation, SyntaxGenerator generator, string left, string right, ImmutableArray<IParameterSymbol> parameters) private IMethodSymbol CreateEqualityOperator(Compilation compilation, SyntaxGenerator generator, ImmutableArray<IParameterSymbol> parameters)
{ {
var expression = _containingType.IsValueType var expression = _containingType.IsValueType
? generator.InvocationExpression( ? generator.InvocationExpression(
generator.MemberAccessExpression( generator.MemberAccessExpression(
generator.IdentifierName(left), generator.IdentifierName(LeftName),
generator.IdentifierName(EqualsName)), generator.IdentifierName(EqualsName)),
generator.IdentifierName(right)) generator.IdentifierName(RightName))
: generator.InvocationExpression( : generator.InvocationExpression(
generator.MemberAccessExpression( generator.MemberAccessExpression(
generator.GetDefaultEqualityComparer(compilation, _containingType), generator.GetDefaultEqualityComparer(compilation, _containingType),
generator.IdentifierName(EqualsName)), generator.IdentifierName(EqualsName)),
generator.IdentifierName(left), generator.IdentifierName(LeftName),
generator.IdentifierName(right)); generator.IdentifierName(RightName));
return CodeGenerationSymbolFactory.CreateOperatorSymbol( return CodeGenerationSymbolFactory.CreateOperatorSymbol(
default, default,
...@@ -175,12 +178,12 @@ private IMethodSymbol CreateEqualityOperator(Compilation compilation, SyntaxGene ...@@ -175,12 +178,12 @@ private IMethodSymbol CreateEqualityOperator(Compilation compilation, SyntaxGene
ImmutableArray.Create(generator.ReturnStatement(expression))); ImmutableArray.Create(generator.ReturnStatement(expression)));
} }
private IMethodSymbol CreateInequalityOperator(Compilation compilation, SyntaxGenerator generator, string left, string right, ImmutableArray<IParameterSymbol> parameters) private IMethodSymbol CreateInequalityOperator(Compilation compilation, SyntaxGenerator generator, ImmutableArray<IParameterSymbol> parameters)
{ {
var expression = generator.LogicalNotExpression( var expression = generator.LogicalNotExpression(
generator.ValueEqualsExpression( generator.ValueEqualsExpression(
generator.IdentifierName(left), generator.IdentifierName(LeftName),
generator.IdentifierName(right))); generator.IdentifierName(RightName)));
return CodeGenerationSymbolFactory.CreateOperatorSymbol( return CodeGenerationSymbolFactory.CreateOperatorSymbol(
default, default,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册