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 元数据,例如do
和end
标记的元数据,用于关闭标记、表达式结尾以及符号的分隔符。见Macro.metadata/0
false
。
相关用法
- Elixir Code.Fragment.cursor_context用法及代码示例
- Elixir Code.Fragment.surround_context用法及代码示例
- Elixir Code.prepend_path用法及代码示例
- Elixir Code.compiler_options用法及代码示例
- Elixir Code.quoted_to_algebra用法及代码示例
- Elixir Code.put_compiler_option用法及代码示例
- Elixir Code.ensure_compiled用法及代码示例
- Elixir Code.format_string!用法及代码示例
- Elixir Code.required_files用法及代码示例
- Elixir Code.get_compiler_option用法及代码示例
- Elixir Code.available_compiler_options用法及代码示例
- Elixir Code.ensure_loaded?用法及代码示例
- Elixir Code.eval_quoted用法及代码示例
- Elixir Code.require_file用法及代码示例
- Elixir Code.delete_path用法及代码示例
- Elixir Code.append_path用法及代码示例
- Elixir Code.ensure_loaded用法及代码示例
- Elixir Code.unrequire_files用法及代码示例
- Elixir Code.fetch_docs用法及代码示例
- Elixir Code.string_to_quoted_with_comments用法及代码示例
- Elixir Code.eval_string用法及代码示例
- Elixir Code用法及代码示例
- Elixir Config.config_env用法及代码示例
- Elixir Config.config用法及代码示例
- Elixir Config.Reader用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Code.Fragment.container_cursor_to_quoted(fragment, opts \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。