Skip to content

Releases: scala/scala3

3.7.1-RC1

07 May 10:41
Compare
Choose a tag to compare
3.7.1-RC1 Pre-release
Pre-release

Highlights of the release

  • Support for JDK 25 #23004
  • Warn if interpolator uses toString #20578
  • Warn if match in block is not used for PartialFunction #23002

Other changes and fixes

Annotations

  • Approximate annotated types in wildApprox #22893
  • Keep unused annot on params #23037

Erasure

  • Disallow context function types as value-class parameters #23015

Experimental: Capture Checking

  • Two fixes to handling of abstract types with cap bounds #22838
  • Drop idempotent type maps #22910
  • Fix setup of class constructors #22980

Named Tuples

  • Call dealias after stripping type variables for tupleElementTypesUpTo #23005
  • Avoid loosing denotations of named types during integrate #22839

Experimental: Unroll

  • Fix #22833: allow unroll annotation in methods of final class #22926

Experimental: Referencable Package Objects

  • Add experimental.packageObjectValues language setting #23001

Exports

  • Respect export alias for default arg forwarder #21109

Extension Methods

  • Extension check checks for no parens not empty parens #22825

GADTs

  • Fix: Prevent GADT reasoning in pattern alternatives #22853

Linting

  • Dealias when looking into imports #22889
  • Process Export for unused check #22984
  • Drill into QuotePattern bindings symbol info #22987
  • No warn implicit param of overriding method #22901
  • No warn for evidence params of marker traits such as NotGiven #22985

Initialization

  • Check for tasty error in template trees. #22867

Metaprogramming: Compile-time

  • Fix issue with certain synthetics missing in compiletime.typechecks #22978

Pattern Matching

  • Fix existing GADT constraints with introduced pattern-bound symbols #22928

Pickling

  • Fix fromProduct synthesized code for parameter-dependent case classes #22961

Presentation Compiler

  • Completions for requests just before string #22894
  • Fix: go to def should lead to all: apply, object and class #22771
  • Ignore ending $ when looking at end marker names #22798
  • Feature: Skip auto importing symbols we know are wrong in current context #22813
  • Show the Autofill completion case as what would be auto-filled #22819
  • Bugfix: Fix issues with annotations not detected #22878
  • Improvement: Rework IndexedContext to reuse the previously calculated scopes #22898
  • Pc: Properly adjust indentation when inlining blocks #22915
  • Improvement: Support using directives in worksheets #22957
  • Fix: show hover for synthetics if explicitly used #22973
  • Pc: fix: inline value when def indentation equals 2 #22990

Rewrites

  • Fix insertion of using in applications with trailing lambda syntax #22937
  • Test chars safely when highlighting #22918

Reporting

  • Print infix operations in infix form #22854

Scaladoc

  • Chore: add support for 'abstract override' modifier #22802
  • Scaladoc: fix generation of unique header ids #22779

Typer

  • Disallow context bounds in type lambdas #22659
  • Refuse trailing type parameters in extractors #22699
  • Fix #22724: Revert the PolyType case in #21744 #22820
  • Fix isGenericArrayElement for higher-kinded types #22938
  • Tighten condition to preserve denotation in IntegrateMap #23060

Transform

  • Mix in the productPrefix hash statically in case class hashCode #22865

Value Classes

  • Fix #21918: Disallow value classes extending type aliases of AnyVal #23021

Contributors

Thank you to all the contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.7.0..3.7.1-RC1 these are:

   135  Martin Odersky
    27  Som Snytt
    13  Matt Bovel
    10  Wojciech Mazur
     9  Hamza Remmal
     5  Quentin Bernet
     5  Tomasz Godzik
     4  aherlihy
     3  HarrisL2
     3  Jan Chyb
     3  Natsu Kagami
     3  Ondrej Lhotak
     3  Sébastien Doeraene
     2  Piotr Chabelski
     2  Yichen Xu
     2  Yoonjae Jeon
     2  kasiaMarek
     1  Aleksey Troitskiy
     1  Daisy Li
     1  Dale Wijnand
     1  Jan-Pieter van den Heuvel
     1  Jędrzej Rochala
     1  Kacper Korban
     1  Katarzyna Marek
     1  Lukas Rytz
     1  Mikołaj Fornal
     1  Nikita Glushchenko
     1  Oliver Bračevac
     1  Ondřej Lhoták
     1  dependabot[bot]
     1  noti0na1
     1  philippus

