非常教程

Erlang 20参考手册

syntax_tools

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/1format/2layout/2prettypr: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/2best/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_syntaxbest/2format/1get_ctxt_user/1layout/2set_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; 但是请注意,这个函数忽略了paperribbon选项。

该功能为漂亮的打印机提供底层接口,返回可能布局的灵活表示,而不管最终用于格式化的纸张宽度如何。这可以作为另一个文档的一部分和/或由prettypr模块中的函数直接处理,或者用于钩子函数(format/2详情参见参考资料)。

另请参阅: prettyprformat/2layout/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

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1