Elixir語言中 Code.Fragment.surround_context
相關用法介紹如下。
用法:
surround_context(fragment, position, options \\ [])
(從 1.13.0 開始)
@spec surround_context(List.Chars.t(), position(), keyword()) ::
%{begin: position(), end: position(), context: context} | :none
when context:
{:alias, charlist()}
| {:dot, inside_dot, charlist()}
| {:local_or_var, charlist()}
| {:local_arity, charlist()}
| {:local_call, charlist()}
| {:module_attribute, charlist()}
| {:operator, charlist()}
| {:unquoted_atom, charlist()},
inside_dot:
{:alias, charlist()}
| {:dot, inside_dot, charlist()}
| {:module_attribute, charlist()}
| {:unquoted_atom, charlist()}
| {:var, charlist()}
接收一個字符串並返回環繞上下文。
此函數接收帶有 Elixir 代碼片段和 position
的字符串。它返回一個包含標識符開頭和結尾及其上下文的映射,如果沒有已知上下文,則返回 :none
。
和cursor_context/2
的區別在於前者假設代碼片段中的表達式不完整。例如,surround_context/3
中的cursor_context/2
do
可能是關鍵字或變量或本地調用,而
假定代碼片段中的表達式是完整的,因此surround_context/3
do
將始終是關鍵字。
position
包含 line
和 column
,兩者都從索引 1 開始。列必須位於周圍的表達式之前。例如,表達式 foo
將為第 1、2 和 3 列返回一些內容,但不是 4:
foo
^ column 1
foo
^ column 2
foo
^ column 3
foo
^ column 4
返回的映射包含表達式開始的列和表達式結束後的第一列。
與
類似,此函數也提供了盡力而為的檢測,並且可能並非在所有情況下都準確。有關詳細信息,請參閱 cursor_context/2
下的 "Return values" 和 "Limitations" 部分。cursor_context/2
例子
iex> Code.Fragment.surround_context("foo", {1, 1})
%{begin: {1, 1}, context: {:local_or_var, 'foo'}, end: {1, 4}}
與 cursor_context/2
的差異
cursor_context/2
因為
處理完整的代碼,它與 surround_context/3
有一些區別:cursor_context/2
-
dot_call
/dot_arity
和operator_call
/operator_arity
分別折疊到dot
和operator
上下文中,因為它們之間沒有任何有意義的區別 -
另一方麵,此函數仍然區分
local_call
/local_arity
和local_or_var
,因為後者可以是局部變量或變量 -
@
如果後麵沒有任何標識符,則返回為{:operator, '@'}
(與cursor_context/2
{:module_attribute, ''}
相比 -
此函數從不返回空符號
{:sigil, ''}
或空結構{:struct, ''}
作為上下文
相關用法
- Elixir Code.Fragment.cursor_context用法及代碼示例
- Elixir Code.Fragment.container_cursor_to_quoted用法及代碼示例
- 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.surround_context(fragment, position, options \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。