查看源代码 edlin_expand (stdlib v6.2)
Shell 展开和展开建议的格式化。
此模块为 Erlang shell expand/1,2
提供了一个 expand_fun。可以覆盖此 expand_fun io:setopts/1,2
。
摘要
函数
-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
。
-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
,如上面 functions
和 typespecs
所示。
通过设置 {hide, result}
或 {hide, title}
选项,您可以隐藏建议。有时标题没有用,只会产生文本噪音,在上面的示例中,any/0
结果是标题为 Types
的 section 的一部分。目前没有使用隐藏结果,但想法是可以在展开区域中选择一个 section,并且应该折叠所有其他 section 条目。
可以在标题和结果之间设置自定义分隔符。这可以通过 {separator, Separator}
完成。默认情况下设置为 \n
,某些结果显示 type_name() ::
,后跟定义 type_name()
的所有类型。
{ending, Text}
ElementOption 只是将 Text 附加到 Element
。