Doc update for hz_sophia and hz_aaci and some minor fixes #30
+37
-42
@@ -631,6 +631,16 @@ builtin_typedefs() ->
|
||||
% can simply render the normalized type expression and know that the error will
|
||||
% 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) ->
|
||||
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),
|
||||
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(),
|
||||
Types :: #{string() => typedef()},
|
||||
Annotated :: annotated_type(),
|
||||
Reason :: none().
|
||||
Annotated :: annotated_type().
|
||||
|
||||
annotate_type(T, Types) ->
|
||||
case normalize_opaque_type(T, Types) of
|
||||
{ok, _, _, unknown_type} ->
|
||||
{ok, {T, unknown_type, unknown_type}};
|
||||
{ok, AlreadyNormalized, NOpaque, NExpanded} ->
|
||||
annotate_type2(T, AlreadyNormalized, NOpaque, NExpanded, Types);
|
||||
Error ->
|
||||
Error
|
||||
annotate_type2(T, AlreadyNormalized, NOpaque, NExpanded, Types)
|
||||
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) ->
|
||||
case annotate_type_subexpressions(NExpanded, Types) of
|
||||
{ok, Flat} ->
|
||||
case AlreadyNormalized of
|
||||
true -> {ok, {T, already_normalized, Flat}};
|
||||
false -> {ok, {T, NOpaque, Flat}}
|
||||
end;
|
||||
Error ->
|
||||
Error
|
||||
{ok, Flat} = annotate_type_subexpressions(NExpanded, Types),
|
||||
case AlreadyNormalized of
|
||||
true -> {ok, {T, already_normalized, Flat}};
|
||||
false -> {ok, {T, NOpaque, Flat}}
|
||||
end.
|
||||
|
||||
annotate_types([T | Rest], Types, Acc) ->
|
||||
case annotate_type(T, Types) of
|
||||
{ok, Type} -> annotate_types(Rest, Types, [Type | Acc]);
|
||||
Error -> Error
|
||||
end;
|
||||
{ok, Type} = annotate_type(T, Types),
|
||||
annotate_types(Rest, Types, [Type | Acc]);
|
||||
annotate_types([], _Types, Acc) ->
|
||||
{ok, lists:reverse(Acc)}.
|
||||
|
||||
@@ -683,34 +682,30 @@ annotate_type_subexpressions({bytes, [Count]}, _Types) ->
|
||||
% opaque type.
|
||||
{ok, {bytes, [Count]}};
|
||||
annotate_type_subexpressions({variant, VariantsOpaque}, Types) ->
|
||||
case annotate_variants(VariantsOpaque, Types, []) of
|
||||
{ok, Variants} -> {ok, {variant, Variants}};
|
||||
Error -> Error
|
||||
end;
|
||||
{ok, Variants} = annotate_variants(VariantsOpaque, Types, []),
|
||||
{ok, {variant, Variants}};
|
||||
annotate_type_subexpressions({record, FieldsOpaque}, Types) ->
|
||||
case annotate_bindings(FieldsOpaque, Types, []) of
|
||||
{ok, Fields} -> {ok, {record, Fields}};
|
||||
Error -> Error
|
||||
end;
|
||||
{ok, Fields} = annotate_bindings(FieldsOpaque, Types, []),
|
||||
{ok, {record, Fields}};
|
||||
annotate_type_subexpressions({T, ElemsOpaque}, Types) ->
|
||||
case annotate_types(ElemsOpaque, Types, []) of
|
||||
{ok, Elems} -> {ok, {T, Elems}};
|
||||
Error -> Error
|
||||
end.
|
||||
{ok, Elems} = annotate_types(ElemsOpaque, Types, []),
|
||||
{ok, {T, Elems}}.
|
||||
|
||||
-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) ->
|
||||
case annotate_type(T, Types) of
|
||||
{ok, Type} -> annotate_bindings(Rest, Types, [{Name, Type} | Acc]);
|
||||
Error -> Error
|
||||
end;
|
||||
{ok, Next} = annotate_type(T, Types),
|
||||
annotate_bindings(Rest, Types, [{Name, Next} | Acc]);
|
||||
annotate_bindings([], _Types, Acc) ->
|
||||
{ok, lists:reverse(Acc)}.
|
||||
|
||||
annotate_variants([{Name, Elems} | Rest], Types, Acc) ->
|
||||
case annotate_types(Elems, Types, []) of
|
||||
{ok, ElemsFlat} -> annotate_variants(Rest, Types, [{Name, ElemsFlat} | Acc]);
|
||||
Error -> Error
|
||||
end;
|
||||
{ok, ElemsFlat} = annotate_types(Elems, Types, []),
|
||||
annotate_variants(Rest, Types, [{Name, ElemsFlat} | Acc]);
|
||||
annotate_variants([], _Types, Acc) ->
|
||||
{ok, lists:reverse(Acc)}.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user