3.7.0

07 May 10:41
Compare
Choose a tag to compare

See release blogpost: https://www.scala-lang.org/news/3.7.0/

Highlights of the release

  • Add @scala.annotation.internal.preview annotation and -preview flag. #22317
  • Make SIP-52 @publicInBinary a stable feature in 3.7 #22591
  • Make SIP-58 - Named Tuples a stable feature in 3.7 #22753
  • Make SIP-62 - Better Fors a preview feature in 3.7 #22776
  • Implement SIP-61 @unroll annotation as experimental #21693
  • Upgrade Scala 2 Standard Library to 2.13.16 #22386
  • Upgrade Scala.js to 1.19.0 #23026
  • Upgrade Scala CLI to 1.7.1 #22843
  • Expression Compiler is now part of Scala 3 compiler #22597
  • Quotes API: Added apply methods to import selectors #22457
  • Quotes API: Implement experimental summonIgnoring method #22417
  • Quotes API: Add class parameters, flags, and privateWithin and annotations to experimental newClass methods #21880
  • Experimental: Capture Calculus - Inferring tracked modifier #21628
  • Presentation Compiler: Show inferred type on holes in hover #21423
  • JVM Backend: Fix #15736 blocking Scala 3 on Android #22632
  • REPL: add flag to quit after evaluating init script #22636
  • REPL: implement :jar (deprecate :require) #22343
  • Linting: Improvements to -Wunused and -Wconf #20894
  • Implicit parameters warn at call site without using keyword #22441
  • Support for dependent case classes #21698
  • Deprecate Yno-kind-polymorphism #22814

Other changes and fixes

Annotations

  • Lift arguments of explicitly constructed annotations #22553
  • Fix copy of annotation on @main methods #22582
  • @publicInBinary has now effect on secondary constructors #22630
  • Fix mapping of annotations #22407

Backend: Scala.js

  • Emit js.NewArray IR nodes when possible. #22446
  • Fix #22794: Emit the definition of Arrays.newArray even though it's a primitive #22797

Classpath

  • Fix empty ClassPath attribute in one or more classpath jars causes crash #22462

Documentation

  • Improve the usage of inclusive language #22360

Erasure

  • Handle type aliases in contextFunctionResultTypeAfter #21517
  • Align erasure of Array[Nothing] and Array[Null] with Scala 2 #22517

Desugering

  • Under betterFors don't drop the trailing map if it would result in a different type (also drop _ => ()) #22619

Experimental: Capture Checking

  • Canonicalize capture variable subtype comparisons #22299
  • Permit Capture Refs for Uninitialized Type and Term Params in BiTypeMap #22451
  • Fix maximal capability handling and expand aliases #22341

Experimental: Modularity

  • Widen skolem types when adding parent refinements #22488

Experimental: Global Initialization Checker

  • Refactor the abstract domain of global init checker to compile http4s #22179
  • Fix global init checking crash when using a value defined in by-name closure #22625

Experimentals

  • Expand value references to packages to their underlying package objects #22011

Implicits

  • Restrict implicit args to using #22458

Linting

  • Suppress spurious Suppression #22383
  • CheckUnused checks span.exists before testing its parts #22504
  • Don't warn retainedBody #22510
  • Handle Typeable #22663
  • Nowarn public implicit val class params #22664
  • Exclude synthetic this.m, Any.m from import lookup #22695
  • Warn unused member of anonymous class #22729
  • Ignore params to default arg getters #22749
  • Lazy val def member is pattern var #22750
  • Restore resolving prefixes of implicit Ident #22751
  • No warning for parameter of overriding method #22757
  • Dealias before checking for member in lint #22708
  • Warn on bad extensions of aliases #22362
  • Warn universal extensions on opaque types #22502
  • Discourage default arg for extension receiver #22492
  • Rename on import is never wildcard #22712
  • Collect nowarn symbols instead of skipping them #22766
  • Revert unconditional lint of Inlined expansion #22815

