dotnet/roslyn

Remove unused parameter (IDE0060) on parameter used by [InterpolatedStringHandlerArgument]

Open

#62,077 opened on Jun 22, 2022

View on GitHub
 (2 comments) (0 reactions) (0 assignees)C# (4,257 forks)batch import
Area-IDEBugFeature - IDE0060IDE-CodeStylehelp wanted

Repository metrics

Stars
 (20,414 stars)
PR merge metrics
 (Avg merge 6d 17h) (256 merged PRs in 30d)

Description

Version Used: Visual Studio 2022 Community 17.2.4 Microsoft (R) Visual C# Compiler version 4.2.0-4.22281.5 (8d3180e5)

Steps to Reproduce:

SharpLab example

using System;
using System.Runtime.CompilerServices;
using System.Text;

public class Program
{
    public void Test(IFormatProvider provider)
    {
        AppendLine(provider, $"test");
    }
    
    // unexpected IDE0060 on 'provider'
    public void AppendLine(IFormatProvider provider, [InterpolatedStringHandlerArgument("provider")] ref DebugMarkerInterpolatedStringHandler name)
    {
        Console.WriteLine(name.GetString());
    }
}

[InterpolatedStringHandler]
public unsafe ref struct DebugMarkerInterpolatedStringHandler
{
    private StringBuilder.AppendInterpolatedStringHandler _innerHandler;
    private StringBuilder _stringBuilder;
    
    public DebugMarkerInterpolatedStringHandler(
        int literalLength,
        int formattedCount,
        IFormatProvider provider)
    {
        _stringBuilder = new StringBuilder();
        _innerHandler = new StringBuilder.AppendInterpolatedStringHandler(literalLength, formattedCount, _stringBuilder, provider);
    }

    public string GetString()
    {
        return _stringBuilder.ToString();
    }

    public void AppendLiteral(string value) => _innerHandler.AppendLiteral(value);
    public void AppendFormatted<T>(T value) => _innerHandler.AppendFormatted(value);
    public void AppendFormatted<T>(T value, string format) => _innerHandler.AppendFormatted(value, format);
    public void AppendFormatted<T>(T value, int alignment) => _innerHandler.AppendFormatted(value, alignment);
    public void AppendFormatted<T>(T value, int alignment, string format) => _innerHandler.AppendFormatted(value, alignment, format);
    public void AppendFormatted(ReadOnlySpan<char> value) => _innerHandler.AppendFormatted(value);
    public void AppendFormatted(ReadOnlySpan<char> value, int alignment = 0, string format = null) => _innerHandler.AppendFormatted(value, alignment, format);
    public void AppendFormatted(string value) => _innerHandler.AppendFormatted(value);
    public void AppendFormatted(string value, int alignment = 0, string format = null) => _innerHandler.AppendFormatted(value, alignment, format);
    public void AppendFormatted(object value, int alignment = 0, string format = null) => _innerHandler.AppendFormatted(value, alignment, format);
}

Expected Behavior: No complaint from compiler.

Actual Behavior: IDE0060 appears even though the format provider is used.

cc @333fred

Contributor guide