|
12 | 12 |
|
13 | 13 | -export_type([tree_node/0, tree_node_type/0, beam_lib_beam/0]). |
14 | 14 |
|
| 15 | +%% NOTE: we use atom() below, because erl_scan:category() is not exported. |
| 16 | +%% In fact, this type ends up being just atom() for dialyzer, |
| 17 | +%% since it has too many options and it's compressed. |
15 | 18 | -type tree_node_type() :: |
16 | | - root | function | clause | match | tuple | atom | integer | float | string | char | |
17 | | - binary | binary_element | var | call | remote | 'case' | case_expr | case_clauses | |
18 | | - 'fun' | named_fun | query | 'try' | try_catch | try_case | try_after | 'if' | 'catch' | |
19 | | - 'receive' | receive_after | receive_case | nil | cons | map | map_field_assoc | |
20 | | - map_field_exact | lc | lc_expr | generate | bc | bc_expr | b_generate | op | |
21 | | - record_field | record_index | block | module | export | import | compile | vsn | on_load | |
22 | | - behaviour | behavior | callback | record | include | include_lib | define | undef | |
23 | | - ifdef | ifndef | 'else' | endif | elif | error | warning | file | line | type | opaque | |
24 | | - export_type | remote_type | ann_type | paren_type | any. |
| 19 | + 'case' | 'catch' | 'else' | 'fun' | 'if' | 'maybe' | 'receive' | 'try' | any | atom | |
| 20 | + b_generate | bc | bc_expr | binary | binary_element | block | call | callback | |
| 21 | + case_clauses | case_expr | char | clause | comment | cons | default | define | export | |
| 22 | + float | function | generate | import | integer | lc | lc_expr | m_generate | macro | map | |
| 23 | + map_field_assoc | map_field_exact | match | maybe_match | mc | mc_expr | module | |
| 24 | + named_fun | nil | nominal | op | opaque | query | receive_after | receive_case | record | |
| 25 | + record_attr | record_field | record_index | remote | remote_type | root | spec | string | |
| 26 | + try_after | try_case | try_catch | tuple | type | type_attr | type_map_field | |
| 27 | + typed_record_field | user_type | var | atom(). |
25 | 28 | -type tree_node() :: |
26 | 29 | #{type => tree_node_type(), |
27 | 30 | attrs => map(), |
@@ -126,7 +129,15 @@ revert(attribute, Node0) -> |
126 | 129 | Gs = [[erl_syntax:revert(X) || X <- L] || L <- Subs], |
127 | 130 | Node = erl_syntax:update_tree(Node0, Gs), |
128 | 131 |
|
129 | | - Name = erl_syntax:attribute_name(Node), |
| 132 | + Name = |
| 133 | + try |
| 134 | + erl_syntax:atom_value( |
| 135 | + erl_syntax:attribute_name(Node)) |
| 136 | + catch |
| 137 | + _:_ -> |
| 138 | + erl_syntax:attribute_name(Node) |
| 139 | + end, |
| 140 | + |
130 | 141 | Args = erl_syntax:attribute_arguments(Node), |
131 | 142 | Pos = erl_syntax:get_pos(Node), |
132 | 143 | {attribute, Pos, Name, Args}; |
@@ -184,7 +195,7 @@ consult(Source) -> |
184 | 195 |
|
185 | 196 | %% Getters |
186 | 197 |
|
187 | | --spec type(tree_node()) -> atom(). |
| 198 | +-spec type(tree_node()) -> undefined | tree_node_type(). |
188 | 199 | type(#{type := Type}) -> |
189 | 200 | Type; |
190 | 201 | type(undefined) -> |
|
0 commit comments