Protobuf:如何获得方法的正确选项顺序?

I am writing protoc plugin in Go which should generate documentation for our GRPC services and currently struggle in attempt to know right order of options.

First, how the protobuf looks like

 syntax = "proto3";
 option go_package = "sample";

 package sample

 import "common/extensions.proto"

 message SimpleMessage {
     // Id represents the message identifier.
     string id = 1;
     int64 num = 2;
 }

 message Response {
    int32 code = 1;
 }

 enum ErrorCodes {
     RESERVED = 0;
     OK    = 200
     ERROR = 6000
     PANIC = 6001
 }

 service EchoService {
     rpc Echo (SimpleMessage) returns (Response) {
        // common.grpc_status is an extension defined somewhere
        // these are list of possible return statuses
         option (common.grpc_status) = {
             status: "OK"
             status: "ERROR"
             status: "PANIC" // Every status string will must be one of ErrorCodes items
         };

         option (common.middlewares) = {
             middleware: "csrf"
             middleware: "session"
         }
     }
 };

As you see, there're two options here. The problem is protoc doesn't bind position directly to tokens. It leaves this information in a special sections where it can be restored via using so called "paths". And these paths are rely on order, while options are hidden and can only be retrieved using proto.GetExtension function which doesn't report option index either. I need this token location information to report errors. Is there any way to get option index or something equivalent?

I am thinking about using standalone parser just to retrieve the right order, but this feels somewhat awkward. Hope there's a better way.