2017-10-02 2 views
0

私は単純なステートマシンとして実装された、基本的なHTMLパーサを含む小さなJavascriptの実験で友人と働いています - あなたはsee the code hereです。ES6タグ付きテンプレートのコンテンツを解析中にエラーを報告する方法はありますか?

私の質問は、エラー報告に関するパーザの種類に関係するタグ付けされたテンプレート関数に関するものです。つまり、パーサが無効な状態を検出した場合、入力にエラーが見つかった場所を報告する必要があります。

私の問題は、エラーがどこで見つかったかをトラッキングしたり説明したりすることです。

タグ付きテンプレート関数への入力は、実際にはソースコード(私の場合はHTML)とJavascript値が交互になっているので、単純にはできません(通常のパーサで行うように)繰り返しのJavascript値は文字列でなくてもよいし、リテラルソースとして解析されない文字列であってもよいからです。

ソースファイルの入力文字列/値の交互配置をタグ付きテンプレート関数で検出する方法はありますか?

また、この種の実行時機能が事実上不可能であると疑っていますか? Javascriptパーサーを使って、ソースの場所を発見しログに記録するのではなく、これを実装するのに役立つ方法はありませんか?

答えて

1

ここで実行できるのは、問題が発生したときに予想されるコンテキストを出力することだけです。問題がthreeによって引き起こされたことを考慮:

const three = null; 
`one${two}${three}four` 

タグ関数の引数には、例えば、彼らが意味を作り始めるポイントにエラーメッセージに連結することができます

Expected a number as an expression at position 2, got `null`, 
`one${...}${...}four` 
      ^^^ 

スタックトレースは、必要に応じてnew Error().stackで取得することもできます。

さらに精度が必要な場合は、テンプレートのコンパイル中に必要なすべてのデータが使用できるため、テンプレートリテラルの代わりにテンプレートエンジンを使用する必要があります。

タグ機能のオプションは他の機能と同じです。 foo関数が1foo(bar)のような)引数として変数barで呼び出された場合、からbarで呼び出されたことを知ることができない場合があります。これはすべて1の値です。 foo(bar)のように呼び出されたという事実は、スタックトレースのソースファイルへのアクセスがある場合にのみ見つけられます。これは通常の状況ではありません。この方法は、フィードバックが文脈上で提供されるべき場合に使用することができる。これはスクリプトの読み込みを担当し、ソースファイルにアクセスできるためです。

+0

私は問題のあるサイトの近くのコンテンツの一部を印刷し、文字/行番号ではなくエラーを視覚的に指し示すというアイデアが気に入っています。私が考えることができる何よりも優れています。そして、コンパイラを導入するよりはるかに簡単です!ありがとう:-) –

関連する問題