Match Types

  • Handle NoType in TypeComparer.disjointnessBoundary #21520

Named Tuples

  • Special case NamedTuple.From for arguments derived from Tuple #22449
  • Generate mirrors for named tuples #22469
  • Two fixes to NamedTuple pattern matching #22953

Opaque Types

  • Fix stack overflow errors when generating opaque type proxies #22479
  • Fix inline proxy generation for opaque types referencing other opaque types #22381
  • Fix opaque types leaking rhs when inlined and found in type params (and a related stale symbol issue) #22655

Overloading

  • Make overload pruning based on result types less aggressive #21744
  • Fail compilation if multiple conflicting top-level private defs/vals are in the same package #22759

Parser

  • Fix annotations being not expected in the middle of an array type by java parser #22391
  • No outdent at eof #22435
  • Allow observing an indent after conditional #22611
  • Correctly detect colon lambda eol indent for optional brace of argument #22477

Pattern Matching

  • Avoid crash in uninhab check in Space #22601
  • Account for named tuples in space subtraction #22658
  • Check exhaustivity of any case class #22604

Presentation Compiler

  • Add enum type param support in sourceSymbol #18603
  • Map name position to desugared version of named context bound #22374
  • Hover and go to definition for named tuples #22202
  • Completions: do not complete package #20532
  • Print parens for single method argument only if a direct tuple type #21510
  • Improvement: use heuristic to figure out nameSpan if pointDelta too big #22484
  • Fix inferredTypeEdits for symbols #22485
  • Fix: Only fallback to the definition of a synthetic valdef if it is zero extent #22551
  • Better LSP completions inside of backticks #22555
  • Don't search for members in pc info when irrelevant #22674
  • Backport from Metals #22426
  • Backport from Metals #22491
  • Backport from Metals #22665

Runner

Read more

3.3.6-RC3

02 May 12:08
Compare
Choose a tag to compare
3.3.6-RC3 Pre-release
Pre-release

Backported fixes

  • classfile reader: handle JDK 9+ constant types in constant pool #19533
  • Update asm to 9.8.0 #23004

Contributors

Thank you to all theq contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.3.6-RC2..3.3.6-RC3 these are:

     2  Seth Tisue
     1  Tomasz Godzik
     1  philippus

3.3.6-RC2

30 Apr 12:17
Compare
Choose a tag to compare
3.3.6-RC2 Pre-release
Pre-release

Reverted changes

Contributors

Thank you to all theq contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.3.6-RC1..3.3.6-RC2 these are:

     3  Tomasz Godzik

3.7.0-RC4

25 Apr 11:06
Compare
Choose a tag to compare
3.7.0-RC4 Pre-release
Pre-release

Backported changes

  • Backport "Upgrade to Scala.js 1.19.0." to 3.7 #23035

Contributors

Thank you to all the contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.7.0-RC3..3.7.0-RC4 these are:

     2  Sébastien Doeraene
     1  Tomasz Godzik

3.7.0-RC3

16 Apr 14:59
Compare
Choose a tag to compare
3.7.0-RC3 Pre-release
Pre-release

Backported changes

  • Backport "Two fixes to NamedTuple pattern matching" to 3.7.0 #22995
  • Backport "changes to scala.caps in preparation to make Capability stable" to 3.7.0 #22967

Contributors

Thank you to all the contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.7.0-RC2..3.7.0-RC3 these are:

     4  Martin Odersky
     2  Wojciech Mazur
     1  Natsu Kagami

3.7.0-RC2

14 Apr 09:41
Compare
Choose a tag to compare
3.7.0-RC2 Pre-release
Pre-release

Backported changes

  • Backport "Check trailing blank line at EOF for OUTDENT" to 3.7.0 #22942
  • Backport "Fail compilation if multiple conflicting top-level private defs/vals are in the same package" to 3.7 #22932
  • Backport "Deprecate Yno-kind-polymorphism" to 3.7 #22931
  • Backport "Revert unconditional lint of Inlined expansion" to 3.7 #22930
  • Backport "Bump Scala CLI to v1.7.1 (was v1.7.0)" to 3.7 #22929
  • Backport "Fix #22794: Emit the definition of Arrays.newArray even though it's a primitive." to 3.7.0 #22801

