要約
Ruby プログラムを解析するための、エラー耐性のあるパーサライブラリです。
prism は Ruby 3.3 で default gem として導入され、Ruby 3.4 以降は
CRuby 本体が Ruby プログラムをコンパイルする際に使われるデフォルトのパーサの実装になっています(3.3 の時点では ruby --parser=prism
オプションで試験的に切り替えられる位置づけでした)。
設計上の目標として、構文エラーがあっても可能な限り解析を継続する「エラー耐性(error tolerant)」を重視しており、エディタや IDE、linter といった、エラーを含む可能性があるコードも解析する必要があるツールから利用しやすくなっています。また C99 で実装された移植性の高いライブラリ (libprism)でもあり、CRuby 以外の Ruby 処理系やツール、他言語のバインディングからも利用できます。
構文解析の結果得られる構文木の各ノードは Prism::Node のサブクラス (150 種類以上)として表現されます。すべてのノードに共通する API は Prism::Node で扱いますが、個々のノードクラスの詳細はこのリファレンスでは扱いません。ノードクラスも含めた完全な API については公式ドキュメントを参照してください。
- プロジェクトページ: https://github.com/ruby/prism
- リファレンス(YARD): https://www.rubydoc.info/gems/prism
- ドキュメントサイト: https://ruby.github.io/prism/
require "prism"
result = Prism.parse("1 + 2")
p result.class # => Prism::ParseResult
p result.value.class # => Prism::ProgramNode
p result.success? # => true
クラス
| Prism::Comment | Prism::ParseResult#comments や Prism?.parse_comments で得られる、ソースコード中のコメントを表す抽象基底クラスです。 |
| Prism::EmbDocComment |
|
| Prism::InlineComment |
|
| Prism::Location |
ソースコード上の範囲(開始バイトオフセットと長さ)を表すクラスです。構文木の各ノードのほか、Prism::Comment・Prism::MagicComment・
Prism::ParseError・Prism::ParseWarning・Prism::Token などの
|
| Prism::MagicComment |
Prism::ParseResult#magic_comments で得られる、マジックコメント
( |
| Prism::Node |
構文解析の結果得られる構文木の各ノードを表す抽象基底クラスです。
Prism?.parse などが返す構文木は、このクラスのサブクラス
(150 種類以上)のインスタンスで構成されます。 |
| Prism::ParseError | Prism::ParseResult#errors で得られる、構文解析中に発生したエラーを表すクラスです。 |
| Prism::ParseWarning | Prism::ParseResult#warnings で得られる、構文解析中に発生した警告を表すクラスです。インターフェースは Prism::ParseError と同様です。 |
| Prism::Result |
Prism?.parse・Prism?.lex・Prism?.parse_lex などの解析系メソッドの戻り値(Prism::ParseResult・Prism::LexResult・
Prism::ParseLexResult)の共通基底クラスです。解析結果本体
( |
| Prism::LexResult | Prism?.lex や Prism?.lex_file の戻り値のクラスです。字句解析の結果と、付随情報(コメント・エラー・警告など。 Prism::Result を参照)を保持します。 |
| Prism::ParseLexResult | Prism?.parse_lex や Prism?.parse_lex_file の戻り値のクラスです。構文解析と字句解析の両方の結果と、付随情報(コメント・エラー・警告など。Prism::Result を参照)を保持します。 |
| Prism::ParseResult | Prism?.parse や Prism?.parse_file などの戻り値のクラスです。構文解析によって得られた構文木そのものに加えて、解析中に見つかったコメント・マジックコメント・エラー・警告などの付随情報をまとめて保持します。 |
| Prism::Source | 解析対象のソースコード全体と各行の開始オフセットの表を保持し、バイトオフセットから行番号・桁位置への変換などを提供するクラスです。 Prism::ParseResult#source で得られます。 |
| Prism::Token | Prism?.lex や Prism?.parse_lex の結果に含まれる、字句解析で得られたトークンを表すクラスです。 |
モジュール
| Prism | Ruby プログラムの構文解析・字句解析を行うためのモジュール関数を提供するモジュールです。文字列を直接解析する Prism?.parse や Prism?.lex の他、ファイルを指定して解析する Prism?.parse_file などが用意されています。 |