VB -> C#: Base constructor calls with noncanonical casing produce invalid C#

Aberta Para iniciantes
#1,301 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 4 dias

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
csharp
Domínio
tooling

Direção de pesquisa

Comece localizando o reconhecimento, pelo conversor, dos inicializadores do construtor base de VB.NET; a issue diz que atualmente ele depende de uma comparação de texto que diferencia maiúsculas de minúsculas. Adicione testes de regressão para MyBase.new(value) com maiúsculas e minúsculas misturadas e para a forma sem parâmetros MyBase.new. O trabalho estará concluído quando ambos produzirem um inicializador de construtor C# em vez de uma chamada a base.ctor.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

VB -> C#
VB.Net input code
Public Class DataSet1
    Inherits Global.System.Data.DataSet

    Public Sub New(value As String)
        MyBase.new(value)
    End Sub
End Class
Erroneous output

The base constructor call is emitted as a method call inside the constructor body:

public partial class DataSet1 : System.Data.DataSet
{
    public DataSet1(string value)
    {
        base.ctor(value);
    }
}

This produces compiler error CS0117 because DataSet does not contain a definition for ctor.

Expected output
public partial class DataSet1 : System.Data.DataSet
{
    public DataSet1(string value) : base(value)
    {
    }
}
Details
  • Product: Visual Studio extension, built locally from master.
  • Version: 10.0.1 (local development build).
  • Previous working version: No.

VB.NET is case-insensitive, so MyBase.New(value), MyBase.new(value), and MyBase.nEw(value) are equivalent. However, the converter uses a case-sensitive text comparison when recognizing the constructor initializer.

The same issue occurs with parameterless calls written without parentheses, such as MyBase.new.

A workaround is to use the canonical casing, MyBase.New.

Linguagem predominante
C#
Estrelas
917
Forks
243
Merge médio
4d 42min
PRs com merge (30d)
11

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de icsharpcode/CodeConverter

Todas as issues de icsharpcode/CodeConverter

Issues semelhantes

Mais issues de C#

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.