package ppx_deriving_rpc
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=37ec4a4dd53fcb2d38d846415d3a45976d5a78c1531e6d876db2436e947172f3
sha512=4757df16d7cf2220787e2a6532e47130049894741ae1635e017cd583f28c5e55c016768d992c6739da70b29283141070f974f246b1ef467e64b034c5c231b00a
doc/ppx_deriving_rpc/Common/index.html
Module CommonSource
Many of the following functions are lifted from ppx_deriving. It's quite likely that there are good alternatives to these somewhere in ppxlib, but I've not yet found them.
They are used to deal with parameterised types. When declaring a function derived from a parameterised type, the function will be extended to take an argument for each type parameter. The important functions below are `poly_fun_of_type_decl` and `poly_apply_of_type_decl` - for declaring and using the derived functions respectively.
fold_right_type_decl fn accum type_ performs a right fold over all type variable (i.e. not wildcard) parameters in type_.
val poly_fun_of_type_decl :
loc:Ppxlib__.Location.t ->
Ppxlib.type_declaration ->
Ppxlib__.Import.expression ->
Ppxlib__.Import.expressionpoly_fun_of_type_decl type_ expr wraps expr into fun poly_N -> ... for every type parameter 'N present in type_. For example, if type_ refers to type ('a, 'b) map, expr will be wrapped into fun poly_a poly_b -> [%e expr].
fold_left_type_decl fn accum type_ performs a left fold over all type variable (i.e. not wildcard) parameters in type_.
val poly_apply_of_type_decl :
loc:Ppxlib__.Location.t ->
Ppxlib.type_declaration ->
Astlib.Ast_502.Parsetree.expression ->
Astlib.Ast_502.Parsetree.expressionpoly_apply_of_type_decl type_ expr wraps expr into expr poly_N for every type parameter 'N present in type_. For example, if type_ refers to type ('a, 'b) map, expr will be wrapped into [%e expr] poly_a poly_b. _ parameters are ignored.
val expr_of_option :
loc:Ppxlib.location ->
Ppxlib_ast.Ast.expression option ->
Ppxlib_ast.Ast.expressionexpr_of_option ~loc o turns an optional expression into an expression of an optional value. In several places there are optional attributes, e.g. @@version foo, which end up as values of type `expression option`. These are often turned into optional values in the generated code.
val get_doc :
loc:Ppxlib__.Location.t ->
Ppxlib__.Import.expression option ->
Ppxlib.attributes ->
Ppxlib__.Import.expressionget_doc loc rpcdoc attrs extracts documentation from the type declarations. rpcdoc is the result of looking for @doc tags. If this is found, we use that. If not, we look for ocamldoc docstrings and return them instead. In both cases, the result is an expression of type list