command-line-api icon indicating copy to clipboard operation
command-line-api copied to clipboard

error in name formation during in method XmlDocReader.TryGetMethodDescription

Open hessenar opened this issue 3 years ago • 3 comments

In class XmlDocReader, method TryGetMethodDescription(MethodInfo info, out CommandHelpMetadata commandHelpMetadata) has an error. If there are no parameters in the input parameter "info", then the variable "name" is formed incorrectly(with round empty bracket), and we try to get take "member" from "_members" using incorrect name. now:

        var sb = new StringBuilder();

        sb.Append("M:");
        AppendTypeName(sb, info.DeclaringType);
        sb.Append(".")
          .Append(info.Name)
          .Append("(");

        bool first = true;
        foreach (ParameterInfo param in info.GetParameters())
        {
            if (first)
            {
                first = false;
            }
            else
            {
                sb.Append(",");
            }

            AppendTypeName(sb, param.ParameterType);
        }

        sb.Append(")");

        string name = sb.ToString();

        XElement member = _members.Elements("member")
                                 .FirstOrDefault(m => string.Equals(m.Attribute("name")?.Value, name));

i suggest doing this:

        var sb = new StringBuilder();

        sb.Append("M:");
        AppendTypeName(sb, info.DeclaringType);
        sb.Append(".")
          .Append(info.Name);

        var parameters = info.GetParameters();
        if (parameters.Length > 0)
        {
            sb.Append("(");
            bool first = true;
            foreach (ParameterInfo param in info.GetParameters())
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sb.Append(",");
                }

                AppendTypeName(sb, param.ParameterType);
            }

            sb.Append(")");
        }

        string name = sb.ToString();

        XElement member = _members.Elements("member")
                                 .FirstOrDefault(m => string.Equals(m.Attribute("name")?.Value, name));

hessenar avatar Jun 30 '22 15:06 hessenar

Would you consider submitting a PR?

jonsequitur avatar Jul 01 '22 00:07 jonsequitur

Would you consider submitting a PR?

ok, https://github.com/dotnet/command-line-api/pull/1789

hessenar avatar Jul 01 '22 12:07 hessenar