Reverted changes

  • Revert "Make overload pruning based on result types less aggressive" in 3.7.0 #22940

Contributors

Thank you to all the contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.7.0-RC1..3.7.0-RC2 these are:

     4  Som Snytt
     4  Wojciech Mazur
     1  Jan Chyb
     1  Piotr Chabelski
     1  Sébastien Doeraene
     1  Yichen Xu

3.3.6-RC1

31 Mar 13:06
Compare
Choose a tag to compare
3.3.6-RC1 Pre-release
Pre-release

Highlights of the release

  • Partial Fix #21242: Add REPL init script setting #22206
  • Update asm to patched 9.7.1 #22250
  • REPL: Add back :silent command #22248
  • Do not lift annotation arguments #22035 and #22046
  • Scala 2 forwardport: -Yprofile-trace #19897

Other changes and fixes

Annotations

  • Make sure symbols in annotation trees are fresh before pickling #22002
  • Fix Java parsing of annotations on qualified types #21867
  • Rename InlineCopier to ConservativeTreeCopier, use it in TypeMaps #21941
  • Consider all arguments in Annotations.refersToParamOf #22001

Backend

  • Flag class file collision as error #19332
  • Backend computes line number from source of position #21763

CI

  • In CI, use new standard scala/cla-checker action #22203
  • Cancel stale CI executions when CI is re-triggered in the same branch/PR #21974
  • Drop support for old experimental in community-build #21729

Coverage

  • Fix coverage serialization when encountering macro suspension #22303

Dependencies

  • Sbt 1.10.5 (was 1.9.9) #20157
  • Scala 2.13.16 (was .15) #22386

Desugaring

  • Fix #22051: only trust the type application part for case class unapplies #22099

Documentation

  • Fix: typo in documentation for Tuple.zip #22313
  • Copyright 2025 #22326
  • Documentation only: update Example code linked to obsolete content in macros-spec.md #22256
  • Doc fix, removed repeated use of the word with #21915
  • Fix typos #21913

Enums

  • Add type parameters derived from enum to default param getters of enum cases #22157

Extension Methods

Infrastructure

  • Improve, document and group versioning code in Build.scala #21837
  • Fix: drop jackson-module-scala from CB #22353
  • Fix inductive-implicits benchmark #22007
  • Remove tests/pos-with-compiler-cc from VSCode ignored files #22198
  • Bump webrick from 1.8.2 to 1.9.1 in /docs/_spec #22066
  • Fix Windows OS detection in TraceNameManglingTest #21937
  • Don't warn for deprecated Thread.getId() calls in ChromeTrace #21831
  • Improvement: Remove workaround for Bloop and update docs #21842
  • Ensure ChromeTraceTest event timestamps are emitted in correct invervals #21911
  • Remove tests/pos-with-compiler-cc #21956
  • Shade scalajs.ir under dotty.tools #21765

Implicits

  • Rollback constraints in compareAppliedTypeParamRef #22339
  • Apply implicit conversion from derived Conversion instance defined as implicit rather than given #21785

Imports

  • Allow imports nested in packagings to shadow #21539

Inline

  • Fix inline reduction for CaseDef guards with asInstanceOf #22305
  • Avoid using the current denotation in NamedType.disambiguate #21414

Linting

  • Append instead of prepending import selectors for the current scope when collecting them in CheckUnused #22314
  • Allow discarding "Discarded non-Unit" warnings with : Unit #21927
  • Disallow open modifier on objects #21922
  • Only count associated files of direct members of package objects in dropStale #22190

Metaprogramming

  • Rethrow SuspendExceptions caught in CodeGen phase #22009
  • Extend compiletime.testing.typechecks with certain transform phases #21185

Match Types

  • Fix #21841: Check more that an unapplySeq on a NonEmptyTuple is valid. #22366
  • Type avoidance in MT bound inference #22142

Nullability

  • Fix #21619: Refactor NotNullInfo to record every reference which is retracted once. #21624

Parser

  • Fix: don't consider into as a soft-modifier #21924
  • Fix: Allow as as an infix type in non context bound types #21849
  • Undo patch of double-block apply #21982

