dotnet/roslyn

C# Change signature refactoring generates wrong syntax for named arguments in attribute constructor calls

オープン

#50,940 opened on 2021/02/01

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)C# (4,257 件のフォーク)batch import
Area-IDEBugIDE-CodeStylehelp wanted

Repository metrics

Stars
 (20,414 個のスター)
PR merge metrics
 (平均マージ 6d 17h) (30d で 256 merged PRs)

説明

This issue has been moved from a ticket on Developer Community.


[severity:It's more difficult to complete my work] When using the "Change signature" refactoring in C# to add a new parameter to a constructor of an attribute class and requesting to inject a value using a named argument at existing call sites, the generated syntax for that argument at the call sites where the attribute is applied to a member is wrong: using the = symbol for assigning the argument value, where it should be using the : symbol.

Steps to reproduce:

  1. Create a new C# Console App project (.NET Framework 4.8).
  2. Replace the Program class in Program.cs with the following code:
	class Program
	{
		[Foo(a: 5)]
		static void Main(string[] args)
		{
		}

class FooAttribute : Attribute
		{
			public FooAttribute(int a)
			{
			}
		}
	}
  1. Invoke the "Change signature" refactoring on the FooAttribute constructor.
  2. Press the Add button.
  3. Fill out the dialog as follows: Type name: int, Parameter name: b, Parameter kind: Required, Value to inject at all call sites: Value 2, "Use named argument" checked
  4. Press the OK button.
  5. Press the OK button of the change signature dialog.

Expected result at the call site:

		[Foo(a: 5, b: 2)]

Actual result at the call site:

		[Foo(a: 5, b = 2)]

Original Comments

Feedback Bot on 1/31/2021, 07:39 PM:


Original Solutions

(no solutions)

コントリビューターガイド