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 \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。