immerrr / lua-mode

Emacs major mode for editing Lua
http://immerrr.github.io/lua-mode
GNU General Public License v3.0
314 stars 74 forks source link

Incorrect indentation. #213

Open amano-kenji opened 7 months ago

amano-kenji commented 7 months ago

neovim lua mode prefers

node_om:connect("object-added", function (node_om, node)
  -- If the node is added, print update.
  print("update")
  node:connect("params-changed", function (node, paramId)
    -- If the node's parameters changed, print update.
    print("update")
  end)
end)

emacs lua mode gives me

node_om:connect("object-added", function (node_om, node)
    -- If the node is added, print update.
    print("update")
    node:connect("params-changed", function (node, paramId)
        -- If the node's parameters changed, print update.
        print("update")
    end)
end)

although lua indent level is 2. It is giving me the indent level of 4.

sogaiu commented 6 months ago

I investigated a bit with a smaller example.

With:

(setq lua-indent-level 2)
(setq lua-indent-nested-block-content-align nil)

and starting with the sample code:

fun("sample", function (a, b)
print("hi")
end)

and point at the beginning of the second line (the one that starts with text print("hi").

The result was:

fun("sample", function (a, b)
    print("hi")
end)

The result was an indentation by 4 spaces here and I think the expectation is that it should be 2 spaces.

I think this reproduces the reported behavior.


I tried tracing execution of lua-indent-line with edebug to see why the result was 4.

Roughly the overall flow appears to be:

I don't understand the details, but perhaps the above helps a bit with investigation (^^;

Also, this issue looked somewhat similar.

FWIW, I used Emacs 29.2 and it appears I'm using d074e413 of lua-mode.

amano-kenji commented 6 months ago

That's because function (a, b) adds two spaces to the indentation on top of fun which adds two spaces.

In emacs lua mode, indentation adds up. Indentation should not add up.