erl_prettypr
erl_prettypr
模块
erl_prettypr
模块摘要
漂亮的Erlang语法树打印。
描述
抽象的Erlang语法树的漂亮打印。
该模块是漂亮打印库模块的前端prettypr
,用于对由模块定义的抽象语法树进行文本格式化erl_syntax
。
数据类型
context()
漂亮打印机的当前上下文的表示。可以在钩子函数中访问。
hook() = (syntaxTree(),context(), Continuation) ->prettypr:document()
- Continuation =(syntaxTree(),context()) - >prettypr:document()
用户控制格式的回调功能。参见format/2
。
syntaxTree()=
erl_syntax:syntaxTree()
抽象语法树。详情请参阅erl_syntax
模块。
出口
best(Tree::syntaxTree()) -> empty |prettypr:document()
相当于best(Tree, [])
。
best(Tree::syntaxTree(), Options::[term()]) -> empty |prettypr:document()
为语法树创建固定的“最佳”抽象布局。这与layout/2
函数类似,不同之处在于此处已针对给定选项选择了最终布局。empty
如果不能生成这样的布局,则返回原子。有关这些选项的信息,请参阅该format/2
功能。
另请参阅:
best/1
,format/2
,layout/2
,prettypr:best/3
。
format(Tree::syntaxTree()) -> string()
相当于format(Tree, [])
。
format(Tree::syntaxTree(), Options::[term()]) -> string()
Prettyprint - 将文本格式化为抽象的Erlang语法树。例如,如果你有一个.beam
已经被编译过的文件,debug_info
下面应该打印模块的源代码(就像它在调试信息表示中看到的一样):
{ok,{_,[{abstract_code,{_,AC}}]}} =
beam_lib:chunks("myfile.beam",[abstract_code]),
io:put_chars(erl_prettypr:format(erl_syntax:form_list(AC)))
可供选择的办法:
{hook, none |hook()}
除非值是none
,否则为注释列表不为空的每个节点调用给定函数; 详情见下文。默认值是none
。
{paper, integer()}
指定任何行上的首选字符数,包括缩进。默认值是80。
{ribbon,integer()}
指定任何行上的首选字符数,不包括缩进。默认值是65。
{user, term()}
用于钩子函数的用户特定数据。默认值是undefined
。
{encoding, epp:source_encoding()}
指定生成文件的编码。
一个钩子函数(比较hook()
类型)被传递给当前语法树节点,上下文和一个延续。上下文可以被诸如get_ctxt_user/1
和之类的函数检查和操纵set_ctxt_user/2
。钩子必须返回一个“文档”数据结构(参见layout/2
和best/2
); 这可以通过应用延续功能来部分或全部构建。例如,以下是一个简单的钩子:
fun (Node, Ctxt, Cont) -> Cont(Node, Ctxt) end
产生的结果与没有给出钩子的结果相同。然而,以下情况:
fun (Node, Ctxt, Cont) ->
Doc = Cont(Node, Ctxt),
prettypr:beside(prettypr:text("<b>"),
prettypr:beside(Doc,
prettypr:text("</b>")))
end
将在HTML“boldface begin”和“boldface end”标签之间放置任何带注释节点的文本(不管注释数据如何)。
另请参阅:
erl_syntax
,best/2
,format/1
,get_ctxt_user/1
,layout/2
,set_ctxt_user/2
。
get_ctxt_hook(Ctxt::context()) ->hook()
返回prettyprinter上下文的hook函数字段。
另见:
set_ctxt_hook/2
。
get_ctxt_linewidth(Ctxt::context()) -> integer()
返回prettyprinter上下文的行widh字段。
另见:
set_ctxt_linewidth/2
。
get_ctxt_paperwidth(Ctxt::context()) -> integer()
返回Pretty打印机上下文的纸张宽度字段。
另见:
set_ctxt_paperwidth/2
。
get_ctxt_precedence(Ctxt::context()) -> integer()
返回漂白打印机上下文的运算符优先级字段。
另见:
set_ctxt_precedence/2
。
get_ctxt_user(Ctxt::context()) -> term()
返回漂亮打印机上下文的用户数据字段。
另见:
set_ctxt_user/2
。
layout(Tree::syntaxTree()) ->prettypr:document()
相当于layout(Tree, [])
。
layout(Tree::syntaxTree(), Options::[term()]) ->prettypr:document()
为语法树创建抽象文档布局。结果代表了一组可能的布局(比较模块prettypr
)。有关选项的信息,请参阅format/2
; 但是请注意,这个函数忽略了paper
和ribbon
选项。
该功能为漂亮的打印机提供底层接口,返回可能布局的灵活表示,而不管最终用于格式化的纸张宽度如何。这可以作为另一个文档的一部分和/或由prettypr
模块中的函数直接处理,或者用于钩子函数(format/2
详情参见参考资料)。
另请参阅:
prettypr
,format/2
,layout/1
。
set_ctxt_hook(Ctxt::context(), Hook::hook()) ->context()
更新prettyprinter上下文的hook函数字段。
另见:
get_ctxt_hook/1
。
set_ctxt_linewidth(Ctxt::context(), W::integer()) ->context()
更新Pretty打印机上下文的行宽度字段。
注意:更改此值(并将结果上下文传递给继续函数)不会影响正常格式,但可能会影响用户定义的钩子函数中的行为。
另见:
get_ctxt_linewidth/1
。
set_ctxt_paperwidth(Ctxt::context(), W::integer()) ->context()
更新Pretty打印机上下文的纸张宽度字段。
注意:更改此值(并将结果上下文传递给继续函数)不会影响正常格式,但可能会影响用户定义的钩子函数中的行为。
另见:
get_ctxt_paperwidth/1
。
set_ctxt_precedence(Ctxt::context(), Prec::integer()) ->context()
更新prettyprinter上下文的运算符优先级字段。有关erl_parse(3)
运算符优先级,请参阅模块。
另见:
erl_parse(3)
,get_ctxt_precedence/1
。
set_ctxt_user(Ctxt::context(), X::term()) ->context()
更新prettyprinter上下文的用户数据字段。
另见:
get_ctxt_user/1
。
richard@gmail.com