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*$", "")