Skip to content

Implement wildcard match pattern#5576

Merged
StachuDotNet merged 1 commit intodarklang:mainfrom
StachuDotNet:wildcard-match-pattern
Apr 1, 2026
Merged

Implement wildcard match pattern#5576
StachuDotNet merged 1 commit intodarklang:mainfrom
StachuDotNet:wildcard-match-pattern

Conversation

@StachuDotNet
Copy link
Copy Markdown
Member

@StachuDotNet StachuDotNet commented Jan 23, 2026

_ in let patterns now properly discards values instead of binding them as a variable, matching standard ML-family semantics. This enables correct scoping, clearer error messages, and lays groundwork for future exhaustiveness checking.


Add LPWildcard case to LetPattern types across the codebase. The wildcard pattern _ now properly matches any value without binding it to a variable, distinguishing it from a regular variable named "_".

Changes:

  • Added LPWildcard to LetPattern in all type definitions (PT, RT, WT, and language tools)
  • Updated parser to recognize _ as LPWildcard instead of LPVariable
  • Updated type converters to handle LPWildcard conversion
  • Updated interpreter to match wildcards without extracting bindings
  • Added binary serialization support for LPWildcard
  • Updated pretty printers and semantic tokens for wildcard display
  • Added comprehensive tests for wildcard patterns in tuples and let bindings
  • Fixed symbol threading in ProgramTypesToRuntimeTypes to preserve symbols
    from previous patterns when processing wildcards

Add LPWildcard case to LetPattern types across the codebase. The wildcard
pattern `_` now properly matches any value without binding it to a variable,
distinguishing it from a regular variable named "_".

Changes:
- Added LPWildcard to LetPattern in all type definitions (ProgramTypes,
  RuntimeTypes, WrittenTypes, and Darklang language tools)
- Updated parser to recognize `_` as LPWildcard instead of LPVariable
- Updated type converters to handle LPWildcard conversion
- Updated interpreter to match wildcards without extracting bindings
- Added binary serialization support for LPWildcard
- Updated pretty printers and semantic tokens for wildcard display
- Added comprehensive tests for wildcard patterns in tuples and let bindings
- Fixed symbol threading in ProgramTypesToRuntimeTypes to preserve symbols
  from previous patterns when processing wildcards

Closes darklang#5460
@StachuDotNet StachuDotNet force-pushed the wildcard-match-pattern branch from dc71a25 to 8560b55 Compare April 1, 2026 16:17
@StachuDotNet StachuDotNet marked this pull request as ready for review April 1, 2026 16:19
@StachuDotNet StachuDotNet merged commit a64e82b into darklang:main Apr 1, 2026
2 of 5 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.

1 participant