Ruby 4.0 リファレンスマニュアル

library prism

[edit]

要約

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 については公式ドキュメントを参照してください。

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#commentsPrism?.parse_comments で得られる、ソースコード中のコメントを表す抽象基底クラスです。

  Prism::EmbDocComment

=begin=end で囲まれた埋め込みドキュメントを表すクラスです。

  Prism::InlineComment

# から始まる通常のコメントを表すクラスです。

Prism::Location

ソースコード上の範囲(開始バイトオフセットと長さ)を表すクラスです。構文木の各ノードのほか、Prism::CommentPrism::MagicCommentPrism::ParseErrorPrism::ParseWarningPrism::Token などの location メソッドから得られます。

Prism::MagicComment

Prism::ParseResult#magic_comments で得られる、マジックコメント (# frozen_string_literal: true のような、Ruby の動作に影響を与える特別な形式のコメント)を表すクラスです。

Prism::Node

構文解析の結果得られる構文木の各ノードを表す抽象基底クラスです。 Prism?.parse などが返す構文木は、このクラスのサブクラス (150 種類以上)のインスタンスで構成されます。Prism::Node 自身のインスタンスが生成されることはありません。

Prism::ParseError

Prism::ParseResult#errors で得られる、構文解析中に発生したエラーを表すクラスです。

Prism::ParseWarning

Prism::ParseResult#warnings で得られる、構文解析中に発生した警告を表すクラスです。インターフェースは Prism::ParseError と同様です。

Prism::Result

Prism?.parsePrism?.lexPrism?.parse_lex などの解析系メソッドの戻り値(Prism::ParseResultPrism::LexResultPrism::ParseLexResult)の共通基底クラスです。解析結果本体 (value)以外の付随情報(コメント・マジックコメント・エラー・警告・ソースコード)を保持します。

  Prism::LexResult

Prism?.lexPrism?.lex_file の戻り値のクラスです。字句解析の結果と、付随情報(コメント・エラー・警告など。 Prism::Result を参照)を保持します。

  Prism::ParseLexResult

Prism?.parse_lexPrism?.parse_lex_file の戻り値のクラスです。構文解析と字句解析の両方の結果と、付随情報(コメント・エラー・警告など。Prism::Result を参照)を保持します。

  Prism::ParseResult

Prism?.parsePrism?.parse_file などの戻り値のクラスです。構文解析によって得られた構文木そのものに加えて、解析中に見つかったコメント・マジックコメント・エラー・警告などの付随情報をまとめて保持します。

Prism::Source

解析対象のソースコード全体と各行の開始オフセットの表を保持し、バイトオフセットから行番号・桁位置への変換などを提供するクラスです。 Prism::ParseResult#source で得られます。

Prism::Token

Prism?.lexPrism?.parse_lex の結果に含まれる、字句解析で得られたトークンを表すクラスです。

モジュール

Prism

Ruby プログラムの構文解析・字句解析を行うためのモジュール関数を提供するモジュールです。文字列を直接解析する Prism?.parsePrism?.lex の他、ファイルを指定して解析する Prism?.parse_file などが用意されています。