Skip to content

Misleading completion for cref in inheritdoc #76579

@Youssef1313

Description

@Youssef1313

Version Used: VS 17.13 Preview 1

Steps to Reproduce:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <GenerateDocumentationFile>true</GenerateDocumentationFile> <!-- important for repro -->
  </PropertyGroup>

</Project>
Console.WriteLine();

public class C
{
    /// <summary>Whatever</summary>
    public static void M1<T>(T? expected)
    {
    }

    /// <inheritdoc cref="M1$$" />
    public static void M2()
    {
    }
}

Trigger completion in place of $$, it completes to M1{T}(T?) which produces:

CS1574 XML comment has cref attribute 'M1{T}(T?)' that could not be resolved

It should have completed to M1{T}(T) (unless the completion is correct and this is a compiler bug?)

NOTE: Some scenarios that are working currently correctly but need to be taken with care to not regress them

If you have:

/// <summary>Whatever</summary>
public static void M1<T>(T? expected) where T : struct
{
}

/// <summary>Whatever 2</summary>
public static void M1<T>(T expected) where T : struct
{
}

Then completion for both T and T? should be offered (and is currently the case that should not be regressed).

Similarly, even if only this overload exists:

/// <summary>Whatever</summary>
public static void M1<T>(T? expected) where T : struct
{
}

The completion should use T?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-IDEBughelp wantedThe issue is "up for grabs" - add a comment if you are interested in working on it

    Type

    No type

    Projects

    Status

    InQueue

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions