Skip to content

Commit a4c8e4a

Browse files
Merge pull request #88 from inaka/elbrujohalcon.fix.spec
[Fix #87] Fix parse-reverting of -define attributes
2 parents 50907b5 + 3000ee6 commit a4c8e4a

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

rebar.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
{profiles,
99
[{test, [{cover_enabled, true}, {cover_opts, [verbose]}, {ct_opts, [{verbose, true}]}]}]}.
1010

11-
{alias, [{test, [compile, lint, xref, dialyzer, ct, cover, ex_doc]}]}.
11+
{alias, [{test, [compile, lint, xref, dialyzer, ct, cover]}]}.
1212

1313
%% == Dependencies and plugins ==
1414

src/ktn_code.erl

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,19 @@
1212

1313
-export_type([tree_node/0, tree_node_type/0, beam_lib_beam/0]).
1414

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.
1518
-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().
2528
-type tree_node() ::
2629
#{type => tree_node_type(),
2730
attrs => map(),
@@ -126,7 +129,15 @@ revert(attribute, Node0) ->
126129
Gs = [[erl_syntax:revert(X) || X <- L] || L <- Subs],
127130
Node = erl_syntax:update_tree(Node0, Gs),
128131

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+
130141
Args = erl_syntax:attribute_arguments(Node),
131142
Pos = erl_syntax:get_pos(Node),
132143
{attribute, Pos, Name, Args};
@@ -184,7 +195,7 @@ consult(Source) ->
184195

185196
%% Getters
186197

187-
-spec type(tree_node()) -> atom().
198+
-spec type(tree_node()) -> undefined | tree_node_type().
188199
type(#{type := Type}) ->
189200
Type;
190201
type(undefined) ->

0 commit comments

Comments
 (0)