increase accuracy of lambda detection
This commit is contained in:
parent
4f1d277fa0
commit
b49c3ea09a
71
init.lua
71
init.lua
|
@ -65,6 +65,28 @@ local function parse_element(el,pc)
|
||||||
pc.ifend = false
|
pc.ifend = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if el == "=>" then
|
||||||
|
if not pc.lambargs then
|
||||||
|
parser.warn(("invalid lambda in line %i"):format(pc.line))
|
||||||
|
return el
|
||||||
|
end
|
||||||
|
local larg = pc.lambargs
|
||||||
|
pc.lambargs = false
|
||||||
|
pc.lambend = false
|
||||||
|
pc.precurly = "function"
|
||||||
|
pc.curlyopt = true
|
||||||
|
return "function" .. larg .. " "
|
||||||
|
elseif pc.lambend then
|
||||||
|
if prefix then
|
||||||
|
parser.warn("end statement and lambda match end may be mixed")
|
||||||
|
prefix = pc.lambargs .. prefix
|
||||||
|
else
|
||||||
|
prefix = pc.lambargs
|
||||||
|
end
|
||||||
|
pc.lambargs = false
|
||||||
|
pc.lambend = false
|
||||||
|
end
|
||||||
|
|
||||||
if el == '"' or el == "'" then
|
if el == '"' or el == "'" then
|
||||||
if not pc.instring then
|
if not pc.instring then
|
||||||
pc.instring = el
|
pc.instring = el
|
||||||
|
@ -80,7 +102,7 @@ local function parse_element(el,pc)
|
||||||
pc.instring = false
|
pc.instring = false
|
||||||
end
|
end
|
||||||
elseif pc.instring then
|
elseif pc.instring then
|
||||||
return el
|
return el,prefix
|
||||||
end
|
end
|
||||||
|
|
||||||
if pc.foreach == 2 then
|
if pc.foreach == 2 then
|
||||||
|
@ -88,36 +110,36 @@ local function parse_element(el,pc)
|
||||||
if el == "{" then
|
if el == "{" then
|
||||||
table.insert(pc.opencurly, "table")
|
table.insert(pc.opencurly, "table")
|
||||||
end
|
end
|
||||||
return "pairs("..el
|
return "pairs("..el,prefix
|
||||||
elseif el == "{" then
|
elseif el == "{" then
|
||||||
if pc.foreach == 3 then
|
if pc.foreach == 3 then
|
||||||
pc.foreach = 0
|
pc.foreach = 0
|
||||||
table.insert(pc.opencurly, "for")
|
table.insert(pc.opencurly, "for")
|
||||||
pc.curlyopt = false
|
pc.curlyopt = false
|
||||||
return ") do"
|
return ") do",prefix
|
||||||
elseif not pc.curlyopt then
|
elseif not pc.curlyopt then
|
||||||
if pc.linestart then
|
if pc.linestart then
|
||||||
table.insert(pc.opencurly, "do")
|
table.insert(pc.opencurly, "do")
|
||||||
return "do "
|
return "do ",prefix
|
||||||
else
|
else
|
||||||
table.insert(pc.opencurly, "table")
|
table.insert(pc.opencurly, "table")
|
||||||
return el
|
return el,prefix
|
||||||
end
|
end
|
||||||
elseif pc.curlyopt == true then
|
elseif pc.curlyopt == true then
|
||||||
if pc.precurly == "function" or pc.precurly == "repeat" or pc.precurly == "else" then
|
if pc.precurly == "function" or pc.precurly == "repeat" or pc.precurly == "else" then
|
||||||
table.insert(pc.opencurly, pc.precurly)
|
table.insert(pc.opencurly, pc.precurly)
|
||||||
pc.precurly = false
|
pc.precurly = false
|
||||||
pc.curlyopt = false
|
pc.curlyopt = false
|
||||||
return ""
|
return "",prefix
|
||||||
end
|
end
|
||||||
elseif pc.curlyopt == "for" or pc.curlyopt == "while" then
|
elseif pc.curlyopt == "for" or pc.curlyopt == "while" then
|
||||||
table.insert(pc.opencurly, pc.curlyopt)
|
table.insert(pc.opencurly, pc.curlyopt)
|
||||||
pc.curlyopt = false
|
pc.curlyopt = false
|
||||||
return " do"
|
return " do",prefix
|
||||||
elseif pc.curlyopt == "if" then
|
elseif pc.curlyopt == "if" then
|
||||||
table.insert(pc.opencurly, pc.curlyopt)
|
table.insert(pc.opencurly, pc.curlyopt)
|
||||||
pc.curlyopt = false
|
pc.curlyopt = false
|
||||||
return " then"
|
return " then",prefix
|
||||||
end
|
end
|
||||||
elseif pc.precurly then
|
elseif pc.precurly then
|
||||||
pc.precurly = false
|
pc.precurly = false
|
||||||
|
@ -127,24 +149,24 @@ local function parse_element(el,pc)
|
||||||
if el == "}" then
|
if el == "}" then
|
||||||
local closecurly = table.remove(pc.opencurly)
|
local closecurly = table.remove(pc.opencurly)
|
||||||
if closecurly == "table" then
|
if closecurly == "table" then
|
||||||
return el
|
return el,prefix
|
||||||
elseif closecurly == "repeat" then
|
elseif closecurly == "repeat" then
|
||||||
return "" -- until will follow
|
return "",prefix
|
||||||
elseif closecurly == "for" or closecurly == "while" or
|
elseif closecurly == "for" or closecurly == "while" or
|
||||||
closecurly == "function" or closecurly == "repeat" or
|
closecurly == "function" or closecurly == "repeat" or
|
||||||
closecurly == "do" or closecurly == "else" then
|
closecurly == "do" or closecurly == "else" then
|
||||||
return "end"
|
return "end",prefix
|
||||||
elseif closecurly == "if" then
|
elseif closecurly == "if" then
|
||||||
pc.ifend = "end"
|
pc.ifend = "end"
|
||||||
return ""
|
return "",prefix
|
||||||
else
|
else
|
||||||
parser.warn(("closing curly bracket in line %i could not be matched to an opening one"):format(pc.line))
|
parser.warn(("closing curly bracket in line %i could not be matched to an opening one"):format(pc.line))
|
||||||
return el
|
return el,prefix
|
||||||
end
|
end
|
||||||
elseif el == "foreach" then
|
elseif el == "foreach" then
|
||||||
pc.curlyopt = "for"
|
pc.curlyopt = "for"
|
||||||
pc.foreach = 1
|
pc.foreach = 1
|
||||||
return "for _,"
|
return "for _,",prefix
|
||||||
elseif el == "for" then
|
elseif el == "for" then
|
||||||
pc.curlyopt = el
|
pc.curlyopt = el
|
||||||
pc.foreach = 0
|
pc.foreach = 0
|
||||||
|
@ -156,7 +178,7 @@ local function parse_element(el,pc)
|
||||||
pc.curlyopt = false
|
pc.curlyopt = false
|
||||||
if pc.foreach == 3 then
|
if pc.foreach == 3 then
|
||||||
pc.foreach = 0
|
pc.foreach = 0
|
||||||
return ") " .. el
|
return ") " .. el,prefix
|
||||||
end
|
end
|
||||||
elseif el == "while" then
|
elseif el == "while" then
|
||||||
pc.curlyopt = el
|
pc.curlyopt = el
|
||||||
|
@ -169,30 +191,24 @@ local function parse_element(el,pc)
|
||||||
pc.curlyopt = false
|
pc.curlyopt = false
|
||||||
elseif el == "fn" then
|
elseif el == "fn" then
|
||||||
pc.curlyopt = "function"
|
pc.curlyopt = "function"
|
||||||
return "function"
|
return "function",prefix
|
||||||
elseif el == "function" then
|
elseif el == "function" then
|
||||||
pc.curlyopt = el
|
pc.curlyopt = el
|
||||||
elseif el == "(" then
|
elseif el == "(" then
|
||||||
pc.newlamb = el
|
pc.newlamb = el
|
||||||
return ""
|
pc.lambend = false
|
||||||
|
return "",prefix
|
||||||
elseif el == ")" then
|
elseif el == ")" then
|
||||||
if pc.curlyopt == "function" then
|
if pc.curlyopt == "function" then
|
||||||
pc.precurly = pc.curlyopt
|
pc.precurly = pc.curlyopt
|
||||||
pc.curlyopt = true
|
pc.curlyopt = true
|
||||||
end
|
end
|
||||||
elseif el == "=>" then
|
if pc.lambargs then
|
||||||
if not pc.lambargs then
|
pc.lambend = true
|
||||||
parser.warn(("invalid lambda in line %i"):format(pc.line))
|
|
||||||
return el
|
|
||||||
end
|
end
|
||||||
local larg = pc.lambargs
|
|
||||||
pc.lambargs = false
|
|
||||||
pc.precurly = "function"
|
|
||||||
pc.curlyopt = true
|
|
||||||
return "function" .. larg .. " "
|
|
||||||
elseif el == "//" or el=="##" then
|
elseif el == "//" or el=="##" then
|
||||||
if not pc.instring then
|
if not pc.instring then
|
||||||
return "--"
|
return "--",prefix
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--print(el,pc.instring and "in string" or "")
|
--print(el,pc.instring and "in string" or "")
|
||||||
|
@ -236,6 +252,7 @@ local function parse_line(l,pc)
|
||||||
elseif el ~= "" then
|
elseif el ~= "" then
|
||||||
el = pc.lambargs .. el
|
el = pc.lambargs .. el
|
||||||
pc.lambargs = false
|
pc.lambargs = false
|
||||||
|
pc.lambend = false
|
||||||
--print("notl:", el)
|
--print("notl:", el)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -101,7 +101,14 @@ assert(
|
||||||
callit((k,v) => {
|
callit((k,v) => {
|
||||||
return k.." = "..v
|
return k.." = "..v
|
||||||
}, "this test", "more test")
|
}, "this test", "more test")
|
||||||
== "this test = more test")
|
== "this test = more test"
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(
|
||||||
|
callit((a , b) => {
|
||||||
|
return (a-b)*4
|
||||||
|
}, 10, 6) == 16
|
||||||
|
)
|
||||||
|
|
||||||
print("test end")
|
print("test end")
|
||||||
|
|
||||||
|
|
|
@ -14,13 +14,13 @@ end
|
||||||
|
|
||||||
assert(a == 15)
|
assert(a == 15)
|
||||||
|
|
||||||
for i,el in pairs(testt) do
|
for i,el in pairs(testt) do
|
||||||
print(i.." = "..el)
|
print(i.." = "..el)
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, el in pairs(testt ) do
|
for _, el in pairs(testt ) do
|
||||||
print(el)
|
print(el)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- comment
|
-- comment
|
||||||
-- comment
|
-- comment
|
||||||
|
@ -31,10 +31,10 @@ assert([[
|
||||||
##]]=="#".."#","comment within [[string]] falsely detected")
|
##]]=="#".."#","comment within [[string]] falsely detected")
|
||||||
|
|
||||||
function a()
|
function a()
|
||||||
return "function"
|
return "function"
|
||||||
end
|
end
|
||||||
|
|
||||||
assert(a()=="function")
|
assert(a() =="function")
|
||||||
assert([[
|
assert([[
|
||||||
fn]]=="f".."n")
|
fn]]=="f".."n")
|
||||||
|
|
||||||
|
@ -43,37 +43,37 @@ do
|
||||||
local a = {...}
|
local a = {...}
|
||||||
for _, a in pairs(a ) do
|
for _, a in pairs(a ) do
|
||||||
print(a)
|
print(a)
|
||||||
end
|
end
|
||||||
end)("a","still a","also a")
|
end)("a","still a","also a")
|
||||||
end
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
local a = 12
|
local a = 12
|
||||||
print(a)
|
print(a)
|
||||||
end
|
end
|
||||||
a()
|
a()
|
||||||
|
|
||||||
function t()
|
function t()
|
||||||
return "hi"
|
return "hi"
|
||||||
end
|
end
|
||||||
assert(t()=="hi")
|
assert(t() =="hi")
|
||||||
|
|
||||||
function t2()
|
function t2()
|
||||||
return "also hi"
|
return "also hi"
|
||||||
end
|
end
|
||||||
assert(t2()=="also hi")
|
assert(t2() =="also hi")
|
||||||
|
|
||||||
if (true) then
|
if (true) then
|
||||||
print("weewoo")
|
print("weewoo")
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = 0, 10 do
|
for i = 0, 10 do
|
||||||
print(i)
|
print(i)
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, el in pairs({"lot's of test",2,"3",1} ) do
|
for _, el in pairs({"lot's of test",2,"3",1} ) do
|
||||||
print(el)
|
print(el)
|
||||||
end
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
local i = 0
|
local i = 0
|
||||||
|
@ -88,8 +88,8 @@ do
|
||||||
end
|
end
|
||||||
|
|
||||||
function callit(fun,t1,t2)
|
function callit(fun,t1,t2)
|
||||||
return fun(t1,t2)
|
return fun(t1,t2)
|
||||||
end
|
end
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
callit(function()
|
callit(function()
|
||||||
|
@ -101,7 +101,14 @@ assert(
|
||||||
callit(function(k,v)
|
callit(function(k,v)
|
||||||
return k.." = "..v
|
return k.." = "..v
|
||||||
end, "this test", "more test")
|
end, "this test", "more test")
|
||||||
== "this test = more test")
|
== "this test = more test"
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(
|
||||||
|
callit(function(a , b)
|
||||||
|
return (a-b)*4
|
||||||
|
end, 10, 6) == 16
|
||||||
|
)
|
||||||
|
|
||||||
print("test end")
|
print("test end")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue