Pegjs: 機能:pegjsファイルの実行時要求

作成日 2019年12月03日  ·  8コメント  ·  ソース: pegjs/pegjs

問題の種類

  • バグレポート:いいえ
  • 機能リクエスト:はい
  • 質問:いいえ
  • 問題ではありません:いいえ

前提条件

  • 問題を再現できますか?:該当なし
  • リポジトリの問題を検索しましたか?:はい
  • フォーラムを確認しましたか?:フォーラムへのリンクが表示されません
  • Web検索(google、yahooなど)を実行しましたか?:はい

説明

実行時にノードで直接PEGJSファイルを要求できるようにする他のユースケースがあるかもしれませんが、この問題の主な目的はコードカバレッジ(たとえば、Mochaテスト)です。

コードカバレッジのこの後者のユースケースでは、最初に#93(ソースマップを提供する)を最初に実装する必要があります。 実装すれば、テストとペグコードの個別のインストルメント化されたコピーの必要性を回避できます。

ノードのrequire.extensionsts-nodeでこれを達成するために使用されていることがわかりますが、 https://stackoverflow.com/に関する議論に従って、ノードではrequire.extensionsは技術的に非推奨です。質問/ 28884377 / better-way-to-require-extensions-with-node-js (特にこの回答の流れの中で)、それはここで唯一の実用的なメカニズムのようです、そしてコメントによると、私は思いませんNodeがBabelを壊すことを心配する必要があります。

feature

最も参考になるコメント

@ brettz9-私は「これと同じことについて他の誰かと話している」と言っていたところ、それがあなただと気づいたので、この議論のこのインスタンスをやめて、私たちと同じようなものを支持します#633を持っている、それがあなたにとって大丈夫だと思われるなら

私は現在そこに長い何かを書いています

全てのコメント8件

私はむしろこれを許可したくありません。

@ ExE-Boss:私たちのユースケースでは、テスト用です(また、これがpegjsリポジトリであることに気付いたかどうかはわかりません)。

これがPEG.jsリポジトリであることを私は知っています。そのため、ここでこれを実装することに反対しています。

わかりました、かっこいい...(別の問題ではないことに気付かずに、別のリポジトリへのリンクをたどることができる場合があるので、確認してください):)

es6モジュールと矢印を使用できる2017年の2ライナーが出るまで、これ以上の機能はありません。

また、実際に必要なのはテストのようです

ライブラリにカバレッジフックを配置しません。 それらをテストファイルに入れます。

カバレッジが必要な場合は、 jestをインストールするだけで完了します。 必要なものがすべて自動的に含まれ、ライブラリに変更を加える必要はありません。 カバレッジツールは、内側ではなく外側から追加するように設計されています。

このパーサジェネレータは、内部機能として突然node.jsパッケージエコシステムに関連付けられるべきではありません。

その上、カバレッジはパーサーに対する誤った欲求です。 次のことを考慮してください。

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

さて、ご飯のテストを書いてください。 pegは最初にPeanutsを試し、次にそれが機能しない場合はpegShellfishを試し、次にpegRiceを試します

Riceのテストのみを作成しましたが、3つすべてのカバレッジが誤って表示されていることに注意してください。

packratパーサー(正直なところ、私が考えることができるパーサー)の動作方法は、カバレッジが偽物であることを意味します

時間を無駄にしないでください

ライブラリにカバレッジフックを配置する限り、通常はそれらをテストに配置しますが、パーサーが関連するブランチと関連しないブランチを使用して自動生成される場合、自動生成機能がこれを生成することは理にかなっています。パーサーファイルを無視したくないプロジェクトが無視できるようにします。 これは、pegjsライブラリ(独自のカバレッジ要件があります)のカバレッジとは関係ありませんが、生成されたパーサーによる文法の使用のカバレッジとは関係ありません。

あなたの例では、生成されたパーサーには、「ピーナッツ」、「甲殻類」、「米」をチェックするコード行があり、それらがカバーされていない場合は、実際に報告できます。

ruleA = ruleB / ruleCのようなルールで、「ruleA」に「ruleB」と「ruleC」の両方のケースがあることを確認する必要があるのか​​、それとも「ruleA」、「ruleB」の両方を確認するだけで十分なのかは、より未解決の問題になります。 、および「ruleC」はすべて何らかの形でカバーされます(たとえば、 ruleD = ruleB / ruleFがある場合、 ruleBのカバー範囲は、範囲内でカバーされていることを確認する必要がないように、一部のプロジェクトで十分に認識される場合があります。 「ruleA」、特に選択肢や組み合わせがたくさんある場合)。

この問題に関しては、機能を追加したエントランスファイルと追加しなかったエントランスファイルが存在する可能性があります。

@ brettz9-私は「これと同じことについて他の誰かと話している」と言っていたところ、それがあなただと気づいたので、この議論のこのインスタンスをやめて、私たちと同じようなものを支持します#633を持っている、それがあなたにとって大丈夫だと思われるなら

私は現在そこに長い何かを書いています

このページは役に立ちましたか?
0 / 5 - 0 評価