lua中檢查靜態常量是否正確引用

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天的價格數據都已經有了。這里為了簡單,每一天的數據只有一個價…