From 2d297db687e5a64f69a26371cb9c25dceb44b53e Mon Sep 17 00:00:00 2001 From: Reuh Date: Sat, 2 Sep 2017 20:04:47 +0200 Subject: [PATCH] Fixed package searcher overriding the Lua one --- README.md | 2 +- candran.can | 3 +- candran.lua | 13 +- ideas.txt | 186 +++++++++--------- ....0-1.rockspec => candran-0.6.1-1.rockspec} | 4 +- 5 files changed, 108 insertions(+), 100 deletions(-) rename rockspec/{candran-0.6.0-1.rockspec => candran-0.6.1-1.rockspec} (96%) diff --git a/README.md b/README.md index 14d76e6..086142e 100644 --- a/README.md +++ b/README.md @@ -395,7 +395,7 @@ at the top of your main Lua file. If a Candran is found when you call ```require file will be loaded. * ```candran.searcher(modpath)``` : Candran package searcher function. Use the existing package.path. -* ```candran.setup()``` : Register the Candran package searcher. +* ```candran.setup()``` : Register the Candran package searcher, and return the `candran` table. ##### Available compiler & preprocessor options You can give arbitrary options which will be gived to the preprocessor, but Candran already provide and uses these with their associated default values: diff --git a/candran.can b/candran.can index 4620156..a681a10 100644 --- a/candran.can +++ b/candran.can @@ -230,7 +230,7 @@ end --- Candran package searcher function. Use the existing package.path. function candran.searcher(modpath) - local filepath = util.search(modpath) + local filepath = util.search(modpath, {"can"}) if not filepath then return "\n\tno candran file in package.path" end @@ -244,6 +244,7 @@ function candran.setup() else table.insert(package.searchers, 2, candran.searcher) end + return candran end return candran diff --git a/candran.lua b/candran.lua index feedec8..ae693a4 100644 --- a/candran.lua +++ b/candran.lua @@ -2855,10 +2855,10 @@ end + P("--") * (P(1) - P("\ ["ShortStr"] = P("\"") * Cs((V("EscSeq") + (P(1) - S("\"\ "))) ^ 0) * expect(P("\""), "Quote") + P("'") * Cs((V("EscSeq") + (P(1) - S("'\ "))) ^ 0) * expect(P("'"), "Quote"), -["EscSeq"] = P("\\") / "" * (P("a") / "\7" + P("b") / "\8" + P("f") / "\12" + P("n") / "\ -" + P("r") / "\13" + P("t") / "\9" + P("v") / "\11" + P("\ +["EscSeq"] = P("\\") / "" * (P("a") / "" + P("b") / "" + P("f") / " " + P("n") / "\ +" + P("r") / "\r" + P("t") / " " + P("v") / " " + P("\ ") / "\ -" + P("\13") / "\ +" + P("\r") / "\ " + P("\\") / "\\" + P("\"") / "\"" + P("'") / "'" + P("z") * space ^ 0 / "" + digit * digit ^ - 2 / tonumber / string["char"] + P("x") * expect(C(xdigit * xdigit), "HexEsc") * Cc(16) / tonumber / string["char"] + P("u") * expect("{", "OBraceUEsc") * expect(C(xdigit ^ 1), "DigitUEsc") * Cc(16) * expect("}", "CBraceUEsc") / tonumber / (utf8 and utf8["char"] or string["char"]) + throw("EscSeq")), ["LongStr"] = V("Open") * C((P(1) - V("CloseEq")) ^ 0) * expect(V("Close"), "CloseLStr") / function(s, eqs) return s @@ -2975,7 +2975,7 @@ env["write"](f:read("*a")) f:close() end env["write"] = function(...) -env["output"] = env["output"] .. (table["concat"]({ ... }, "\9") .. "\ +env["output"] = env["output"] .. (table["concat"]({ ... }, " ") .. "\ ") end env["placeholder"] = function(name) @@ -3082,10 +3082,10 @@ end end) end candran["searcher"] = function(modpath) -local filepath = util["search"](modpath) +local filepath = util["search"](modpath, { "can" }) if not filepath then return "\ -\9no candran file in package.path" + no candran file in package.path" end return candran["loadfile"](filepath) end @@ -3095,5 +3095,6 @@ table["insert"](package["loaders"], 2, candran["searcher"]) else table["insert"](package["searchers"], 2, candran["searcher"]) end +return candran end return candran diff --git a/ideas.txt b/ideas.txt index eff19c6..15d2be7 100644 --- a/ideas.txt +++ b/ideas.txt @@ -1,90 +1,96 @@ -List of potential ideas. - -To be implemented, theese need to: -* aesthetically fit into the current Candran/Lua syntax. We can add a few weird glyphs here and there, but our goal *is not* to become a punctuation inventory like MoonScript. -* vanilla Lua code *must* produce functionaly identical code after going through the Candran compiler, so make sure the additions: - * are invalid vanilla Lua syntax. - * are not ambigous with any vanilla Lua syntax. -* be significantly useful compared to existing Candran/Lua code. -* be useful without having to rewrite APIs specifically for Candran. Candran intends to make Lua easier, not supersede it. - -Example currently rejected ideas: -* Python-style function decorators (implemented in Candran 0.1.0): - Useless 95% of the time because most Lua APIs applying something to a function are used like applySomething(someArg,func) instead of func=applySomething(someArg)(func). - This could be adapted, but this will mean unecessary named functions in the environment and it will only works when the decorator returns the functions. - In this state, these didn't provide anothing useful over short anonymous functions. -* Whitespace significance. - Doesn't fit with Lua's verbose keywords. - -Of course, if you really thinks these would be useful or you found a clever way of making theses work, feel free to open an issue or pull request and discuss. - -Most of Candran's additions were inspired by MoonScript, CoffeeScript, and Lilia (https://love2d.org/forums/viewtopic.php?f=3&t=82650&sid=b6d9a8dec64afcc1c67806cb5ba65458). - -Please note that the following ideas are just random though and won't be necessarly implemented, and some won't even work together. - -Feel free to open issues about ideas you find useful or want to improve. Otherwise, I will only implements them when I really need them or am bored. - -Actually, open issues for everything. I know of a couple persons using Candran but have no idea what they like and want with it. - -* class keyword -class Thing(parents...) - foo = "bar" - - new = :() - stuff() - end -end -local a = new Thing() --> -(TODO: define how classes work. May even use ClassCommons) - -* try / except|catch / finally / else / other keywords -try - error("hey") -catch err - print(err) -finally - clean() -end - -* Safe navigation operator -local name = articles?[0].author?.name (?[] and ?. index opeators) -or -local zip = lottery.drawWinner?().address?.zipcode (expr? existence test suffix) - -See http://coffeescript.org/#existential-operator - -* static type checking -local a = externalFunc() -- unknown -if a == "hey" then - -- a = string - a:sub(5,3) -- ok - a:exit() -- error! -else - -- a = unknown - a:exit() -- ok -end - -Will need to define stuff for a lot of Lua libraries (see the work already done by TypedLua). - -While we're talking about static analysis, what about forking luacheck into candrancheck? Or at least make the line mapping work. - -* array slicing -local b = a[3:5:1] - -* Destructuring assignment -local pos = { x = 5, y = 12 } - -local {x, y} = pos -- x, y = pos.x, pos.y -local {x = x, y = y} = pos -local {:x, :y} = pos -- shorthand for the above line -local [x, y] = pos -- x, y = pos[0], pos[1] -local x, y $= pos - -And in implicit assignments: -for i, {x, y} in ipairs(positions) do - -* Other potential inspiration -https://www.ruby-lang.org/fr/ - -Well done, you're at the end of the file! +List of potential ideas. + +To be implemented, theese need to: +* aesthetically fit into the current Candran/Lua syntax. We can add a few weird glyphs here and there, but our goal *is not* to become a punctuation inventory like MoonScript. +* vanilla Lua code *must* produce functionaly identical code after going through the Candran compiler, so make sure the additions: + * are invalid vanilla Lua syntax. + * are not ambigous with any vanilla Lua syntax. +* be significantly useful compared to existing Candran/Lua code. +* be useful without having to rewrite APIs specifically for Candran. Candran intends to make Lua easier, not supersede it. + +Example currently rejected ideas: +* Python-style function decorators (implemented in Candran 0.1.0): + Useless 95% of the time because most Lua APIs applying something to a function are used like applySomething(someArg,func) instead of func=applySomething(someArg)(func). + This could be adapted, but this will mean unecessary named functions in the environment and it will only works when the decorator returns the functions. + In this state, these didn't provide anothing useful over short anonymous functions. +* Whitespace significance. + Doesn't fit with Lua's verbose keywords. + +Of course, if you really thinks these would be useful or you found a clever way of making theses work, feel free to open an issue or pull request and discuss. + +Most of Candran's additions were inspired by MoonScript, CoffeeScript, and Lilia (https://love2d.org/forums/viewtopic.php?f=3&t=82650&sid=b6d9a8dec64afcc1c67806cb5ba65458). + +Please note that the following ideas are just random though and won't be necessarly implemented, and some won't even work together. + +Feel free to open issues about ideas you find useful or want to improve. Otherwise, I will only implements them when I really need them or am bored. + +Actually, open issues for everything. I know of a couple persons using Candran but have no idea what they like and want with it. + +* class keyword +class Thing(parents...) + foo = "bar" + + new = :() + stuff() + end +end +local a = new Thing() +-> +(TODO: define how classes work. May even use ClassCommons) + +* try / except|catch / finally / else / other keywords +try + error("hey") +catch err + print(err) +finally + clean() +end + +* Safe navigation operator +local name = articles?[0].author?.name (?[] and ?. index opeators) +or +local zip = lottery.drawWinner?().address?.zipcode (expr? existence test suffix) + +See http://coffeescript.org/#existential-operator + +* static type checking +local a = externalFunc() -- unknown +if a == "hey" then + -- a = string + a:sub(5,3) -- ok + a:exit() -- error! +else + -- a = unknown + a:exit() -- ok +end + +Will need to define stuff for a lot of Lua libraries (see the work already done by TypedLua). + +While we're talking about static analysis, what about forking luacheck into candrancheck? Or at least make the line mapping work. + +* array slicing +local b = a[3:5:1] + +* Destructuring assignment +local pos = { x = 5, y = 12 } + +local {x, y} = pos -- x, y = pos.x, pos.y +local {a, b, x = x, y = y} = pos -- x, y = pos.x, pos.y, a = pos[1], b = pos[2] +local {a, b, :x, :y} = pos -- shorthand for the above line. Or .x, .y +local {:x.u} = pos OR {:x:u} OR {.x.u} -- u = pos.x.u +local [x, y] = pos -- x, y = pos[0], pos[1] +local x, y $= pos + +And in implicit assignments: +for i, {x, y} in ipairs(positions) do + +* String interpolation +Delimited by ``: +`Hi, my name is ${@name}` -- -> "blaba" .. tostring(@name) +Also allows multi-line with this maybe? + +* Other potential inspiration +https://www.ruby-lang.org/fr/ + +Well done, you're at the end of the file! diff --git a/rockspec/candran-0.6.0-1.rockspec b/rockspec/candran-0.6.1-1.rockspec similarity index 96% rename from rockspec/candran-0.6.0-1.rockspec rename to rockspec/candran-0.6.1-1.rockspec index fdee24d..e510277 100644 --- a/rockspec/candran-0.6.0-1.rockspec +++ b/rockspec/candran-0.6.1-1.rockspec @@ -1,6 +1,6 @@ package = "candran" -version = "0.6.0-1" +version = "0.6.1-1" description = { summary = "A simple Lua dialect and preprocessor.", @@ -17,7 +17,7 @@ description = { source = { url = "git://github.com/Reuh/candran", - tag = "v0.6.0" + tag = "v0.6.1" } dependencies = {