gleam-lang/gleam

Pattern matching on tuples or custom types produces broken JavaScript

クローズ

#5,680 opened on 2026/05/03

 (5 件のコメント) (0 件のリアクション) (0 人の担当者)Rust (960 件のフォーク)batch import
help wantedhigh priority

Repository metrics

Stars
 (21,417 個のスター)
PR merge metrics
 (平均マージ 10d 19h) (30d で 69 merged PRs)

説明

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.

~ 💜

コントリビューターガイド