查看源代码 edlin_expand (stdlib v6.2)

Shell 展开和展开建议的格式化。

此模块为 Erlang shell expand/1,2 提供了一个 expand_fun。可以覆盖此 expand_fun io:setopts/1,2

摘要

函数

等效于 expand/2

标准展开函数能够将字符串展开为有效的 Erlang 项。这包括模块名称

函数

链接到此函数

expand(Bef0)

查看源代码 (自 OTP 26.0 起)
-spec expand(Bef0) -> {Res, Completion, Matches}
                when
                    Bef0 :: string(),
                    Res :: yes | no,
                    Completion :: string(),
                    Matches :: [Element] | [Section],
                    Element :: {string(), [ElementOption]},
                    ElementOption :: {ending, string()},
                    Section :: #{title := string(), elems := Matches, options := SectionOption},
                    SectionOption ::
                        {highlight_all} |
                        {highlight, string()} |
                        {highlight_param, integer()} |
                        {hide, title} |
                        {hide, result} |
                        {separator, string()}.

等效于 expand/2

链接到此函数

expand(Bef0, Opts)

查看源代码 (自 OTP 26.0 起)
-spec expand(Bef0, Opts) -> {Res, Completion, Matches}
                when
                    Bef0 :: string(),
                    Opts :: [Option],
                    Option :: {legacy_output, boolean()},
                    Res :: yes | no,
                    Completion :: string(),
                    Matches :: [Element] | [Section],
                    Element :: {string(), [ElementOption]},
                    ElementOption :: {ending, string()},
                    Section :: #{title := string(), elems := Matches, options := SectionOption},
                    SectionOption ::
                        {highlight_all} |
                        {highlight, string()} |
                        {highlight_param, integer()} |
                        {hide, title} |
                        {hide, result} |
                        {separator, string()}.

标准展开函数能够将字符串展开为有效的 Erlang 项。这包括模块名称

1> erla
modules
erlang:

函数名称

1> is_ato
functions
is_atom(
2> erlang:is_ato
functions
is_atom(

函数类型

1> erlang:is_atom(
typespecs
erlang:is_atom(Term)
any()

并在没有其他有效的展开可能时自动添加逗号或右括号。展开函数还会完成:shell 绑定、记录名称、记录字段和映射键。

如下所示,如果函数头具有相同的展开建议,则将它们分组在一起,在本例中,它们都具有相同的建议,即“}”。还支持有限地过滤掉与提示符上项的类型不匹配的函数类型规范。下面仅显示了 4 个建议,但 erlang:system_info 有更多的类型规范。

1> erlang:system_info({allocator, my_allocator
typespecs
erlang:system_info(wordsize | {wordsize, ...} | {wordsize, ...})
erlang:system_info({allocator, ...})
erlang:system_info({allocator_sizes, ...})
erlang:system_info({cpu_topology, ...})
}

expand 函数的返回类型指定 Element 元组的列表或 Section 映射的列表。引入 section 概念是为了为展开结果启用更多的格式化选项。例如,shell 展开支持高亮文本和隐藏建议。还有一个 {highlight, Text} 可以高亮显示标题中所有出现的 Text,以及一个为了简便而高亮显示整个标题的 highlight_all,如上面 functionstypespecs 所示。

通过设置 {hide, result}{hide, title} 选项,您可以隐藏建议。有时标题没有用,只会产生文本噪音,在上面的示例中,any/0 结果是标题为 Types 的 section 的一部分。目前没有使用隐藏结果,但想法是可以在展开区域中选择一个 section,并且应该折叠所有其他 section 条目。

可以在标题和结果之间设置自定义分隔符。这可以通过 {separator, Separator} 完成。默认情况下设置为 \n,某些结果显示 type_name() ::,后跟定义 type_name() 的所有类型。

{ending, Text} ElementOption 只是将 Text 附加到 Element