diff options
Diffstat (limited to 'lib/stdlib')
| -rw-r--r-- | lib/stdlib/src/erl_pp.erl | 8 | ||||
| -rw-r--r-- | lib/stdlib/test/erl_pp_SUITE.erl | 13 | 
2 files changed, 16 insertions, 5 deletions
| diff --git a/lib/stdlib/src/erl_pp.erl b/lib/stdlib/src/erl_pp.erl index c0596e5ba6..657cb5d34c 100644 --- a/lib/stdlib/src/erl_pp.erl +++ b/lib/stdlib/src/erl_pp.erl @@ -214,7 +214,9 @@ lattribute({attribute,_Line,type,Type}, Opts, _State) ->  lattribute({attribute,_Line,opaque,Type}, Opts, _State) ->      [typeattr(opaque, Type, Opts),leaf(".\n")];  lattribute({attribute,_Line,spec,Arg}, _Opts, _State) -> -    [specattr(Arg),leaf(".\n")]; +    [specattr(spec, Arg),leaf(".\n")]; +lattribute({attribute,_Line,callback,Arg}, _Opts, _State) -> +    [specattr(callback, Arg),leaf(".\n")];  lattribute({attribute,_Line,Name,Arg}, Opts, State) ->      [lattribute(Name, Arg, Opts, State),leaf(".\n")]. @@ -311,14 +313,14 @@ union_elem(T) ->  tuple_type(Ts, F) ->      {seq,${,$},[$,],ltypes(Ts, F)}. -specattr({FuncSpec,TypeSpecs}) -> +specattr(SpecKind, {FuncSpec,TypeSpecs}) ->      Func = case FuncSpec of                 {F,_A} ->                     format("~w", [F]);                 {M,F,_A} ->                     format("~w:~w", [M, F])             end, -    {first,leaf("-spec "), +    {first,leaf(lists:concat(["-", SpecKind, " "])),       {list,[{first,leaf(Func),spec_clauses(TypeSpecs)}]}}.  spec_clauses(TypeSpecs) -> diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl index ff3470349e..2b7cec87df 100644 --- a/lib/stdlib/test/erl_pp_SUITE.erl +++ b/lib/stdlib/test/erl_pp_SUITE.erl @@ -43,7 +43,7 @@  	  receive_after/1, bits/1, head_tail/1,  	  cond1/1, block/1, case1/1, ops/1, messages/1,  	  old_mnemosyne_syntax/1, -	  import_export/1, misc_attrs/1, +	  import_export/1, misc_attrs/1, dialyzer_attrs/1,  	  hook/1,  	  neg_indent/1, @@ -77,7 +77,7 @@ groups() ->        [func, call, recs, try_catch, if_then, receive_after,         bits, head_tail, cond1, block, case1, ops,         messages, old_mnemosyne_syntax]}, -     {attributes, [], [misc_attrs, import_export]}, +     {attributes, [], [misc_attrs, import_export, dialyzer_attrs]},       {tickets, [],        [otp_6321, otp_6911, otp_6914, otp_8150, otp_8238,         otp_8473, otp_8522, otp_8567, otp_8664, otp_9147, @@ -597,6 +597,15 @@ misc_attrs(Config) when is_list(Config) ->      ok. +dialyzer_attrs(suite) -> +    []; +dialyzer_attrs(Config) when is_list(Config) -> +    ok = pp_forms(<<"-type foo() :: #bar{}. ">>), +    ok = pp_forms(<<"-opaque foo() :: {bar, fun((X, [42,...]) -> X)}. ">>), +    ok = pp_forms(<<"-spec foo(bar(), qux()) -> [T | baz(T)]. ">>), +    ok = pp_forms(<<"-callback foo(<<_:32,_:_*4>>, T) -> T. ">>), +    ok. +  hook(suite) ->      [];  hook(Config) when is_list(Config) -> | 
