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
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

