sounisi5011/vec-draw

PEG.jsで使用する関数の外部化

Closed this issue · 2 comments

概要

dsl.pegjsファイルで使用する関数を外部ファイルに移動し、パーサファイルからrequire()で読み込みを行う方法の提案。

詳細

PEG.jsのオプション--dependencyを使用することで、パーサファイルのトップレベルにrequire()文を挿入することが可能になる。

pegjs -o src/parser/dsl.pegjs-x.js --dependency xutil --dependency 'lib1:./pegjs-util.js' src/parser/dsl.pegjs
var xutil = require("xutil"), lib1 = require("./pegjs-util.js");

これを利用して、position()関数など、テストが必要なユーティリティ関数を外部ファイル化し、使用できるようにする。

注意点

挿入されるのはcommonjsの構文になるため、srcディレクトリ以下に.jsのファイルを配置することになる。このファイルをdistディレクトリにコピーする方法を考える必要や、linterの設定変更も必要になるかもしれない。

CLIのパラメータとして設定を指定するのは長すぎるため、本家のようにpegjs.config.jsのような設定ファイルを作成し、--extra-options-fileオプションで指定するやり方が有効かもしれない。ただし、このオプションがv0.10.0のPEG.jsで想定どおりに動くかどうかは不明。

pegjs/src at master · pegjs/pegjs

#23 で完了していたので、閉じた。