Pegjs: Recurso: Exigindo tempo de execução de arquivos pegjs

Criado em 3 dez. 2019  ·  8Comentários  ·  Fonte: pegjs/pegjs

Tipo de problema

  • Relatório de Bug: não
  • Solicitação de recurso: sim
  • Pergunta: não
  • Não é um problema: não

Pré-requisitos

  • Você pode reproduzir o problema?: n/d
  • Você pesquisou os problemas do repositório?: sim
  • Você verificou os fóruns?: Não vejo links para fóruns
  • Você realizou uma pesquisa na web (google, yahoo, etc)?: sim

Descrição

Embora possa haver outros casos de uso para poder exigir arquivos PEGJS diretamente no Node em tempo de execução, a principal intenção desse problema é a cobertura de código (por exemplo, para testes Mocha).

Este último caso de uso de cobertura de código precisaria primeiro de #93 (fornecendo mapas de origem) para ser implementado primeiro. Se implementado, pode-se evitar a necessidade de uma cópia instrumentada separada de seus testes + código peg.

Vejo que require.extensions do Node é usado para fazer isso por ts-node , e embora require.extensions esteja tecnicamente obsoleto no Node , conforme as discussões em torno de https://stackoverflow.com/ question/28884377/better-way-to-require-extensions-with-node-js (particularmente na veia desta resposta ), parece ser o único mecanismo prático aqui e, de acordo com o comentário, não acho temos que nos preocupar com o Node quebrando o Babel.

feature

Comentários muito úteis

@brettz9 - Eu estava prestes a dizer "estou falando com outra pessoa sobre essa mesma coisa" e então percebi que é você, então vou encerrar esta instância desta discussão em favor do semelhante que estamos tendo em # 633, se isso parece bom para você

Estou escrevendo algo longo lá atualmente

Todos 8 comentários

Prefiro não permitir isso.

@ExE-Boss: Para nosso caso de uso, seria apenas para teste (também, não tenho certeza se você notou que este é o repositório pegjs.)

Eu sei que este é o repositório PEG.js , e é exatamente por isso que me oponho a implementá-lo aqui.

Ok, legal ... (às vezes posso seguir um link para outro repositório sem perceber que não é um problema separado, então apenas certifique-se) :)

Não há mais recursos até as duas linhas de 2017 que nos permitem usar os módulos es6 e as setas estão fora.

Além disso, parece que o que você realmente quer é testar

Você não coloca os ganchos de cobertura na biblioteca. Você os coloca no arquivo de teste.

Se você quiser cobertura, você pode instalar jest e pronto. Ele inclui automaticamente tudo o que você precisa e nenhuma modificação precisa ocorrer na biblioteca. As ferramentas de cobertura são projetadas para serem adicionadas por fora, não por dentro.

Esse gerador de analisador não deve ficar vinculado de repente ao ecossistema de pacotes node.js como um recurso interno.

Além disso, a cobertura é um falso desejo de um analisador. Considere o seguinte:

Food
    / "Peanuts"
    / "Shellfish"
    / "Rice"

Agora, basta escrever um teste para o arroz. peg vai tentar Peanuts primeiro, então quando não funcionar peg vai tentar Shellfish , então peg vai tentar Rice

Observe que você escreveu apenas um teste para Rice , mas está mostrando incorretamente a cobertura para todos os três

A maneira como um analisador packrat (honestamente, o jeito que eu consigo pensar) funciona significa que a cobertura é falsa

Não perca seu tempo

No que diz respeito a colocar hooks de cobertura na biblioteca, normalmente são colocados em seus testes, sim, mas quando um analisador é gerado automaticamente com algumas ramificações tão relevantes e outras não, então faz sentido que o autogerador produza isso para que os projetos que não desejam ignorar seu arquivo analisador possam fazê-lo. Não está relacionado à cobertura da biblioteca pegjs (que tem seus próprios requisitos de cobertura), mas à cobertura do uso da gramática pelo analisador gerado.

No seu exemplo, o analisador gerado possui linhas de código para verificar "Peanuts", "Shellfish" e "Rice" e, se não forem cobertos, podem ser relatados.

Torna-se mais uma questão em aberto se uma regra como ruleA = ruleB / ruleC deve verificar se "ruleA" tem casos com "ruleB" e "ruleC", ou se é suficiente verificar que "ruleA", "ruleB" , e "ruleC" são cobertos de alguma forma (por exemplo, se houver um ruleD = ruleB / ruleF , sua cobertura de ruleB pode ser vista por alguns projetos como suficiente para evitar a necessidade de verificar se está coberta dentro "ruleA", especialmente se houver muitas alternativas e combinações).

Quanto a esse problema, pode haver um arquivo de entrada que adicionou o recurso e outro que não.

@brettz9 - Eu estava prestes a dizer "estou falando com outra pessoa sobre essa mesma coisa" e então percebi que é você, então vou encerrar esta instância desta discussão em favor do semelhante que estamos tendo em # 633, se isso parece bom para você

Estou escrevendo algo longo lá atualmente

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mattkanwisher picture mattkanwisher  ·  5Comentários

futagoza picture futagoza  ·  13Comentários

dmajda picture dmajda  ·  20Comentários

Coffee2CodeNL picture Coffee2CodeNL  ·  13Comentários

doersino picture doersino  ·  15Comentários