开源公告|LuaHelper-可定制化的高性能Lua插件

本文介绍了一款针对Lua语言设计的高性能插件LuaHelper,它通过协程开发、实时检测和丰富的功能如智能补全、引用查找等,解决了现有工具在大型项目中的不足,旨在提高开发效率和代码质量。此外,文章还概述了插件的多编辑器适配、性能优化和未来规划。

54baf6bdef2fa00676b3a5eb2e6651c5.gif

导语:Lua因其语法简单、使用灵活,在游戏开发中十分流行。但因其是一门小众语言,相关工具并不完善。在Lua项目开发过程中,发现目前市面流行的各类Lua工具,仍存在一些不足。在代码编辑方面,随着项目工程文件的日益增多,插件使用会存在卡顿情况,“代码补全”效率下降;“全文引用查找“等部分基础功能,仍未支持。在代码静态检查方面,仅能提供“单文件"程度的检查;“语义检查“种类较少,检测的错误有限。这些不足一定程度上影响了Lua开发者的效率和代码质量。

LuaHelper是一款可定制化的高性能Lua插件,它基于Lua编译原理过程,采用LSP协议开发实现。通过提供对Lua编辑、检测、注释等方面的丰富功能,有效提高了Lua开发的效率与质量。

06996bd974be62b0f9ca0866b5748c4a.png

主要设计目标

1.多编辑器高适配。插件核心功能仅需一次开发,可以通过适配不同编辑器前端的方式,完成多编辑器下的核心功能支持。

2.各项功能完善。代码编辑方面,除了包含基础代码编辑辅助功能外,还需支持"符号查找"、"全局引用查找"、"智能代码补全"等功能。代码静态检测方面,需要丰富语义检测的种类。

3.性能高效。面对各类大型项目,各项功能具备高实时性,无明显卡顿。插件占用内存小。

4.解决Lua弱类型语言带来的项目后期维护成本高的问题。

3995da1927ed0f714307f570f801dfe8.png

LuaHelper核心功能简介

1.主要设计特点

  • 协程开发,实时检测,毫秒级输出检测结果

  • 支持大型Lua项目,完美支持1000+文件项目工程的编辑与检测

  • 全面的错误类型检测,包括:语法检测、语义检测

  • 丰富的可配置项,包括:多种告警信息配置、可忽略文件设定

  • 内存消耗低,低性能机器仍可流畅运行

2.支持基于作用域的各类型引用查找

32af199ba3c1760201fb4de33e9074bf.gif

3.智能补全

069c957d69913183213e01288576c9f5.gif

4.全局符号表查询

edbb83aaf68053336bd73d6713b3deee.gif

5.丰富的语法/语义检测

222be28a0fda3be06ed3f1e7013d2ef0.gif

6.支持代码调试

d661a091dd0354d35083e591c8e1b88f.png

fc351b0f7edc0e1b9d94fc677f821084.png

LuaHelper项目规划

1.增强语法检查功能,支持编辑过程中提示多处语法错误的能力

2.函数注释支持markdown语法

3.优化注解功能,增加注解字段查找引用

4.进一步优化插件性能,提升插件速度并降低内存占用

d93dcadd8c84633c28bdfa69ae3e29e1.png

LuaHelper开源地址

https://github.com/Tencent/LuaHelper

请给项目 一个 Star !

欢迎提出你的 issue 和 PR!

 国内镜像地址:

https://git.code.tencent.com/Tencent_Open_Source

(登录后才能访问公开项目)

腾讯工蜂源码系统为开源开发者提供完整、最新的腾讯开源项目国内镜像

关注腾讯开源公众号

获取更多最新腾讯官方开源信息!

2d5c14669e00bfb5ececbdddf947ee9c.png

可以方便的将lua嵌入c++程序<br>能高效的存取lua变量<br>方便使用c++类扩展lua功能<br>支持 c++对象指针参数,返回值等等<br><br>//CreateClass<类型>([是否生成析构函数(默认=true)])<br> //Constructor<参数列表>([可选]构造函数名<lua不支持重载>)<br> //CreateMethod<返回值类型>(函数名,函数指针)<br> //CreateStaticMethod<返回值类型>(函数名,函数指针)<br> //默认生成释放函数Free<br> LContext.CreateClass<test2>()<br> .Constructor();<br> LContext.CreateClass<test>()<br> .Constructor()<br> .Constructor<test2*>("test_ptr")<br> .Constructor<int>()<br> .Constructor<const char*>("test_str")<br> .Constructor<int,int>()<br> .CreateMethod<int>("fn",test::fn)<br> .CreateMethod<int>("fn2",test::fn2)<br> .CreateMethod<void>("fn3",test::fn3)<br> .CreateMethod<void>("fn4",test::fn4)<br> .CreateStaticMethod<void>("test_fn",test_fn);//注册类静态方法<br> LContext.CreateStaticMethod<void>("test_fn",test_fn);<br> LContext.CreateStaticMethod<int>("test_fn2",test_fn2);<br> LContext.CreateStaticMethod<void>("test_fn5",test_fn5);<br> LContext.CreateStaticMethod<int>("test_fn6_with_ret",test_fn6_with_ret);<br> LContext.CreateStaticMethod<void>("test_fn6_with_object_param",test_fn6_with_object_param);<br> LContext.CreateStaticMethod<int>("fn5",test::fn5);<br> LContext.CreateStaticMethod<test2*>("test_return_object",test_return_object);<br>................<br><br>//测试类静态方法<br> LContext.GetVariable("test:test_fn").Invoke();<br><br> LContext.GetVariable("test_fn").Invoke();<br> LContext.GetVariable("test_fn5").Invoke(0,0,0,0,0);<br> LContext.GetVariable("test_fn6_with_object_param").Invoke(&LTest2);<br> int kl = LContext.GetVariable("test_fn6_with_ret").InvokeWithReturn<int>(19201,0,0,0,0);<br>......................<br><br>//返回c++对象到Lua测试<br> test2* pp2 = LContext.GetVariable("test_return_object").InvokeWithReturn<test2*>(&LTest2);<br> if(pp2->i != LTest2.i) throw "Error.";<br> //返回c++对象到Lua测试<br> if(!LContext.DoString("v2 = test2:test2();"))<br> printf("%s",LContext.GetLastError());<br> if(!LContext.DoString("print(v2);vv3 = test_return_object(v2);print(vv3);"))<br> printf("%s",LContext.GetLastError());<br> pp2 = LContext.GetVariable("vv3").ToObject<test2*>();<br> if(pp2->i != LTest2.i) throw "Error";
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值