Visual Studio Syntax Check |
|
name it LuaCheck.lua and put it your lua directory. Usage instructions are enclosed in the file:
-- uses the lua command line compiler to check the syntax of a lua file
-- formats the output so as to MS DevStudio can understand the output
-- and jump to the next error line
--
-- how to make it work?
--
-- just set up a new Tool (Tools/Customize/Tools) with the following options:
-- Command : lua.exe
-- Arguments : -f LuaCheck.lua "$(FilePath)"
-- Initial directory : c:\lua (or wherever your lua.exe is located)
-- Use Output Window : (checked)
--
-- After that, you can add a keyboard shortcut for this tool:
-- (Tools/Customize/Tools) (select from Category: Tools, then from
-- Commands: UserToolX (where X is the number of the newly defined tool)
-- then assign a new key to it...
--
-- Have Fun!
-- Peter Prade
print("Lua Syntax Checking")
print("--------------------")
print()
-- get argument - the file name
if arg and arg[1] then
file = arg[1]
if strsub(file,-4,-1) ~= ".lua" then
print("warning: file has no .lua extension!")
end
end
-- define 3 tool functions out of my "standardlibrary":
function readfile(name)
local f = openfile(name, "rt")
local s = read(f, "*a")
closefile(f)
return s
end
function tfind(t, s)
return foreachi(t, function(i, v) if v==%s then return i end end)
end
function tadd(t, v)
if not tfind(t, v) then tinsert(t, v) end
end
-- reformat errors so that visual studio understands them:
function outputerror(msg, last, line, file)
print(file .. "(" .. line .. "): error: " .. msg )
-- check if the error refers to another line:
gsub(msg, "%((.-) at line (.-)%)%;$", function(msg, line)
print(%file .. "(" .. line .. "): error: ... " .. msg )
end)
print(file .. "(" .. line .. "): error: " .. last)
end
-- format list of globals nicely:
function printnice(t)
for i = 1, getn(t) do
write(t[i])
if i < getn(t)-1 then
write(", ")
elseif i < getn(t) then
write(" and ")
end
if mod(i,5)==0 then
write("\n")
end
end
if mod(getn(t),5)~=0 then
write("\n")
end
end
if file then -- check the specified file:
print("Calling lua compiler with "..file.." ...")
retval = execute("luac -p "..file.." 2>LuaCheck.log")
_, errors = gsub(readfile("LuaCheck.log"),
"luac%:(.-)\n (last token read: `.-') at line (.-) in file `(.-)'",
outputerror)
print(errors .. " compile error(s) found.")
if errors == 0 then
retval = execute("luac -l "..file.." >LuaCheck.log")
s = readfile("LuaCheck.log")
names_set = {}
gsub(s, "%d+ %[%d+%] SETGLOBAL %d+ ; (.-)\n",
function(name) tadd(names_set,name) end)
if getn(names_set)>0 then
sort(names_set)
print(getn(names_set) .. " global variable(s) are created in the file: ")
printnice(names_set)
end
end
else
print("error: no file to scan specified")
end
print() -- add empty line