gleam-lang/gleam

Pattern matching on tuples or custom types produces broken JavaScript

已關閉

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

 (5 則留言) (0 個反應) (0 位負責人)Rust (960 個分叉)batch import
help wantedhigh priority

倉庫指標

星標
 (21,417 顆星)
PR 合併指標
 (平均合併 10天 19小時) (30 天內合併 69 個 PR)

描述

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.

~ 💜

貢獻者指南