このプログラム (input.rb) の Ruby プリズム AST を検査しようとしています。
x = 8 + 55 * 14
# this is a comment ...
puts ">> the value is #{x}"
これを試してみると、エンコードが間違っているようです。
require "prism"
puts Prism.dump_file('input.rb')
次のような意味不明な内容がわかります。
$ ruby main.rb
PRISMUTF-8(D�wC�C`
RR
--�...0>>�@^@AB
(
あなたが望むのは、dump_fileの代わりにPrism.parse_fileを呼び出すことだと思います。
私の知る限り、dump_file の結果は内部独自の表現であり、印刷用ではありません。 parse_file は構文ツリーを提供します。これが探しているものであると思います。
>> Prism.parse_file('input.rb')
#<Prism::ParseResult:0x00007f01d00bbd18
@comments=
[#<Prism::InlineComment @location=#<Prism::Location @start_offset=16 @length=23 start_line=2>>],
@data_loc=nil,
@errors=[],
@magic_comments=[],
@source=
#<Prism::Source:0x00007f01d014fec8
@offsets=[0, 16, 40, 68],
@source="x = 8 + 55 * 14\n# this is a comment ...\nputs \">> the value is \#{x}\"\n",
@start_line=1>,
@value=
@ ProgramNode (location: (1,0)-(3,27))
├── locals: [:x]
└── statements:
@ StatementsNode (location: (1,0)-(3,27))
└── body: (length: 2)
├── @ LocalVariableWriteNode (location: (1,0)-(1,15))
│ ├── name: :x
│ ├── depth: 0
│ ├── name_loc: (1,0)-(1,1) = "x"
│ ├── value:
│ │ @ CallNode (location: (1,4)-(1,15))
│ │ ├── flags: ∅
│ │ ├── receiver:
│ │ │ @ IntegerNode (location: (1,4)-(1,5))
│ │ │ └── flags: decimal
│ │ ├── call_operator_loc: ∅
│ │ ├── name: :+
│ │ ├── message_loc: (1,6)-(1,7) = "+"
│ │ ├── opening_loc: ∅
│ │ ├── arguments:
│ │ │ @ ArgumentsNode (location: (1,8)-(1,15))
│ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1)
│ │ │ └── @ CallNode (location: (1,8)-(1,15))
│ │ │ ├── flags: ∅
....