当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Code.Fragment.container_cursor_to_quoted用法及代码示例


Elixir语言中 Code.Fragment.container_cursor_to_quoted 相关用法介绍如下。

用法:

container_cursor_to_quoted(fragment, opts \\ [])
(从 1.13.0 开始)
@spec container_cursor_to_quoted(
  List.Chars.t(),
  keyword()
) ::
  {:ok, Macro.t()}
  | {:error, {location :: keyword(), binary() | {binary(), binary()}, binary()}}

接收代码片段并返回带引号的表达式,光标位于最近的参数位置。

容器是任何以 ({[ 开头的 Elixir 表达式。这包括函数调用、元组、列表、映射等。例如,以这段代码为例,它将作为输入给出:

max(some_value,

此函数将返回等价于的 AST:

max(some_value, __cursor__())

换句话说,这个函数能够关闭任何打开的括号并插入光标位置。光标位置在逗号或左括号之后的任何内容都将被丢弃。例如,如果这是作为输入给出的:

max(some_value, another_val

它将返回相同的 AST:

max(some_value, __cursor__())

同样,如果只给出这个:

max(some_va

然后它返回:

max(__cursor__())

也支持不带括号的调用,因为我们假设括号是隐式的。

运算符和匿名函数不是容器,因此将被丢弃。以下都将返回相同的 AST:

max(some_value,
max(some_value, fn x -> x end
max(some_value, 1 + another_val
max(some_value, 1 |> some_fun() |> another_fun

另一方面,元组、列表、映射等都保留光标位置:

max(some_value, [1, 2,

返回以下 AST:

max(some_value, [1, 2, __cursor__()])

关键字列表(和do-end 块)也被保留。以下:

if(some_value, do:
if(some_value, do: :token
if(some_value, do: 1 + val

全部返回:

if(some_value, do: __cursor__())

此函数返回的 AST 无法安全评估,但可以对其进行分析和扩展。

例子

iex> Code.Fragment.container_cursor_to_quoted("max(some_value, ")
{:ok, {:max, [line: 1], [{:some_value, [line: 1], nil}, {:__cursor__, [line: 1], []}]}}

选项

  • :file - 解析错误时要报告的文件名。默认为 "nofile"

  • :line - 被解析字符串的起始行。默认为 1。

  • :column - 正在解析的字符串的起始列。默认为 1。

  • :columns - 当 true 时,将 :column 键附加到引用的元数据。默认为 false

  • :token_metadata - 当 true 时,在表达式 AST 中包含 token-related 元数据,例如 doend 标记的元数据,用于关闭标记、表达式结尾以及符号的分隔符。见 Macro.metadata/0 。默认为 false

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Code.Fragment.container_cursor_to_quoted(fragment, opts \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。