ProtoBuf生成EmmyLua注解API提示文件(支持复杂的嵌套结构)

身为一个码农,写代码没有提示是最难受最影响效率的吧,偏偏lua就是这样的。目前,大多数的Unity游戏开发者都已经开始使用IntelliJ IDEA来写lua代码,很重要的一个原因就是IDEA中的EmmyLua插件(EmmyLua插件下载地址:https://emmylua.github.io/),使用这个插件可以极大的提高我们的开发效率。

我们自己写的业务逻辑添加emmylua注解很简单,但是如何在项目中生成带注解的proto提高我们的开发效率呢?这时我们就需要一个像导表工具一样的根据proto导出emmylua注解文件的工具。

写工具的时候我想到了两种使用方式:

1、用lua代码来写,然后通过bat来执行lua脚本

2、用C#来实现,写到项目统一的工具类里,方便其他人维护跟移植项目

基于我们项目的需求,我选择了方法2来实现。首先放上效果图:

测试用的proto:

import "commons.proto";
package com.gy.server.packet;

option java_package = "com.gy.server.packet";
option java_outer_classname = "PbActivity";

// -------------------------------测试注释-------------------------------

//战斗状态
enum BattleStatus {
    NO_START = 1;                            //未开启
    BATTLE = 2;                              //战斗状态,允许玩家自由争夺位置
    SETTLEMENT = 3;                          //结算状态,做一系列结算操作,不允许玩家战斗
    RESET = 4;                               //重置状态
    SLEEP = 5;                               //休眠状态,只有控制器能唤醒
    CHANGE = 6;                              //切换状态
}

//这是一段ActivityInfo 前置测试注释1
message ActivityInfo {//这是一段ActivityInfo 前置测试注释2
    optional ActivityModule module = 1;
    optional ActivityData data = 2;
    optional int64 startTime = 3; //活动开启时间
    optional int64 endTime = 4; //活动结束时间
    //这是一个注释
    optional BattleStatus battleStatus = 5; //枚举测试


}//这是一段ActivityInfo 后置测试注释


// ***************************测试注释***************************


message ActivityModule {
    //这是一段测试注释
    optional int32 type = 1;//类型
    optional int32 activityId = 2;
    optional TaskActivityModule task = 10;
}

message ActivityData {
    optional TaskActivityData tasks = 8; 								//任务活动
}


//任务活动
message TaskActivityModule {
    repeated int32 receivedIds = 1; //已领取的奖励ID集合
    repeated TaskActivity tasks = 2; //任务进度
    repeated int32 receivedTaskIds = 3; //已接取任务ID集合

    message TaskActivity {
        optional int32 id = 1; //条目ID
        optional int64 curProgress = 2; //当前进度
        optional int64 totalProgress = 3; //总进度
    }
}

//任务活动数据
message TaskActivityData {
    repeated TaskActivityItem items = 1;

    message TaskActivityItem {
        optional int32 id = 1;
        optional int32 goalId = 2; //目标ID
        repeated PbReward rewards = 3; //常规奖励
        optional int32 vipLimit = 4; //vip等级限制
        optional string jump = 5; //跳转数据
        optional bool isSelectReward = 6; //是否选择奖励
		optional int32 resetFrequency = 7;		//重置频率,1每日,2每周,3每月
    }
}

生成的注解文件:

--  -------------------------------测试注释-------------------------------
-- 战斗状态
---@class BattleStatus : nil
BattleStatus= {
NO_START = "NO_START"; --未开启 
BATTLE = "BATTLE"; --战斗状态,允许玩家自由争夺位置 
SETTLEMENT = "SETTLEMENT"; --结算状态,做一系列结算操作,不允许玩家战斗 
RESET = "RESET"; --重置状态 
SLEEP = "SLEEP"; --休眠状态,只有控制器能唤醒 
CHANGE = "CHANGE"; --切换状态 
}

-- 这是一段ActivityInfo 前置测试注释1
-- 这是一段ActivityInfo 前置测试注释2
---@class ActivityInfo : nil
---@field public module ActivityModule
---@field public data ActivityData
---@field public startTime number@-- 活动开启时间
---@field public endTime number@-- 活动结束时间
-- 这是一个注释
---@field public battleStatus BattleStatus@-- 枚举测试
 
 
local ActivityInfo = {}

--  ***************************测试注释***************************
---@class ActivityModule : nil
-- 这是一段测试注释
---@field public type number@-- 类型
---@field public activityId number
---@field public task TaskActivityModule
local ActivityModule = {}

---@class ActivityData : nil
---@field public tasks TaskActivityData@-- 任务活动
local ActivityData = {}

-- 任务活动
---@class TaskActivityModule_TaskActivity : nil
---@field public id number@-- 条目ID
---@field public curProgress number@-- 当前进度
---@field public totalProgress number@-- 总进度
local TaskActivityModule_TaskActivity = {}

---@class TaskActivityModule : nil
---@field public receivedIds number[]@-- 已领取的奖励ID集合
---@field public tasks TaskActivityModule_TaskActivity[]@-- 任务进度
---@field public receivedTaskIds number[]@-- 已接取任务ID集合
  
local TaskActivityModule = {}

-- 任务活动数据
---@class TaskActivityData_TaskActivityItem : nil
---@field public id number
---@field public goalId number@-- 目标ID
---@field public rewards PbReward[]@-- 常规奖励
---@field public vipLimit number@-- vip等级限制
---@field public jump string@-- 跳转数据
---@field public isSelectReward boolean@-- 是否选择奖励
---@field public resetFrequency number@-- 重置频率,1每日,2每周,3每月
local TaskActivityData_TaskActivityItem = {}

---@class TaskActivityData : nil
---@field public items TaskActivityData_TaskActivityItem[]
  
local TaskActivityData = {}

话不多说,直接把源码贴出来

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值