【问题标题】:Lua lunadry errorLua lunadry 错误
【发布时间】:2015-06-02 11:38:23
【问题描述】:

我一直在使用 lunadry 为我重新格式化我的代码,但我遇到了错误,即,当我尝试它时会发生这种情况:

lua: ./lunadry.lua:322: assertion failed!
stack traceback:
    [C]: in function 'assert'
    ./lunadry.lua:322: in main chunk
    [C]: in ?

现在我已经检查了我拥有的一大段代码,并将这个错误的根源追溯到这个特定的函数......

function e.insertvalues(e,...)g(1,e,'table')local n,t
if y('#',...)==1 then
n,t=#e+1,...else
n,t=...end
if#t>0 then
for n=#e,n,-1 do
e[n+#t]=e[n]end
local i=1-n
for n=n,n+#t-1 do
e[n]=t[n+i]end
end
return e
end

(是的,这样的格式应该看起来很难看)。

更具体地说,去掉这段代码可以让它再次工作:

if y('#',...)==1 then
n,t=#e+1,...else
n,t=...end

是 ...else 和 ...end 位导致它搞砸了。

我一直试图让它重新格式化该代码,使其看起来很漂亮,但它会导致错误。据我所知,这可能只是在作者的代码中复制一大堆错误,但我希望不会。这是发挥作用的文件的来源:click me

有人可以看看这个并告诉我需要改变什么来解决这个非常烦人的错误吗?谢谢!

【问题讨论】:

  • 能否请您说明您正在使用的 Lua 和 LPEG 版本,无法复制错误。
  • 是的,能够在 Lua 5.1.5 + Lpeg 0.10.2-2 上复制它。似乎是 Lunadry 中的一个错误。你应该在他们的bug tracker报告这个案例。
  • 好的,我举报了。谢谢。

标签: lua pretty-print lpeg


【解决方案1】:

这是由于将... 匹配为关键字造成的。例如lunadry.lua的实例:

K "..."

应该是

C "..."

使用这个补丁:

diff --git a/lunadry.lua b/lunadry.lua
index e056140..19d714b 100755
--- a/lunadry.lua
+++ b/lunadry.lua
@@ -201,7 +201,7 @@ local lua = lpeg.locale {
           K "true" +
           V "Number" +
           V "String" +
-          K "..." +
+          C "..." +
           V "function" +
           V "tableconstructor" +
           V "functioncall" +
@@ -251,8 +251,8 @@ local lua = lpeg.locale {

   funcbody = C "(" * V "whitespace" * (V "parlist" * V "whitespace")^-1 * C ")" * INDENT_INCREASE(V "block" * V "whitespace") * INDENT * K "end";

-  parlist = V "namelist" * (V "whitespace" * C "," * SPACE * V "whitespace" * K "...")^-1 +
-            K "...";
+  parlist = V "namelist" * (V "whitespace" * C "," * SPACE * V "whitespace" * C "...")^-1 +
+            C "...";

   tableconstructor = FLATTEN(C "{" * (INDENT_INCREASE(V "filler" * V "fieldlist" * V "filler") * INDENT + V "filler") * C "}");

我将在今天晚些时候提交修复。

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 2017-08-08
    • 2014-10-14
    • 2017-01-18
    • 2010-12-12
    • 2016-10-21
    • 2016-02-11
    • 2012-05-08
    • 1970-01-01
    相关资源
    最近更新 更多