lua中检查静态常量是否正确引用

  • 思路
  • 代码

因在项目开发中会出现引用了不存在的常量,为了方便检查这种情况,所以想着添加针对性脚本check

思路

  1. 加载要检查的常量结构到KEYWORD
  2. 通过gmatch匹配指定路径下的所有文件,依次检查引用到目标变量的key是否存在于KEYWORD(主要会排除掉当前脚本路径,最好检查到第三层key)

代码

-- 获取当前脚本的路径(用于排除)local function get_current_file_path()local current_file = debug.getinfo(1, "S").sourceif current_file:sub(1, 1) == "@" thencurrent_file = current_file:sub(2)endreturn current_fileendlocal current_file = get_current_file_path()-- 目标目录local target_dir = "./mod/"-- 目标常量local S_KEYWORD = "G_COMMON"-- 可自定义,保证KEYWORD是指向要验证的常量数据就行local KEYWORD = _G[S_KEYWORD]-- 这里只解析到第三层key,可以处理大多数情况了local function check_g_const_key()local lua_files = io.popen( 'find ' .. target_dir .. ' -name "*.lua"'):read("*a")for file in lua_files:gmatch("[^\r\n]+") doif file ~= current_file thenlocal content = io.open(file):read("*a")-- 查找所有G_KEYWORD.XXX的引用for key1 in content:gmatch(S_KEYWORD .. "%.([%w_]+)") doif not KEYWORD[key1] == nil thenprint(string.format("ref_fail: file: %s ===> key1: %s  ", file, key1))else-- 查找所有G_KEYWORD.XXX.XXX的引用for key2 in content:gmatch(S_KEYWORD .. "." .. key1 .. "%.([%w_]+)") doif KEYWORD[key1][key2] == nil thenprint(string.format("ref_fail: file: %s ===> key1: %s, key2: %s  ", file, key1, key2))else-- 查找所有G_KEYWORD.XXX.XXX.XXX的引用for key3 in content:gmatch(S_KEYWORD .. "." .. key1 .. "." .. key2 .. "%.([%w_]+)") doif KEYWORD[key1][key2][key3] == nil thenprint(string.format("ref_fail: file: %s ===> key1: %s, key2: %s, key3: %s  ", file, key1, key2, key3))endendendendendendendendendcheck_g_const_key()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89011.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89011.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89011.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考完数通,能转云计算/安全方向吗?转型路径与拓展路线分析

不少网工考完 HCIE数通 后,都会面临一个现实问题:“能不能往云计算、安全这些热门方向转?”可以,而且非常值得。但怎么转、学什么、有没有路线图,是关键。一、为什么考完HCIE数通后适合转方向?技术基础扎实…

2.逻辑回归、Softmax回归——鸢尾花大作战

逻辑回归 逻辑回归其实并不是回归,而是一个分类算法 分类问题:邮件分类、图像识别、疾病诊断、文字情感分析、金融欺诈检测 根据历史数据,预测样本是属于哪个类别,通过数据拟合分界 主要用于二分类任务 逻辑回归公式 事实上是在多…

【Lucene/Elasticsearch】**Query Rewrite** 机制

这段话描述的是 Lucene/Elasticsearch 的 **Query Rewrite** 机制,核心一句话:> **把“高级”或“逻辑”查询(如 PrefixQuery、WildcardQuery、RangeQuery)在真正执行前,拆成最底层的、可直接倒排索引查的“原子查询…

小智完整MCP交互流程(以调节音量为例)

