當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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