Doc update for hz_sophia and hz_aaci and some minor fixes #30
+34
-39
@@ -631,6 +631,16 @@ builtin_typedefs() ->
|
|||||||
% can simply render the normalized type expression and know that the error will
|
% can simply render the normalized type expression and know that the error will
|
||||||
% make sense.
|
% make sense.
|
||||||
|
|
||||||
|
-spec annotate_function_specs(OpaqueSpecs, Types, Acc) -> Specs
|
||||||
|
when OpaqueSpecs :: [{string(), ArgsOpaque, ResultOpaque}],
|
||||||
|
ArgsOpaque :: [{string(), opaque_type()}],
|
||||||
|
ResultOpaque :: opaque_type(),
|
||||||
|
Types :: #{string() => typedef()},
|
||||||
|
Acc :: #{string() => {ArgsAnnotated, ResultAnnotated}},
|
||||||
|
Specs :: #{string() => {ArgsAnnotated, ResultAnnotated}},
|
||||||
|
ArgsAnnotated :: [{string(), annotated_type()}],
|
||||||
|
ResultAnnotated :: annotated_type().
|
||||||
|
|
||||||
annotate_function_specs([], _Types, Specs) ->
|
annotate_function_specs([], _Types, Specs) ->
|
||||||
Specs;
|
Specs;
|
||||||
annotate_function_specs([{Name, ArgsOpaque, ResultOpaque} | Rest], Types, Specs) ->
|
annotate_function_specs([{Name, ArgsOpaque, ResultOpaque} | Rest], Types, Specs) ->
|
||||||
@@ -639,40 +649,29 @@ annotate_function_specs([{Name, ArgsOpaque, ResultOpaque} | Rest], Types, Specs)
|
|||||||
NewSpecs = maps:put(Name, {Args, Result}, Specs),
|
NewSpecs = maps:put(Name, {Args, Result}, Specs),
|
||||||
annotate_function_specs(Rest, Types, NewSpecs).
|
annotate_function_specs(Rest, Types, NewSpecs).
|
||||||
|
|
||||||
-spec annotate_type(Opaque, Types) -> {ok, Annotated} | {error, Reason}
|
-spec annotate_type(Opaque, Types) -> {ok, Annotated}
|
||||||
when Opaque :: opaque_type(),
|
when Opaque :: opaque_type(),
|
||||||
Types :: #{string() => typedef()},
|
Types :: #{string() => typedef()},
|
||||||
Annotated :: annotated_type(),
|
Annotated :: annotated_type().
|
||||||
Reason :: none().
|
|
||||||
|
|
||||||
annotate_type(T, Types) ->
|
annotate_type(T, Types) ->
|
||||||
case normalize_opaque_type(T, Types) of
|
case normalize_opaque_type(T, Types) of
|
||||||
|
{ok, _, _, unknown_type} ->
|
||||||
|
{ok, {T, unknown_type, unknown_type}};
|
||||||
{ok, AlreadyNormalized, NOpaque, NExpanded} ->
|
{ok, AlreadyNormalized, NOpaque, NExpanded} ->
|
||||||
annotate_type2(T, AlreadyNormalized, NOpaque, NExpanded, Types);
|
annotate_type2(T, AlreadyNormalized, NOpaque, NExpanded, Types)
|
||||||
Error ->
|
|
||||||
Error
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
annotate_type2(T, _, _, unknown_type, _) ->
|
|
||||||
% If a type is unknown, then it should not be reported as the normalized
|
|
||||||
% name.
|
|
||||||
{ok, {T, unknown_type, unknown_type}};
|
|
||||||
annotate_type2(T, AlreadyNormalized, NOpaque, NExpanded, Types) ->
|
annotate_type2(T, AlreadyNormalized, NOpaque, NExpanded, Types) ->
|
||||||
case annotate_type_subexpressions(NExpanded, Types) of
|
{ok, Flat} = annotate_type_subexpressions(NExpanded, Types),
|
||||||
{ok, Flat} ->
|
|
||||||
case AlreadyNormalized of
|
case AlreadyNormalized of
|
||||||
true -> {ok, {T, already_normalized, Flat}};
|
true -> {ok, {T, already_normalized, Flat}};
|
||||||
false -> {ok, {T, NOpaque, Flat}}
|
false -> {ok, {T, NOpaque, Flat}}
|
||||||
end;
|
|
||||||
Error ->
|
|
||||||
Error
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
annotate_types([T | Rest], Types, Acc) ->
|
annotate_types([T | Rest], Types, Acc) ->
|
||||||
case annotate_type(T, Types) of
|
{ok, Type} = annotate_type(T, Types),
|
||||||
{ok, Type} -> annotate_types(Rest, Types, [Type | Acc]);
|
annotate_types(Rest, Types, [Type | Acc]);
|
||||||
Error -> Error
|
|
||||||
end;
|
|
||||||
annotate_types([], _Types, Acc) ->
|
annotate_types([], _Types, Acc) ->
|
||||||
{ok, lists:reverse(Acc)}.
|
{ok, lists:reverse(Acc)}.
|
||||||
|
|
||||||
@@ -683,34 +682,30 @@ annotate_type_subexpressions({bytes, [Count]}, _Types) ->
|
|||||||
% opaque type.
|
% opaque type.
|
||||||
{ok, {bytes, [Count]}};
|
{ok, {bytes, [Count]}};
|
||||||
annotate_type_subexpressions({variant, VariantsOpaque}, Types) ->
|
annotate_type_subexpressions({variant, VariantsOpaque}, Types) ->
|
||||||
case annotate_variants(VariantsOpaque, Types, []) of
|
{ok, Variants} = annotate_variants(VariantsOpaque, Types, []),
|
||||||
{ok, Variants} -> {ok, {variant, Variants}};
|
{ok, {variant, Variants}};
|
||||||
Error -> Error
|
|
||||||
end;
|
|
||||||
annotate_type_subexpressions({record, FieldsOpaque}, Types) ->
|
annotate_type_subexpressions({record, FieldsOpaque}, Types) ->
|
||||||
case annotate_bindings(FieldsOpaque, Types, []) of
|
{ok, Fields} = annotate_bindings(FieldsOpaque, Types, []),
|
||||||
{ok, Fields} -> {ok, {record, Fields}};
|
{ok, {record, Fields}};
|
||||||
Error -> Error
|
|
||||||
end;
|
|
||||||
annotate_type_subexpressions({T, ElemsOpaque}, Types) ->
|
annotate_type_subexpressions({T, ElemsOpaque}, Types) ->
|
||||||
case annotate_types(ElemsOpaque, Types, []) of
|
{ok, Elems} = annotate_types(ElemsOpaque, Types, []),
|
||||||
{ok, Elems} -> {ok, {T, Elems}};
|
{ok, {T, Elems}}.
|
||||||
Error -> Error
|
|
||||||
end.
|
-spec annotate_bindings(Bindings, Types, Acc) -> {ok, Annotated}
|
||||||
|
when Bindings :: [{string(), opaque_type()}],
|
||||||
|
Types :: #{string() => typedef()},
|
||||||
|
Acc :: [{string(), annotated_type()}],
|
||||||
|
Annotated :: [{string(), annotated_type()}].
|
||||||
|
|
||||||
annotate_bindings([{Name, T} | Rest], Types, Acc) ->
|
annotate_bindings([{Name, T} | Rest], Types, Acc) ->
|
||||||
case annotate_type(T, Types) of
|
{ok, Next} = annotate_type(T, Types),
|
||||||
{ok, Type} -> annotate_bindings(Rest, Types, [{Name, Type} | Acc]);
|
annotate_bindings(Rest, Types, [{Name, Next} | Acc]);
|
||||||
Error -> Error
|
|
||||||
end;
|
|
||||||
annotate_bindings([], _Types, Acc) ->
|
annotate_bindings([], _Types, Acc) ->
|
||||||
{ok, lists:reverse(Acc)}.
|
{ok, lists:reverse(Acc)}.
|
||||||
|
|
||||||
annotate_variants([{Name, Elems} | Rest], Types, Acc) ->
|
annotate_variants([{Name, Elems} | Rest], Types, Acc) ->
|
||||||
case annotate_types(Elems, Types, []) of
|
{ok, ElemsFlat} = annotate_types(Elems, Types, []),
|
||||||
{ok, ElemsFlat} -> annotate_variants(Rest, Types, [{Name, ElemsFlat} | Acc]);
|
annotate_variants(Rest, Types, [{Name, ElemsFlat} | Acc]);
|
||||||
Error -> Error
|
|
||||||
end;
|
|
||||||
annotate_variants([], _Types, Acc) ->
|
annotate_variants([], _Types, Acc) ->
|
||||||
{ok, lists:reverse(Acc)}.
|
{ok, lists:reverse(Acc)}.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user