dotnet/roslyn

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

开放

#50,940 创建于 2021年2月1日

 (0 条评论) (0 个反应) (0 位负责人)C# (4,257 个派生)batch import
Area-IDEBugIDE-CodeStylehelp wanted

仓库指标

星标
 (20,414 个星标)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 256 个 PR)

描述

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)

贡献者指南