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 \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。