From 015dcc985a22ca1074b54235fc48f1d5292d716b Mon Sep 17 00:00:00 2001 From: Lazar Bulovan Date: Sat, 21 Feb 2026 01:08:03 +0100 Subject: [PATCH] fix: handle line comments and := operator in type extraction - Skip // line comments when finding type separator colon - Only match : that is NOT followed by = (avoid := assignment) - Remove line comments from type_part before extraction - Fixes false 'Unknown data type' warnings in VAR sections --- src/diagnostics.lua | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/diagnostics.lua b/src/diagnostics.lua index 3b11798..02e5517 100644 --- a/src/diagnostics.lua +++ b/src/diagnostics.lua @@ -118,11 +118,16 @@ function M.validate_diagnostics(content, workspace_types, root_dir) local type_part = nil local brace_depth = 0 local comment_depth = 0 - local last_colon = nil + local line_comment = false + local type_colon = nil for i = 1, #line do local c = line:sub(i, i) local next_c = line:sub(i+1, i+1) - if c == "(" and next_c == "*" then + if c == "/" and next_c == "/" then + line_comment = true + elseif line_comment then + -- Skip everything after // + elseif c == "(" and next_c == "*" then comment_depth = comment_depth + 1 elseif c == "*" and next_c == ")" and comment_depth > 0 then comment_depth = comment_depth - 1 @@ -130,15 +135,17 @@ function M.validate_diagnostics(content, workspace_types, root_dir) brace_depth = brace_depth + 1 elseif c == "}" and comment_depth == 0 then brace_depth = brace_depth - 1 - elseif c == ":" and brace_depth == 0 and comment_depth == 0 then - last_colon = i + elseif c == ":" and brace_depth == 0 and comment_depth == 0 and next_c ~= "=" then + -- Only capture colon that's NOT followed by = (not := assignment) + type_colon = i end end - if last_colon then - type_part = line:sub(last_colon + 1) + if type_colon then + type_part = line:sub(type_colon + 1) end if type_part then type_part = type_part:gsub("%s*%(%*.-%*%)", "") -- Remove block comments (* ... *) with leading whitespace + type_part = type_part:gsub("%s*//.*$", "") -- Remove line comments // ... type_part = type_part:gsub("%s*:=.*$", "") type_part = type_part:gsub("%s*;.*$", "") -- Remove trailing semicolon type_part = type_part:gsub("%s*$", "")