Pegjs: Fonctionnalité : Exécution nécessitant des fichiers pegjs

Créé le 3 déc. 2019  ·  8Commentaires  ·  Source: pegjs/pegjs

Type de probleme

  • Rapport de bogue : non
  • Demande de fonctionnalité : oui
  • Question : non
  • Pas un problème : non

Conditions préalables

  • Pouvez-vous reproduire le problème ? : n/a
  • Avez-vous recherché les problèmes du référentiel ? : oui
  • Avez-vous vérifié les forums ? : Je ne vois pas de liens vers des forums
  • Avez-vous effectué une recherche sur le Web (google, yahoo, etc.) ? : oui

La description

Bien qu'il puisse y avoir d'autres cas d'utilisation pour pouvoir exiger des fichiers PEGJS directement dans Node au moment de l'exécution, l'intention principale de ce problème est la couverture du code (par exemple, pour les tests Mocha).

Ce dernier cas d'utilisation de la couverture de code nécessiterait d'abord # 93 (fournissant des cartes source) pour être d'abord implémenté. Si elle est mise en œuvre, on pourrait éviter d'avoir besoin d'une copie instrumentée séparée de ses tests + code peg.

Je vois que require.extensions de Node est utilisé pour accomplir cela pour ts-node , et bien que require.extensions soit techniquement obsolète dans Node , selon les discussions autour de https://stackoverflow.com/ questions/28884377/better-way-to-require-extensions-with-node-js (en particulier dans la veine de cette réponse ), cela semble être le seul mécanisme pratique ici, et selon le commentaire, je ne pense pas nous devons nous soucier de Node breaking Babel.

feature

Commentaire le plus utile

@brettz9 - J'étais sur le point de dire "je parle à quelqu'un d'autre de la même chose" et puis j'ai réalisé que c'était toi, alors je vais arrêter cette instance de cette discussion en faveur de la similaire que nous sommes ayant sur #633, si cela vous semble correct

J'écris quelque chose de long là-bas actuellement

Tous les 8 commentaires

Je préfère ne pas permettre cela.

@ExE-Boss : Pour notre cas d'utilisation, ce serait juste pour les tests (également, je ne sais pas si vous avez noté qu'il s'agit du référentiel pegjs.)

Je sais qu'il s'agit du référentiel PEG.js , c'est exactement pourquoi je suis opposé à sa mise en œuvre ici.

Ok, cool... (Je peux parfois suivre un lien vers un autre dépôt sans remarquer qu'il ne s'agit pas d'un problème distinct, alors assurez-vous simplement) :)

Plus de fonctionnalités jusqu'à ce que les deux doublures 2017 qui nous permettent d'utiliser les modules es6 et les flèches soient sorties.

En outre, il semble que ce que vous voulez réellement tester

Vous ne placez pas les crochets de couverture dans la bibliothèque. Vous les mettez dans le fichier de test.

Si vous voulez une couverture, vous pouvez installer jest et c'est tout. Il inclut automatiquement tout ce dont vous avez besoin et aucune modification ne doit être apportée à la bibliothèque. Les outils de couverture sont conçus pour être ajoutés de l'extérieur, pas de l'intérieur.

Ce générateur d'analyseur ne devrait pas soudainement être lié à l'écosystème de packages node.js en tant que fonctionnalité interne.

De plus, la couverture est un faux désir pour un analyseur. Considérer ce qui suit:

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

Maintenant, écrivez simplement un test pour le riz. peg va d'abord essayer Peanuts , puis quand ça ne marche pas peg va essayer Shellfish , puis peg va essayer Rice

Remarquez que vous n'avez écrit un test que pour Rice , mais vous affichez une couverture incorrecte pour les trois

La façon dont un analyseur packrat (honnêtement, la façon dont je peux penser à tous les analyseurs) fonctionne signifie que la couverture est fausse

Ne perdez pas votre temps

En ce qui concerne la mise en place de crochets de couverture dans la bibliothèque, normalement on les met dans ses tests, oui, mais lorsqu'un analyseur est généré automatiquement avec certaines branches comme pertinentes et d'autres non, alors il est logique que l'auto-générateur produise ceci afin que les projets qui ne souhaitent pas ignorer leur fichier d'analyse puissent le faire. Il n'est pas lié à la couverture de la bibliothèque pegjs (qui a ses propres exigences de couverture) mais à la couverture de l'utilisation de la grammaire par l'analyseur généré.

Dans votre exemple, l'analyseur généré a des lignes de code pour vérifier "Peanuts", "Shellfish" et "Rice", et s'ils ne sont pas couverts, ils peuvent en effet être signalés.

Cela devient plus une question ouverte de savoir si une règle comme ruleA = ruleB / ruleC doit vérifier que "ruleA" a des cas avec à la fois "ruleB" et "ruleC", ou s'il suffit de vérifier que "ruleA", "ruleB" , et "ruleC" sont tous couverts d'une manière ou d'une autre (par exemple, s'il y a un ruleD = ruleB / ruleF , sa couverture de ruleB peut être considérée par certains projets comme suffisante pour éviter d'avoir à vérifier qu'il est couvert dans "règleA", surtout s'il y a beaucoup d'alternatives et de combinaisons).

En ce qui concerne ce problème, il pourrait y avoir un fichier d'entrée qui a ajouté la fonctionnalité, et un autre qui ne l'a pas fait.

@brettz9 - J'étais sur le point de dire "je parle à quelqu'un d'autre de la même chose" et puis j'ai réalisé que c'était toi, alors je vais arrêter cette instance de cette discussion en faveur de la similaire que nous sommes ayant sur #633, si cela vous semble correct

J'écris quelque chose de long là-bas actuellement

Cette page vous a été utile?
0 / 5 - 0 notes