Pattern Matching

  • (Re-)Drop inaccessible subclasses from refineUsingParent #21930
  • Fix #21914: Don't project nested wildcard patterns to nullable #21934
  • Fix use of class terms in match analysis #21848
  • Fix provablyDisjoint handling enum constants with mixins #21876
  • Do not consider uninhabited constructors when performing exhaustive match checking #21750

Pickling

  • Avoid orphan param from default arg #21824
  • Make sure definition tree has the defined symbol #21851

Presentation Compiler

  • Use new infer expected type for singleton complations #21421
  • Fix presentation compiler testcases #22253
  • Fix match error in keyword completions #22138
  • Add test cases project for presentation compiler #22101
  • Improvement: Update mtags to 1.4.1 and backport remaining changes #21859
  • Backport changes for the presentation compiler from Metals #21756

Quotes

  • Fix tupleTypeFromSeq for XXL tuples #21782
  • Do not bring forward symbols created in transform and backend phases #21865
  • Fix #20471: owners of top-level symbols in cached quoted code being incorrect #21945
  • Fix for macro annotation that resolves macro-based implicit crashing the compiler #20353
  • Allow macro annotations to recover from suspension #21969

REPL

  • REPL: JLine: follow recommendation to use JNI, not JNA; also JLine 3.27.1 (was 3.27.0) #22205
  • Fix #9879: allow top-level opaque type definitions in REPL #21753

Reflection

  • Do not return java outline dummy constructor in primaryConstructor #22104

Reporting

  • Normalise the types for Type Mismatch Error (E007) #22337
  • Do not warn about expected missing positions in quotes.reflect.Symbol #21677
  • Add missing error messages to asserts in QuotesImpl #21852
  • Don't point to the compiler backlog when a compiler plugin phase crashes #21887
  • Nowarn extension matching nonpublic member #21825
  • Fix: better error messages when an enum derives from AnyVal #22236

