module Builtin_attributes:sig
..end
对内置属性的支持
警告:此模块不稳定,属于 compiler-libs 的一部分。
type
current_phase =
| |
解析器 |
| |
不变式检查 |
register_attr
必须在所有应为放置错误属性警告目的而跟踪的属性位置上调用。特别是,它应该在源程序中存在的、除了包含在另一个属性有效负载中的属性之外的所有属性上调用(因为这些属性可能被 ppx 遗留并且被编译器有意忽略)。
current_phase
参数指示何时调用此函数
Ast_invariants
模块中运行检查时看到属性时。这样做是为了确保我们只跟踪解析树最终版本的属性:如果我们能看到 ppx 将在稍后运行,那么我们会跳过在解析时添加看到的属性,因为 Ast_invariants
检查始终在 ppx 的结果上运行。请注意,如果未使用 ppx,则 Ast_invariants
检查也会在从序列化 ast 文件创建的解析树上运行,确保在这种情况下我们不会错过属性。
val register_attr : current_phase -> string Location.loc -> unit
val mark_payload_attrs_used : Parsetree.payload -> unit
标记隐藏在另一个属性有效负载中的属性,用于放置错误属性警告(请参阅上面关于 current_phase
的注释)。在解析器中,最简单的方法是将它们添加到表中,然后稍后删除它们,而不是传递状态跟踪我们是否处于属性有效负载中。
val warn_unused : unit -> unit
为所有使用 mk_internal
创建但尚未标记为已使用的属性发出放置错误属性警告。
一些属性,如弃用标记,不会影响其出现定义的编译,而是会导致在以后使用该定义时产生警告。这是通过将原始属性移动到环境中来实现的,在那里它们将在以后的访问中被注意到。
为了使放置错误属性警告对这些属性有效地工作,我们在将它们移入环境时将它们标记为“已使用”。这是使用本节中的辅助函数完成的。
val mark_alert_used : Parsetree.attribute -> unit
如果属性是警报,则为放置错误属性警告的目的标记属性已使用。在将允许具有警报属性的内容移动到环境中时调用它。
val mark_alerts_used : Parsetree.attributes -> unit
与 List.iter mark_alert_used
相同。
val mark_warn_on_literal_pattern_used : Parsetree.attributes -> unit
为放置错误属性警告的目的标记“warn_on_literal_pattern”属性已使用。在将构造函数移动到环境中时调用它。
val mark_deprecated_mutable_used : Parsetree.attributes -> unit
为放置错误属性警告的目的标记“deprecated_mutable”属性已使用。在将可变字段的标签移动到环境中时调用它。
val check_alerts : Location.t -> Parsetree.attributes -> string -> unit
val check_alerts_inclusion : def:Location.t ->
use:Location.t ->
Location.t -> Parsetree.attributes -> Parsetree.attributes -> string -> unit
val alerts_of_attrs : Parsetree.attributes -> Misc.alerts
val alerts_of_sig : Parsetree.signature -> Misc.alerts
val alerts_of_str : Parsetree.structure -> Misc.alerts
val check_deprecated_mutable : Location.t -> Parsetree.attributes -> string -> unit
val check_deprecated_mutable_inclusion : def:Location.t ->
use:Location.t ->
Location.t -> Parsetree.attributes -> Parsetree.attributes -> string -> unit
val error_of_extension : Parsetree.extension -> Location.error
val warning_attribute : ?ppwarning:bool -> Parsetree.attribute -> unit
应用指定属性的警告设置。“ocaml.warning”/“ocaml.warnerror”(以及没有前缀的变体)将被处理并标记为已使用以警告 53。其他属性将被忽略。
还实现 ocaml.ppwarning(除非传递 ~ppwarning:false)。
val warning_scope : ?ppwarning:bool -> Parsetree.attributes -> (unit -> 'a) -> 'a
在新的警告设置范围内执行函数。这意味着在执行此函数期间对 warning_attribute
的任何调用的效果将在执行后被丢弃。
该函数还接收一个属性列表,这些属性将在函数执行之前在新范围内使用 warning_attribute
进行处理。
val has_attribute : string -> Parsetree.attributes -> bool
has_attribute name attrs
如果在 attrs
中存在名称为 name
或 "ocaml." ^ name
的属性,则为真。它将该属性标记为已使用,用于放置错误属性警告。
type
attr_action =
| |
Mark_used_only |
| |
返回 |
select_attributes actions attrs
找到出现在 actions
中的 attrs
的元素,并根据相应的 attr_action
返回它们或仅将它们标记为已使用。
actions
列表的每个元素 (nm, action)
是一个属性以及一个 attr_action
,用于指定如何处理该属性。该操作用于适应不同的编译器配置。如果一个属性只在某些编译器配置中使用,那么在我们使用其他配置进行编译时,我们仍然需要查找它并标记它为已使用。否则,我们将发出虚假的放置错误属性警告。
val select_attributes : (string * attr_action) list ->
Parsetree.attributes -> Parsetree.attributes
val attr_equals_builtin : Parsetree.attribute -> string -> bool
attr_equals_builtin attr s
如果属性的名称为 s
或 "ocaml." ^ s
,则为真。这对于手动检查属性名称很有用,但请注意,这样做不会导致将属性标记为已使用以用于警告 53,因此通常最好使用 has_attribute
或 select_attributes
。
val warn_on_literal_pattern : Parsetree.attributes -> bool
val explicit_arity : Parsetree.attributes -> bool
val immediate : Parsetree.attributes -> bool
val immediate64 : Parsetree.attributes -> bool
val has_unboxed : Parsetree.attributes -> bool
val has_boxed : Parsetree.attributes -> bool