1. 初始化阶段 - MCP工具注册 在 mcp_server.cc 中,音量控制工具在 AddCommonTools() 中注册: AddTool("self.audio_speaker.set_volume", "Set the volume of the audio speaker. If the current volume is unknown, you must call self…

极狐GitLab CEO 柳钢——极狐 GitLab 打造中国企业专属 AI 编程平台,引领编程新潮流

当下,AI 编程已成为人工智能大模型领域的耀眼明星,是公认的最好应用领域之一。其发展速度惊人,从最初简单的代码建议、代码补全等基础智能功能,一路高歌猛进,如今已涵盖智能单元测试、智能代码审核、智能体编程、代码仓…

tiktok 弹幕 逆向分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析部分python代码部分python代码…

Java学习打卡22(JAVA中的错误Error和异常Exception)

异常( Exception ):软件程序在运行过程中,出现的不期而至的各种情况,如:文件找不到、网络连接失败、非法参数等。要理解JAVA异常处理是如何工作的,需要掌握以下三种类型的异常:检查性…

AntV G6 基础元素详解(React版)

一、初识 AntV G6 AntV G6 是蚂蚁集团推出的专业级图可视化引擎,适合构建关系图谱、拓扑图、流程图等场景。相比其他图形库,G6 提供完整的布局算法 和交互体系 ,开发者在 10 分钟内即可搭建可交互的图应用。 技术特点速览: 支持 C…

【解决】联想电脑亮度调节

更新后图标变大调节分辨率然后亮度就不能调节了快捷键WindowsX打开设备管理器右键显卡更新驱动程序选择“浏览我的电脑以查找驱动程序(R)”选择“让我从计算机上的可驱动程序列表中选取(L)”点击下一步成功解决

将Blender、Three.js与Cesium集成构建物联网3D可视化系统

将Blender、Three.js与Cesium集成构建物联网3D可视化系统,可实现从精细设备建模到宏观地理空间展示的全栈能力。以下是技术整合方案及典型应用场景:一、技术栈分工与集成逻辑 #mermaid-svg-gCvcBVB9ebl092ap {font-family:"trebuchet ms",verd…

用TensorFlow进行逻辑回归(一)

这一节我们用TensorFlow定义简单的分类器。首先考虑分类器的方程式是什么是值得的。数学习的技巧是使用sigmoid函数。sigmoid函数绘制如图3-40, 通常标记为σ, 是实数域里的函数取值(0, 1)。这个特征很便利,因为我们可以将sigmoid的输出解释为事件发现的概率。 (转…

【Java代码审计(2)】MyBatis XML 注入审计

代码背景:某公司使用 MyBatis 作为持久层框架,登录功能如下: Java 接口代码: public interface UserMapper {User findByUsernameAndPassword(Param("username") String username,Param("password") String p…

Spring Boot目录变文件夹?3步解决!

在 Spring Boot 项目中,当你在 src/main/java 下看到目录结构而不是包结构时,这通常是 IDE(如 IntelliJ IDEA)的显示问题或项目配置问题。以下是原因和解决方案:问题原因IDE 未正确识别 Java 源代码根目录 src/main/ja…

Appium源码深度解析:从驱动到架构

Appium源码深度解析:从驱动到架构 Appium 源码概览 Appium 是一个开源的移动自动化测试框架,支持跨平台(iOS、Android)和多种编程语言(Java、Python 等)。其源码托管在 GitHub 上,主要由 JavaScript 和 Node.js 实现,核心逻辑围绕客户端-服务器架构设计。 GitHub 仓库…

给 Excel 整列空格文字内容加上前缀:像给文字穿衣服一样简单!

目录 步骤一:选中目标列 打开Excel表格并定位列点击列标题选中整列 步骤二:输入公式,变身“魔法” 在公式编辑栏输入公式按下回车键查看效果 步骤三:向下填充,批量处理 鼠标定位到单元格右下角按住鼠标左键向下拖动填充…

Spring Boot 启动原理揭秘:从 main 方法到自动装配

Spring Boot 启动原理揭秘:从 main 方法到自动装配 引言 Spring Boot 作为 Java 领域最流行的开发框架之一,凭借其“开箱即用”的特性极大地简化了 Spring 应用的搭建和部署。然而,尽管开发者在日常工作中频繁使用 Spring Boot 的启动类&…

OpenCV 与深度学习:从图像分类到目标检测技术

一、深度学习:从 “人工设计” 到 “自动学习”1.1 深度学习的定位:AI、机器学习与深度学习的关系人工智能(AI):是一个宽泛的领域,目标是构建能模拟人类智能的系统,涵盖推理、感知、决策等能力。…

Docker 镜像推送至 Coding 制品仓库超时问题排查与解决

Docker 镜像推送至 Coding 制品仓库超时问题排查与解决 在将 Docker 镜像推送至 Coding 的制品仓库时,可能会遇到 docker push 命令超时失败的问题。但使用 curl -i http://xxx.coding.xxxx.xx 测试时,连接却能成功建立。以下是排查过程及解决方案。 问题…

https交互原理

Https 交互时序图:HTTPS 通信中结合 RSA 和 AES 加密的流程,本质是利用 RSA 的安全特性交换 AES 密钥,再用高效的 AES 加密实际数据传输。HTTPS 交互核心流程(TLS/SSL 握手) 1. 建立 TCP 连接 客户端通过 TCP 三次握手…

LSTM入门案例(时间序列预测)| pytorch实现

需求 假如我有一个时间序列,例如是前113天的价格数据(训练集),然后我希望借此预测后30天的数据(测试集),实际上这143天的价格数据都已经有了。这里为了简单,每一天的数据只有一个价…