Scaladoc

  • [ISSUE-#19208] If scaladocs on file protocol don't do SPA routing. #22013
  • Fix scaladoc graph highlight background color in dark mode #21814

SemanticDB

  • Extract semanticDB for lifted definitions #21856

Specification

  • Align the spec to allow the marker #22323
  • Fix #202...
Read more

3.7.0-RC1

13 Mar 16:23
Compare
Choose a tag to compare
3.7.0-RC1 Pre-release
Pre-release

Highlights of the release

  • Add @scala.annotation.internal.preview annotation and -preview flag. #22317
  • Make SIP-52 @publicInBinary a stable feature in 3.7 #22591
  • Make SIP-58 - Named Tuples a stable feature in 3.7 #22753
  • Make SIP-62 - Better Fors a preview feature in 3.7 #22776
  • Implement SIP-61 @unroll annotation as experimental #21693
  • Implement SIP-68 Reference-able Package Objects as experimental #22011
  • Upgrade Scala 2 Standard Library to 2.13.16 #22386
  • Upgrade Scala.js to 1.18.1. #22397
  • Upgrade Scala CLI to 1.7.0 #22735
  • Expression Compiler is now part of Scala 3 compiler #22597
  • Quotes API: Added apply methods to import selectors #22457
  • Quotes API: Implement experimental summonIgnoring method #22417
  • Quotes API: Add class parameters, flags, and privateWithin and annotations to experimental newClass methods #21880
  • Experimental: Capture Calculus - Inferring tracked modifier #21628
  • Presentation Compiler: Show inferred type on holes in hover #21423
  • JVM Backend: Fix #15736 blocking Scala 3 on Android #22632
  • REPL: add flag to quit after evaluating init script #22636
  • REPL: implement :jar (deprecate :require) #22343
  • Linting: Improvements to -Wunused and -Wconf #20894
  • Implicit parameters warn at call site without using keyword #22441
  • Minimal support for dependent case classes #21698

Other changes and fixes

Annotations

  • Lift arguments of explicitly constructed annotations #22553
  • Fix copy of annotation on @main methods #22582
  • @publicInBinary has now effect on secondary constructors #22630
  • Fix mapping of annotations #22407

Backend: Scala.js

  • Emit js.NewArray IR nodes when possible. #22446

Classpath

  • Fix empty ClassPath attribute in one or more classpath jars causes crash #22462

Documentation

  • Improve the usage of inclusive language #22360

Erasure

  • Handle type aliases in contextFunctionResultTypeAfter #21517
  • Align erasure of Array[Nothing] and Array[Null] with Scala 2 #22517

Desugering

  • Under betterFors don't drop the trailing map if it would result in a different type (also drop _ => ()) #22619

Experimental: Capture Checking

  • Canonicalize capture variable subtype comparisons #22299
  • Permit Capture Refs for Uninitialized Type and Term Params in BiTypeMap #22451
  • Fix maximal capability handling and expand aliases #22341

Experimental: Modularity

  • Widen skolem types when adding parent refinements #22488

Experimental: Global Initialization Checker

  • Refactor the abstract domain of global init checker to compile http4s #22179
  • Fix global init checking crash when using a value defined in by-name closure #22625

Experimentals

  • Expand value references to packages to their underlying package objects #22011

Implicits

  • Restrict implicit args to using #22458

Linting

  • Suppress spurious Suppression #22383
  • CheckUnused checks span.exists before testing its parts #22504
  • Don't warn retainedBody #22510
  • Handle Typeable #22663
  • Nowarn public implicit val class params #22664
  • Exclude synthetic this.m, Any.m from import lookup #22695
  • Warn unused member of anonymous class #22729
  • Ignore params to default arg getters #22749
  • Lazy val def member is pattern var #22750
  • Restore resolving prefixes of implicit Ident #22751
  • No warning for parameter of overriding method #22757
  • Dealias before checking for member in lint #22708
  • Warn on bad extensions of aliases #22362
  • Warn universal extensions on opaque types #22502
  • Discourage default arg for extension receiver #22492
  • Rename on import is never wildcard #22712
  • Collect nowarn symbols instead of skipping them #22766

Match Types

  • Handle NoType in TypeComparer.disjointnessBoundary #21520

Named Tuples

  • Special case NamedTuple.From for arguments derived from Tuple #22449
  • Generate mirrors for named tuples #22469

Opaque Types

  • Fix stack overflow errors when generating opaque type proxies #22479
  • Fix inline proxy generation for opaque types referencing other opaque types #22381
  • Fix opaque types leaking rhs when inlined and found in type params (and a related stale symbol issue) #22655

Overloading

  • Make overload pruning based on result types less aggressive #21744

Parser

  • Fix annotations being not expected in the middle of an array type by java parser #22391
  • No outdent at eof #22435
  • Allow observing an indent after conditional #22611
  • Correctly detect colon lambda eol indent for optional brace of argument #22477

Pattern Matching

  • Avoid crash in uninhab check in Space #22601
  • Account for named tuples in space subtraction #22658
  • Check exhaustivity of any case class #22604

Presentation Compiler

  • Add enum type param support in sourceSymbol #18603
  • Map name position to desugared version of named context bound #22374
  • Hover and go to definition for named tuples #22202
  • Completions: do not complete package #20532
  • Print parens for single method argument only if a direct tuple type #21510
  • Improvement: use heuristic to figure out nameSpan if pointDelta too big #22484
  • Fix inferredTypeEdits for symbols #22485
  • Fix: Only fallback to the definition of a synthetic valdef if it is zero extent #22551
  • Better LSP completions inside of backticks #22555
  • Don't search for members in pc info when irrelevant #22674
  • Backport from Metals #22426
  • Backport from Metals #22491
  • Backport from Metals #22665

Runner

  • Upgrade Scala CLI to 1.7.0 highlights
    • Switch to scalameta/scalafmt images of scalafmt 3.9.1+ #3502
    • Support the --test command line option for run subcommand #3519
    • Support the --test command line option for package subcommand #3519
    • Detect objects with main class in scripts #3479
    • ...
Read more

3.6.4

07 Mar 12:08
Compare
Choose a tag to compare

Highlights of the release

  • Support for JDK 24 #22250
  • REPL :silent command to toggle automatic printing of outputs #22248
  • REPL --repl-init-script: setting to run a code on startup #22206
  • Deprecated setting -Xno-decode-stacktraces is now an alias to -Xno-enrich-error-messages #22208
  • Annotation arguments are no longer lifted #22035
  • Experimental Capture Checking: Implement tracked members #21761

Breaking changes

  • Align @implicitNotFound and @implicitAmbigous with the language specification #22371

    This change may impact users who previously used these annotations using variables or string interpolation.

    Previously, a bug in the Scala 3 compiler allowed non-literal strings to be passed as arguments to the @implicitNotFound and @implicitAmbiguous annotations.
    This could have affected how failed implicit search results were reported by the compiler.

    Starting from Scala 3.6.4, the arguments for these annotations must be string literals.
    If a message is too long, it can be concatenated using the + operator, allowing for constant folding.

Other changes and fixes

Annotations

  • Make sure symbols in annotation trees are fresh before pickling #22002
  • Consider all arguments in Annotations.refersToParamOf #22001
  • Do not lift annotation arguments (bis) #22046

Desugaring

  • Fix #22051: only trust the type application part for case class unapplies #22099

Documentation

  • Update example code linked to obsolete content in macros-spec.md #22256

Experimental: Capture Checking

Experimental: Global Initialization

  • Fix crash when initializing val in ByName closure #22354

Experimental: Named Tuples

  • Handle TypeProxy of Named Tuples in unapply #22325
  • Fail more eagerly when trying to adapt named unapply patterns #22315
  • Widen singleton types when computing fields from .Fields #22149
  • Fix .toTuple insertion #22028

Extension Methods

  • Tweak ExtensionNullifiedByMember #22268
  • Nowarn extension matching nonpublic member #21825

Implicits

  • Rollback constraints in compareAppliedTypeParamRef #22339
  • Try implicit searching after finding dynamic select #22318

Linting

  • Allow discarding "Discarded non-Unit" warnings with : Unit #21927

Match Types

  • Fix #21841: Check more that an unapplySeq on a NonEmptyTuple is valid. #22366
  • Type avoidance in MT bound inference #22142

Metaprogramming

  • Rethrow SuspendExceptions caught in CodeGen phase #22009

Metaprogramming: Compile-time

  • Extend compiletime.testing.typechecks with certain transform phases #21185

Nullability

  • Fix #21619: Refactor NotNullInfo to record every reference which is retracted once. #21624

Presentation Compiler

  • Use new infer expected type for singleton complations #21421
  • Fix match error in keyword completions #22138

Reflection

  • Do not return java outline dummy constructor in primaryConstructor #22104

Reporting

  • Normalise the types for Type Mismatch Error (E007) #22337
  • Improve given search preference warning #22189
  • Better error messages when an enum derives from AnyVal #22236
  • Correctly print litteral types in the refined printer #22351

Rewrites

  • Undo patch of double-block apply #21982

Scaladoc

  • Scaladoc: Add support for named tuples #22263

Settings

  • Limit exposure to ConcurrentModificationException when sys props are replaced or mutated #22180

Specification

  • Align the spec to allow the marker #22323
  • Integrate the specification for match types. #22164

Transform

  • Fix #22226: Use classOf[BoxedUnit] for Unit array in ArrayConstructors. #22238

Typer

  • Fixes for isLegalPrefix change #22241
  • Resolve name when named imp is behind wild imps #21888

Contributors

Thank you to all the contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.6.3..3.6.4 these are:

    46  Martin Odersky
    33  noti0na1
    24  Wojciech Mazur
    14  Dale Wijnand
    13  Matt Bovel
    11  Hamza Remmal
     7  Jan Chyb
     6  aherlihy
     5  Kacper Korban
     5  Seth Tisue
     5  Som Snytt
     4  Oliver Bračevac
     4  Yichen Xu
     3  Sébastien Doeraene
     3  dependabot[bot]
     3  kasiaMarek
     2  João Ferreira
     1  David Hua
     1  Eugene Flesselle
     1  Eugene Yokota
     1  Florian3k
     1  Jędrzej Rochala
     1  Kenji Yoshida
     1  Mathias
     1  Natsu Kagami
     1  Oleg Zenzin
     1  Piotr Chabelski
     1  Rui Chen
     1  philippus
     1  rochala
     1  xiaoshihou