問題タブ [php-parser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
172 参照

php - token_get_all() を使用する場合、「孤独な」T_STRING が関数呼び出しなのか、定数なのか、それ以外なのかを判断するにはどうすればよいですか?

最小限のコード例:

token_get_all() を使用した構造:

ご覧のとおり、 T_WHITESPACEが前にあり、 T_FUNCTIONが前にあるT_STRINGをチェックすることで、関数定義を検出できます。ここまでは順調ですね。

ただし、関数呼び出しは単なるT_STRINGであり、パラメーターの「真の」定数など、他の多くのものと同様に、その前後に特別な記号はありません。

T_STRING が次のT_STRINGが何を参照することになっているのかをインタプリタに伝える前にシンボルがない場合、T_STRINGが関数名または何か他のものを参照しているかどうかをどのように知ることができますか?

あなたの答えが、T_STRING 値の名前を持つ関数が存在するかどうかを確認する必要があるという場合、それは true() という関数が存在できないということですか? それは「真の」定数と競合するのでしょうか?そのようなチェックを行う必要がある場合、さまざまな点で事態が複雑になります...

0 投票する
1 に答える
98 参照

php - PHP-Parser: 複数行の配列をきれいに印刷する

nikic/php-parserを使用して、既存の構成ファイルを読み取り、その中の配列ノードを見つけ、このノードに新しい項目を追加してから、すべてをファイルに書き戻そうとしています。
理想的には、これにより、コメントや空白を含むファイルの残りの部分が変更されるべきではありません。

ドキュメントで概説されている書式設定を保持するきれいな印刷へのアプローチを使用しています。

ノード ビジターは、大まかに次のようになります (わかりやすくするために一部を省略しています)。

元の構成ファイルは、おおよそ次のようになります。

ただし、PHP-Parserが出力するもの:

したがって、フォーマットを保持するきれいな印刷は、実際にはファイル内のすべてのアイテム間の空行を削除し、それらに触れていなくても、既存の配列を複数行から単一行に変換するようです。
フォーマットを保持するオプションがまだ実験的で不完全であることは知っていますが、ドキュメントで読んだことから、問題コードの複数行の配列は実際にはすでに機能しているはずです。したがって、他の項目は同じままであると予想していました少なくとも。

配列構造の複数行出力を強制する方法はありますか? 私が逃したものはありますか?私はまだ AST 操作について深くは知りません。

0 投票する
0 に答える
59 参照

php - nikic/php-parser を使用して変数が定義されているかどうかを確認します

静的コード分析ツールを構築しようとしていますが、ファイル内の変数が定義されているかどうかを確認したいと考えています。現在、私は nikic/PHP-Parser ( https://github.com/nikic/PHP-Parser ) を使用していますが、私が試みていることが可能かどうかはわかりません。

だから私の質問は、(おそらく)設定されているかどうかを確認することは可能ですか?では、変数には null とは異なる値が含まれていますか? コードは静的分析で実行されないため、たとえば関数に渡す前に、変数がnullであるかどうかを「推測」することは不可能かもしれないと感じています。

例:

この場合、2 行目$pageが null であることが判明すると、例外が発生する可能性があります。静的解析を使用して、コード内のこの種の不安定性を検出したいと考えています。

これは、PHP-Parser を使用して試みているコードの一部です。

編集:なぜこれを行っているのかをより明確にするために、コードの実行について何も知らずに、500 エラーの可能性を検出するアプリケーションを構築しようとしています。