Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】RubyVM::AbstractSyntaxTree::Location::last_lineno()メソッドの使い方

last_linenoメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

last_linenoメソッドは、RubyVM::AbstractSyntaxTree::Locationクラスに属し、Rubyのソースコードを解析して生成される抽象構文木(AST)の各ノードが、元のソースコード上で占める範囲の最後の行番号を取得するメソッドです。

RubyVM::AbstractSyntaxTreeは、Rubyプログラムの内部構造を解析し、それを表現するツリー状のデータ構造を提供します。このツリーの各要素(ノード)は、対応するソースコードの断片を表しており、その断片がソースファイルのどの位置にあるかを示す情報がLocationオブジェクトとして保持されています。

last_linenoメソッドは、このLocationオブジェクトが指すコード範囲が、ソースコードの何行目で終了するかを整数値で返します。例えば、あるメソッドの定義全体や、特定の制御構造(if文、while文など)、あるいは式がソースコードのどの行で完結しているのかを正確に把握したい場合に利用されます。

この情報は、コードの静的解析ツール、デバッガ、コードフォーマッタ、シンタックスハイライタなど、プログラムの構造や動作を理解し、それを加工するようなシステムを開発する上で非常に役立ちます。具体的には、エラーが発生した箇所の正確な範囲をユーザーに伝えたり、特定のコードブロックの開始から終了までの行数を計算したりする際に利用されます。戻り値は1から始まる行番号で、コードの終わりに近づくほど値は大きくなります。

構文(syntax)

1require 'rubyvm/abstract_syntax_tree'
2
3# 例として、解析対象のRubyコードを用意します。
4# 複数行のコードを使用することで、last_linenoがどのように機能するかを示します。
5code_to_parse = "
6  def example_method
7    value = 100 # この行は3行目
8    value * 2   # この行は4行目
9  end           # この行は5行目
10"
11
12# コードを解析して、抽象構文木(AST)のルートノードを取得します。
13# このast_nodeは、提供されたコードスニペット全体を表します。
14ast_node = RubyVM::AbstractSyntaxTree.parse(code_to_parse)
15
16# ASTノードが持つ位置情報(Location)オブジェクトを取得します。
17# このオブジェクトは、ノードがソースコードのどこに位置するかに関する詳細情報を含みます。
18location_object = ast_node.location
19
20# Locationオブジェクトから、このASTノードがカバーするコードの終了行番号を取得します。
21# 上記のコード例の場合、`end`キーワードがある5行目が終了行となります。
22location_object.last_lineno

引数(parameters)

引数なし

引数はありません

戻り値(return)

Integer

このメソッドは、ASTノードの終了行番号を整数で返します。

関連コンテンツ