294
294
case get_deprecated(Ts) of
296
296
M = Env#env.module,
297
case erl_internal:obsolete(M, F, A) of
298
{true, {M1, F1, A1}} ->
299
Text = if M =:= M1 ->
300
io_lib:fwrite("~w/~w", [F1, A1]);
302
io_lib:fwrite("~w:~w/~w",
306
edoc_refs:function(F1, A1);
308
edoc_refs:function(M1, F1, A1)
311
{a, href(Ref, Env), [{code, [Text]}]},
313
[{deprecated, description(Desc)}];
315
[{deprecated, description([Text])}];
297
case otp_internal:obsolete(M, F, A) of
298
{Tag, Text} when Tag =:= deprecated; Tag =:= removed ->
300
{Tag, Repl, _Rel} when Tag =:= deprecated; Tag =:= removed ->
301
deprecated(Repl, Env);
309
deprecated(Repl, Env) ->
310
{Text, Ref} = replacement_function(Env#env.module, Repl),
311
Desc = ["Use ", {a, href(Ref, Env), [{code, [Text]}]}, " instead."],
315
[{deprecated, description(Desc)}].
317
replacement_function(M0, {M,F,A}) when is_list(A) ->
318
%% refer to the largest listed arity - the most general version
319
replacement_function(M0, {M,F,lists:last(lists:sort(A))});
320
replacement_function(M, {M,F,A}) ->
321
{io_lib:fwrite("~w/~w", [F, A]), edoc_refs:function(F, A)};
322
replacement_function(_, {M,F,A}) ->
323
{io_lib:fwrite("~w:~w/~w", [M, F, A]), edoc_refs:function(M, F, A)}.
323
325
get_expr_ref(Expr) ->
324
326
case catch {ok, erl_syntax_lib:analyze_application(Expr)} of
325
327
{ok, {F, A}} when is_atom(F), is_integer(A) ->
418
420
merge_returns(Spec, Ts) ->
419
case get_tags(return, Ts) of
421
case get_tags(returns, Ts) of
421
423
case edoc_types:range_desc(Spec) of