gleam-lang/gleam

Pattern matching on tuples or custom types produces broken JavaScript

Open

#5,680 建立於 2026年5月3日

在 GitHub 查看
 (5 留言) (0 反應) (0 負責人)Rust (21,417 star) (960 fork)batch import
help wantedhigh priority

描述

The following Gleam code

pub fn main() {
  case #(1, 2) {
    #(a, _) -> a
  }
  {2 + 4} * 2
  let a = 42
  Nil
}

produces this Javascript:

export function main() {
  let $ = [1, 2];
  let a = $[0];
  a
  (2 + 4) * 2;
  let a = 42;
  return undefined;
}

Here, 2 things go wrong:

  1. the a binding does not reserve the name in the enclosing scope, causing a parse error.
  2. The expression inside the arm of the pattern is not followed by a semicolon. The line after it is constructed in such a way that this is now parsed as a function call, changing the meaning of this program.

Both of these can be triggered independently.

~ 💜

貢獻者指南