anchor.diff:  format_introspection(Defs, Opts) ->
       MsgDefs  = [Item || {{msg, _}, _}=Item <- Defs],
       EnumDefs = [Item || {{enum, _}, _}=Item <- Defs],
  +    {ServiceDef, RpcDefs} = case [{Item, Rpcs} || {{service, _}, Rpcs}=Item <- Defs] of
  +        [{Service, Rpcs}] ->
  +            {Service, Rpcs};
  +        _ -> 
  +            {undefined, []}
  +    end,
       [gpb_codegen:format_fn(
          get_msg_defs, fun() -> '<Defs>' end,
  -       [replace_tree('<Defs>', def_trees(EnumDefs, MsgDefs, Opts))]),
  +       [replace_tree('<Defs>', msg_def_trees(EnumDefs, MsgDefs, Opts))]),
        "\n",
        gpb_codegen:format_fn(
          get_msg_names, fun() -> '<Names>' end,
  
positive.code:        ?f("-export([find_enum_def/1, fetch_enum_def/1]).~n"),
         format_enum_value_symbol_converter_exports(Defs),
         ?f("-export([get_package_name/0]).~n"),
         [?f("-export([descriptor/0]).~n") || get_gen_descriptor_by_opts(Opts)],
         ?f("-export([gpb_version_as_string/0, gpb_version_as_list/0]).~n"),
         "\n",
  
negative.code:      ?f("~n"),
       format_enum_value_symbol_converters(EnumDefs),
       ?f("~n"),
       gpb_codegen:format_fn(
         get_service_def, fun() -> '<Defs>' end,
         [replace_tree('<Defs>', service_def_tree(ServiceDef, Opts))]),
       "\n",
       gpb_codegen:format_fn(
         get_rpc_names, fun() -> '<Names>' end,
         [replace_term('<Names>', [RpcName || {rpc,RpcName, _, _} <- RpcDefs])]),
       "\n",
       format_fetch_rpc_defs(RpcDefs),
       ?f("~n"),
       format_find_rpc_defs(RpcDefs, Opts),
       ?f("~n"),
       format_get_package_name(Defs),
       ?f("~n"),
       format_descriptor(Defs, Opts)
      ].
  
  msg_def_trees(EnumDefs, MsgDefs, Opts) ->
      EnumDefTrees = [erl_parse:abstract(EnumDef) || EnumDef <- EnumDefs],
      MsgDefTrees = [msg_def_tree(MsgDef, Opts) || MsgDef <- MsgDefs],
      erl_syntax:list(EnumDefTrees ++ MsgDefTrees).
  