Skip to content

fix: keep newline after unclosed map or struct - #145

Merged
mhanberg merged 1 commit into
elixir-tools:mainfrom
doorgan:doorgan/struct-bug
Oct 15, 2026
Merged

mhanberg merged 1 commit into
elixir-tools:mainfrom
doorgan:doorgan/struct-bug

Conversation

@doorgan

@doorgan doorgan commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

Fixes a bug reported in Expert at expert-lsp/expert#938

When a map or struct literal was missing its closing brace, the parser
consumed the following newline anyway. The first token of the next line
then looked like part of the map's enclosing expression and was dropped,
so an unfinished `a = %{` above `defmodule Bar do` lost the
`defmodule`. In container_cursor_to_quoted, the same thing left a
keyword pair followed by `__cursor__(`, which crashed
parse_call_expression with a MatchError.

A `%` at the end of a line had the same effect through the struct type
parser, which skipped past the newline after reporting it.

A do-block after an alias, as in `Foo do ... end`, was attached as an
extra alias segment and parsed as valid. Elixir rejects it, and the
resulting AST is malformed. It is now reported as a syntax error.
@doorgan
doorgan force-pushed the doorgan/struct-bug branch from 357fb16 to aa17abe Compare October 15, 2026 20:26
@mhanberg
mhanberg merged commit e18d0ef into elixir-tools:main Oct 15, 2026
37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants