SorcererJim Weirich开发的Ruby代码生成器,能够基于Ripper类的抽象语法树(例如S表达式)。

例子

sexp = [:binary,
           [:var_ref, [:@ident, "a", [1, 0]]],
           :+,
           [:var_ref, [:@ident, "b", [1, 4]]]]
puts Sorcerer.source(sexp)

会生成

a + b

Sorcerer需要用到的S表达式可以用Ripper生成。下面的代码效果类似:

sexp = Ripper::SexpBuilder.new("a + b").parse
puts Sorcerer.source(sexp)

选项

无选项

默认状态下,sorcerer会输出单行代码。

例如,给定以下代码:

sexp = Ripper::SexpBuilder.new("def foo; bar; end").parse

然后下面的代码:

puts Sorcerer.source(sexp)

会生成单行代码:

def foo; bar; end

多行输出

使用multiline选项可以实现多行输出。

例如,同样是上面举的代码,使用:

puts Sorcerer.source(sexp, multiline: true)

会得到多行输出:

def foo
bar
end

缩进

默认状态下,sorcerer的多行输出没有缩进。添加indent选项会添加缩进。

例如:

puts Sorcerer.source(sexp, indent: true)

会生成带缩进的代码:

def foo
  bar
end

调试输出

使用debug选项

puts Sorcerer.source(sexp, debug: true)

许可

MIT

相关链接

Jim Weirich


编译 SegmentFault


weakish
24.6k 声望844 粉丝

a vigorously lazy deadbeat with matured immaturity