Scala

Languages & Runtimes

A statically typed language fusing object-oriented and functional programming on the JVM.

Latest 3.3.8 · by Scala CenterWebsitescala/scala3

Release activity

Release activity — 10 releases across 8 days since Apr 22, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Apr 22, 2026. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
MondayNo releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on Apr 28, 2026No releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 20261 release on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026
WednesdayNo releases on Apr 29, 20261 release on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 20261 release on Jun 3, 20261 release on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026
ThursdayNo releases on Apr 30, 2026No releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 20261 release on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 20263 releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 20261 release on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

10 releases since Apr 22, 2026, busiest day 3

Changelog

3.9.0-RC4

Pre-release
Fixed 4
  • Fix generic signatures for inherited inner classes
  • Fix regression in generic signatures of mixed-in trait setters
  • Fix regression by reverting isPrimitiveValueType change
  • Skip unresolved annotation trees during TASTy loading

Backported changes

  • Fix generic signatures for inherited inner classes #26549
  • Fix regression #26374: generic signatures of mixed-in trait setters #26542
  • Fix regression #26550: revert isPrimitiveValueType change #26565
  • Skip unresolved annotation trees (during TASTy loading) #26520

Contributors

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

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

     4  Rikito Taniguchi
     2  Wojciech Mazur
View originalPermalink
How 3.9.0-RC4 went

3.9.0-RC3

Pre-release
Added 1
  • Add missing directives-parser artifacts to the released artifacts
Fixed 2
  • Reliably decide whether to generate static forwarders
  • REPL: attempt to detect user overridden toString for Product

Backported chnages

  • Reliably decide whether to generate static forwarders #26510
  • REPL: attempt to detect user overridden toString for Product #26451
  • Add missing directives-parser artifacts to the released artifacts #26516

Contributors

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

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

     4  Jamie Thompson
     4  Wojciech Mazur
     2  Solal Pirelli
     1  Arnout Engelen
View originalPermalink
How 3.9.0-RC3 went

3.9.0-RC2

Pre-release
Changed 7
  • Upgrade to Scala.js 1.22.0
  • Stop using custom fonts for Scaladoc
  • Bump Scala CLI to 1.15.0 and coursier to 2.1.25-M26
  • Vendor REPL dependencies
  • Migrate Scala CLI's using directive parser to a compiler module
  • Refactor directives-parser
  • Improve using directives parser
Fixed 11
  • Fix Scaladoc snippets Show all lines and Scastie popup theme bugs
  • Do not warn on dollars in Java names
  • Don't skip generic signature for constructors with generic using parameters
  • Don't eliminate var used by anonfun
  • Erase more aliases of Unit as result type to void
  • Reset dirty unimported state after findRef
Deprecated 1
  • Deprecate JPath use in Quotes

Backported chnages

  • Upgrade to Scala.js 1.22.0. #26389
  • Stop using custom fonts for Scaladoc #26393
  • Bump Scala CLI to 1.15.0 (was 1.14.0) and coursier to 2.1.25-M26 (was 2.1.25-M25) #26432
  • Vendor REPL dependencies #26433
  • Deprecate JPath use in Quotes #26446
  • Migrate Scala CLI's using directive parser to a compiler module #26449
  • Refactor directives-parser #26461
  • Minor using directives parser improvements #26460
  • Scaladoc snippets: fix Show all lines & Scastie popup theme bugs #26165
  • Do not warn on dollars in Java names #26303
  • Don't skip generic signature for constructors with generic using parameters #26302
  • Don't eliminate var used by anonfun #26360
  • Erase more aliases of Unit as result type to void. #26252
  • Reset dirty unimported state after findRef #26412
  • Fix :help regressions #26301
  • Fix generic signature of trait val setter #26374
  • Fixes #25754: Preserve apply result type after beta reducing through opaque proxies #25988
  • Fix memberType for constructor params #25669
  • Fix #25866: match-alias subtyping and wildcard appliedTo #25981

Contributors

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

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

    10	Solal Pirelli
     7	Wojciech Mazur
     6	Piotr Chabelski
     3	Sébastien Doeraene
     1	Jamie Thompson
     1	Oliver Bračevac
     1	Oron Port
     1	Som Snytt
     1	Zieliński Patryk

View originalPermalink
How 3.9.0-RC2 went
3.3.8

3.3.8 LTS

Added 5
  • Support for JDK 26
  • New @uncheckedOverride annotation for definitions that may override
  • Trap Ctrl-C in the REPL to clear the prompt if no command is running or ask for confirmation before exiting
  • New '-Yfuture-lazy-vals' option to compile with new lazy val implementation compatible with all JDK 9+
  • Support for local coverage on and off with // $COVERAGE-OFF$ and // $COVERAGE-ON$ markers
Changed 2
  • Make coverage more similar to Scala 2
  • Make coverage support incremental compilation
Fixed 13
  • Check protected parent constructor accesses only occurs in child constructors
  • Fix protected constructor access
  • Fix deprecation warnings when a symbol is annotated by a deprecated annotation
  • Fix Java leading annotation parsing
  • Do not allow @targetName on primary constructor
  • Cast inline call results to result type, not method type

Highlights of the release

  • Support for JDK 26 #24430
  • Multiple coverage improvement to make it on par with Scala 2 support including // $COVERAGE-OFF$ and // $COVERAGE-ON$ markers.
  • New @uncheckedOverride annotation for definitions that may override. #24545
  • Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting. #24127
  • Numerous linting and presentation compiler improvements and fixes.
  • New '-Yfuture-lazy-vals' options that allows to compile with new lazy val implementation compatible with all JDK 9+ #637

Other changes and fixes

Access modifiers
  • Check protected parent constructor accesses only occurs in child constructors #25511
  • Fix protected constructor access #25523
Annotations
  • Improve ref check of constructors #24342
  • Also copy param annots at mixin #24916
  • Named arg may be deprecatedName #21588
  • Fix: emit deprecation warnings when a symbol is annotated by a deprecated annotation #23906
  • Fix #20063: Java leading annotation parsing #25503
  • Accommodate adapted Scala 2 annotation value #17516
  • Regression test for #3403 #25521
  • Fix: do not allow @targetName on primary constructor too #24682
  • Add @uncheckedOverride annotation for definitions that may override #24545
Backend
  • Chore: add regression test for #4528 #24663
  • Cast inline call results to result type, not method type #25111
  • Regression tests for #25 #25536
  • Enforce JVM UTF-8 string limits in the backend #25300
  • Do not simplify isInstanceOf if unrelated types might be subtypes at run-time #25535
  • Adjust purity of trait with lazy member #23788
  • Use Objects.equals in translating == #25314
  • Fix generic signatures for mixin forwarders conflicting type parameter names #24567
  • No mixin forwarder when ancestor is sealed #23482
  • Simplify JVM interface list emission, remove a mini-phase #25203
  • Chore: optimize lazy val with power of two #22428
  • Fix infinite loop with bad section ends in TastyHeaderUnpickler #25676
  • Fix TastyPrinter's JAR-walking logic to include subdirectories #25678
Classpath
  • Skip module-info.class files during REPL tab-completion #24838
  • Fix for #22461 Empty ClassPath attribute in one or more classpath jars causes crash #22462
Coverage
  • Make coverage more similar to the one in Scala 2 #23722
  • Fix #25555: Preserve singleton precision during scoverage lifting #25556
  • Fixes #25482: Ensure package transformation properly handles language imports in InstrumentCoverage #25546
  • Bugfix: Fix issues with Scala JS and coverage #24769
  • Make coverage support incremental compilation #24773
  • Add support for local coverage on and off with // $COVERAGE-OFF$ and // $COVERAGE-ON$ #24486
  • Improvement: Try to optimize coverage phase #24925
  • Scoverage: do not instrument erased values #25298
Default parameters
  • Fix named arguments evaluation order with by-name parameters #25161
Documentation
  • Docs: Enforce links checks in the generated docs #25425
  • Improve the contributing guide #25384
  • Extend copyright into 2026 #24927
  • Update README: This is Scala 3 #25424
  • Explain implicit vs default args #25311
  • Fix some scaladoc in compiler #24166
  • Docs: fix task name for scaladoc/testOnly #23678
  • Replace internal tab char in comment in Synthesizer.scala #23691
Enums
  • Fix Java enum forwarders to pull from companion on initialization #24361
  • Make enum apply ascriptions inferred types #25562
Exports
  • Fix: look at the underlying of a TermRef for a getter #24565
Extension Methods
  • Accept using right associative parameters #24766
  • Add ctor proxies before exports #24884
  • Fix pkg obj prefix of opaque tp ext meth #21527
  • Better handling of illegal trees in extension #25368
  • Fix LiftToAnchors for higher-kinded type applications #23672
  • Prevent crash when extension not found #18830
GADTs
  • Also trust TypeTest when there is a Bind #24568
Implicits
  • Only check seen for LazyRef for TypeSizeAccumulator #20459
  • Chore: add regression test for #8581 #24666
  • Fix "Regression in zio/zio-schema for typer/implicit resolution" #24156
  • Fix implicit scope liftToAnchors for parameter lower bounds #23679
Inference
  • Tweak type for tryParameterless #24716
Initialization
  • Refine parameter adaptation logic for arrays #23591
Infrastructure
  • Tweak tests to not fail under jdk 25 #25148
  • Bump actions/upload-artifact from 6 to 7 #25423
  • Bump actions/download-artifact from 7 to 8 #25420
  • Bump VirtusLab/scala-cli-setup from 1.12.2 to 1.12.3 #25422
  • Bump coursier/cache-action from 7 to 8 #25220
  • Bump actions/upload-artifact from 5 to 6 #24758
  • Bump actions/download-artifact from 6 to 7 #24759
  • Bump actions/checkout from 5 to 6 #24517
  • Bump actions/upload-artifact from 4 to 5 #24268
  • Bump actions/download-artifact from 5 to 6 #24271
  • Bump actions/download-artifact from 4 to 5 #23711
  • Bump actions/checkout from 4 to 5 #23710
  • Chore: bump sbt to 1.11.5 #23805
  • Chore(deps): bump actions/setup-java from 4 to 5 #23812
  • Chore: Use numberOfWorkers instead #24338
  • Improvement: Additional way of defining ENABLE_BSP_ALL_PROJECTS #24122
  • Formatting: Format presentation-compiler with scalafmt #24977
  • Ensure mistakes in CI inputs are caught early #25677
Inline
  • Chore: add regression test for #22575 #25337
  • Ensure the inline match scrutinee type conforms to the recalculated type #24988
  • Make containsOuterRefsAnywhere follow aliases #25214
  • Find annotation args in inline expansion #24895
  • Chore: add regression test for #10343 #24668
  • Improve the test for creating protected method accessors for inlines #25865
  • Do not update Symbol defTrees when retyping after Inlining #23870
  • Prevent opaque types leaking from transparent inline methods #23792
  • Chore: add regression test for #8194 #24655
  • Also substitute symbols in case bindings symbols #24849
  • Inlines: decide sealing against original target, while using widened type as cast destination #25448
  • Fix inline match on blocks with multiple statements #20125
JDK
  • Skip over JEP 445 compact compilation units #23247
  • Handle MissingType during Erasure phase #24817
  • Don't generate bridge methods for inaccessible Java package-private methods #25166
  • Fix isJvmAccessible to handle nested protected Java classes #24625
  • Upgrade ASM to 9.9 for JDK 26 support #24430
  • Fix java record varargs field accessor #24172
  • Do not overwrite the supertype of non-trait super in Erasure #26081
Linting
  • Fix false unused import warning for given CanEqual in pattern matching #25231
  • Move second CheckUnused after pattern matcher #25114
  • Extension check handles hiBound of opaque type #25172
  • Unused lint ignores args to ctor of enclosing class #24768
  • Parameter name can be masked in import #24635
  • CheckUnused examines type of Apply #24465
  • Check for synthetic case methods in unused lint #24239
  • Lint avoids revisiting Inlined.call #24277
  • Register no elements for lint after inlining #24279
  • Ignore warnings when compiletime.testing is imported #24036
  • Unused lint does not rewrite suppressed warnings #24055
  • Drill through type lambda for tree symbol #23699
  • Invent given pattern name in for comprehension #23121
  • Check inline expansion for exclusion #23019
  • Unused var message mentions unread or unset #23719
  • Warn unused masking imports, remove obsolete unused options #23757
  • Distrust tree pos for patvar lint #25043
  • Match apply in PolyFunction for override #25505
  • Value discard checks inline call for exemption #25554
  • Lint enum case in outer context #24652
  • Preserve select of exported member in newExpr #24570
  • Always traverse Inlined.call in linter #24043
  • Lint function arrow intended context function #23847
  • Use enclosing enclosingInlineds for empty call #24281
  • Exclude synthetic opaque proxy from lint #24264
  • Regression test locals #25433
  • Augment regression test #24327
Match Types
  • Fix regression: Prioritize tree type over proto type when typing Binds #24175
Metaprogramming
  • Warn about encoded pkg obj names #22707
  • Bugfix: Fix possible SuspendException thrown when using macros #24174
Nullability
  • Patch to allow interop with XMLBuilder and -Yexplicit-nulls #25221
  • Add jspecify NonNull annotation to NotNullAnnots list #24487
  • Add quick fix to add .nn #23598
Opaque Types
  • Preserve insertion order when balancing And/OrType #25361
  • Treat synthetic casts as pure #25126
  • Make opaque types decomposable #24068
Overloading
  • Pretype args before skipping clause of overloaded application #23012
  • Fix varargs overload resolution with wildcard types #24669
  • Fix wildcardArgOK for mixed wildcard/concrete type args #25001
  • Regression test #16004 #24086
  • Tweak tryParameterless to use readapt #24078
  • Fix override checking for Java methods with covariant array #24408
  • Prefer non-extension to extension #24943
  • Fix class super-call invokespecial owner #25437
Parser
  • Accept primitive.class in annotations #25363
  • End of new expr never shrinks #25253
  • Permit new with trivial end #24331
  • Improve message for nested package missing braces #23816
  • Check seen for TypeParamRef in TypeSizeAccumulator #25264
  • Observe outdent also for type cases and type blocks in quotes #25519
  • Fix: import resolution for Java #25537
  • Error tree on outdent is zero extent #23796
  • Don't automatically insert OUTDENT before COMMA #25501
  • Fix: allow postfix setters under language.postfixOps #23775
  • Additional regression tests #25506
  • Context bound always has a span #25809
  • Don't pop outermost region when skipping #25738
Pattern Matching
  • Emit unchecked warnings for trait patterns #24962
  • Fix false exhaustivity warning for seq match #23968
  • Call inhabited for AppliedType recursively #23964
  • Fix Ycheck crash from singleton tuple selects after specialization #25331
  • Fix false unreachable case warning #23800
  • Use upper bound of abstract types in exhaustivity checking #23909
  • Extend caching in the space engine beyond local context #23483
  • Prevent from getting children in case of non-sealed private #25359
  • Use MatchCaseUnreachable #24829
  • Preserve singleton types for final val aliases to Java enum constants #24980
  • Try expanding case class to the product of its fields #25454
  • Never widen constant type on selector type in matches #25197
Pickling
  • Fix #24456: Cleanup the info of a Bind symbol in posttyper #24490
  • Fix #24207: Cleanup the type of UnApply trees in posttyper #24259
  • Chore: add a regression test for #15786 #24658
  • Don't absolutize sources outside of the sourceroot in TASTy #25429
Positions
  • Preserve span of this during statification of trait constructors #25354
  • Compute the right span for abstract error messages #23853
  • Use a better span for an anonymous class #24640
Presentation Compiler
  • Improvement: Use method type if it's available #25641
  • Bugfix: Don't add square braces in context bounds #25798
  • Bugfix: Fix issue with empty name throwing exceptions #25752
  • Bugfix: Fix wrong type in InferredType code action #25469
  • Bugfix: Fix issues in presentation compiler when using Scala JS #25450
  • Improvement: Add fallbacks in non critical places for presentation compiler #25483
  • Fix & feat: improvements in selection ranges #25290
  • Feat(pc): add closing labels inlay hints #25178
  • Bugfix: remove stale top-level symbols between runs #25317
  • Bugfix: Fix various minor presentation compiler issues #25256
  • Fix: ignore implicit apply for signature help #25294
  • Fix incorrect XRay hint #24738
  • Presentation compiler: propagate isDebug timeout check to all tests #25068
  • Handle inlined tree in implicit parameter inlay hints #24762
  • Create extension method in infer method action #24721
  • Fix opaque types displayed as Nothing & Any in hover and signature help #24921
  • Fix negative activeParameter in signature help #24945
  • Closes #7532: Parameter hints not working for functions #23854
  • Improvement: Allow passing -explain to the presentation compiler #24740
  • Exclude XRayModeHint for synthetics #24722
  • Add unsafe RawPresentationCompiler implementation #24133
  • Bugfix: Make sure that we can query tree.source #24123
  • Improvement: additional completions for using clause #23647
  • Inlining interpolated variables #25144
  • Bugfix: inline value false-positive shadowing with lambda params #25140
  • Fix issue with pc breaking in requiredMethod on newly overloaded valueOf #23708
  • Pc: completions - do not add [] for ... derives TC@@ #23811
  • Porting XRayModeHints #23891
  • Improve symbol order in completions provided by the presentation compiler #23888
  • Bugfix: Fix issues with Scala JS and the presentation compiler #25550
  • Bugfix: Show hover on derives clause #25804
  • Improvement: improve perfomance of the presentation compiler #25769
  • Coursier dependency imports should have lexicographic ordering #21592
  • feature: Improve the logical sources provider (#26079)
  • feature: Add logical package parsing for sourcepath (#25446)
Quotes
  • Fix crashing for context bound type variables in quoted patterns #25286
  • Fix #25208: handle AndType(TermRef, TypeRef) in TreeUnpickler path trees #25209
  • Remove redundant mapOver in fixThisTypeModuleClassReferences #25440
  • Make typeArgs in QuotesImpl work for AnnotatedTypes #24018
  • Improve LambdaTypes handling in Quotes reflect memberType #25786
  • Backport "Don't lookahead from interpolation" to 3.3 LTS (#25834)
Reflection
  • Fix Select.copy in reflect API losing DerivedName for default getters #25269
  • Do not expose ClassInfo in memberType in reflect API #24922
  • Quotes reflect: Allow to return DefDef from a val symbol tree #22603
Reporting
  • Force conditional warnings when configured #25552
  • Use deprecatedOverriding message #25439
  • Fix #24711: Use dot notation for Java nested types in error messages #24919
  • Enhance WInferUnion to not warn propagated explicit union types #25280
  • Fixes #24233: Remove misleading JDK compatibility hint for TASTy errors #25171
  • More descriptive "not found" message when type/term exists with the expected term/type name #24959
  • Mention named givens in double def explainer #23833
  • Do not discard amended format when f-interpolator warns #23697
  • Use dollar-free param names in stub implementations #25646
  • Error mentions bad _1 selector #25616
  • Add ErrorMessageID to -Winfer-union warnings (#25073) #25249
  • Addendum when apply error involves default arg #21133
  • Warn on Scala 2 auto-apply if loosely nullary #24811
  • Forward reference error includes line numbers #22534
  • Use other tree for actual symbol of Assign #22869
  • Add "did you mean to use parentheses/a block" when finding a complex expression on the RHS of an infix operator #25099
  • Fix printing references to nested objects #25086
  • Add error note for type mismatch involving blocks without last expression #25181
  • Don't suggest invisible members of root imports #24999
  • Improve multi-line code message rendering #24723
  • Warn if type argument was inferred as union type #24258
  • Improve printing of strings #22945
  • Better error message: reassignment to val #24184
  • Add addendum to private val parameter variance error message #23876
  • Regression tests #24876
REPL
  • Make REPL type echo-ing use partially qualified names where made possible by imports #24850
  • Remove pipes from multi-line REPL prompts #24307
  • Fix "Colon as operator part at beginning of line in REPL" #24942
  • Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting #24127
Rewrites
  • Deduplicate patches before applying them to sources #24215
Runner
  • Fix for #22443: prevent stty from being called when not running in a terminal #22444
Scaladoc
  • Do not hide when a class or a trait extends Any #25403
  • Ability to hide snippets from the documentation #25411
  • Use <sup> tags for exponents in Scaladoc comments #25645
  • Fix duplicate member entries in Scaladoc generation #24712
  • Scaladoc Overload Method Link Fix #25156
  • Init MacroClassLoader in scaladoc #25141
  • Scaladoc: Take title from sidebar.yml into account #18997
  • [scaladoc] Allow to additional scalacOptions in Markdown code snippets #24755
  • Fetch the right kind for synthesised definitions #25405
  • Add the transparent flag to java.lang.Object #25394
  • Parse HTML properly in Scaladoc #25681
SemanticDB
  • Add context parameters to SemanticDB synthetics #23381
  • Better refinement symbols in semanticDB #18604
  • Encapsulate SemanticDB package, unify symbol and document printing #25084
Testing
  • Fix line and path separators in test #23534
  • Fix: update checkfile for i23905 #24064
Testing framework
  • Reject check file match with stack trace #22389
  • Cleanup compiler test. remove unnecessary isJavaAtLeast conditions #24589
  • Bugfix: Don't run coverage tests in testCompilation without --coverage flag #24932
  • Cleaner, quieter test rig tests #24073
  • Skip tests with no sources such as .scala-build dir #25173
  • Report info logs in checked test output if enabled with -Ylog #25391
  • Bugfix: Fix flaky test in ScalaJSCompletionsSuite #25539
  • Add regression test for #23195 #24853
  • Test hover on backticked identifiers with whitespace #25142
Transform
  • Check extension method at typer #24199
  • Always encode in derived name #23478
  • Fix "Scala 3.8.3 compiling covariant overrides with separate compilation causes AbstractMethodError at runtime" #25659
  • Make Phase.run protected #25366
Tuples
  • Fix inconsistent typeSize calculation for TupleN vs recursive pair encodings #24743
  • Fix: make vals created in desugaring of n-ary lambdas non-synthetic #23896
  • Normalize tuple types when typing patterns #25335
  • Fix #24997: Avoid unnecessary CHECKCAST in untupled function parameters #25085
Typeclass Derivation
  • Fix #23043: spurious package conflict from non-class directories #25441
  • Also checkRefinement for Singleton mirror #24080
Typer
  • Use TypeComparer.constValue in TypeEval #24718
  • Fix crash in Selectable unapply with custom applyDynamic #24343
  • Prevent crash in SAM conversion with mismatched arity #23877
  • Detect InsertedApply on Apply to break synthetic apply loops, not just Select #25463
  • Typer: remove by-name lifting and replace default-getter args with fresh syms #25502
  • Refine isEffectivelyFinal to avoid no-owner crash #23675
  • Do not generate access proxies for locally defined protected defs #25056
  • Use dealiasKeepRefiningAnnots in AvoidMap #25609
  • Fix #24573: Add stricter checks for platform SAM compatibility #24624
  • Make isExactlyNothing and isExactlyAny work for And/OrTypes #24016
  • Handle assertion error in TyperState #23665
  • Fix: correctly require a ClassTag when building a multidimensional Array #23902
  • Fix crash when processing path dependent context functions using HKTs #25530
  • Regression test #24820
  • Chore: add regression test for #13889 #24657
  • Handle assertion error in TyperState #23665
XML
  • Use toVector for XML literal sequences #23221
Union types
  • Dealias in isSimpleThrowable check #24744
View originalPermalink
How 3.3.8 went

3.9.0-RC1

Pre-release
Added 1
  • Support expectations in snippets in Scaladoc
Changed 5
  • Make `into` type and modifier stable
  • Unify annotation handling for thread-safe and -unsafe lazy vals
  • Emit acceptable Java generic signatures for higher-kinded types
  • Unwrap refined types for Java generic signatures
  • Emit nested module classes as static inner classes
Fixed 13
  • Use `IndexOutOfBoundsException` constructor with `Int`
  • Fix Java signatures for arrays of value classes
  • Fix Java generic signatures for context functions
  • Handle HKT bounds in Java generic signatures
  • Lambda-owned param ref in constructor incurs no field
  • Fix Scoverage and separation checking failures
Removed 1
  • Remove automatic collection of entry points

Highlights of the release

  • Long Term Support
  • Make into type and modifier stable #26184
  • Remove automatic collection of entry points #25215
  • Scaladoc: support expectations in snippets #25713
  • Restore Automatic-Module-Name in standard library's manifest #26218

Other changes and fixes

Annotations
  • Unify annotation handling for thread-safe & -unsafe lazy vals #24907
Backend
  • Use IndexOutOfBoundsException constructor with Int #24764
  • Emit acceptable Java generic signatures for HKTs #25540
  • Unwrap refined types for Java generic signatures #25626
  • Fix Java signatures for arrays of value classes #25631
  • Fix Java generic signatures for context functions #25632
  • Handle HKT bounds in Java generic signatures #25744
  • Emit nested module classes as static inner classes #26137
Constructors
  • Lambda-owned param ref in ctor incurs no field #23286
Coverage
  • Fix #25624: Scoverage and separation checking failures #25625
  • Scoverage: do not instrument methods that have too large bodies #25629
  • Scoverage & CC interaction: exempt CC nested symbols from @experimental check #25687
  • Coverage + Experimental nested match cases interaction fix #25913
  • Scoverage: fix broken warnings related to tail recursion and infinite loop detection #25941
  • Scoverage: correctly detect curried constructor applications #26048
  • Scoverage: correctly lift wildcard and singleton types #26049
  • Scoverage: refrain from lifting closures for capture calculus compatibility #26067
  • Scoverage: fix lifted type computation for parameterless methods #26069
  • Scoverage: Fix coverage parameterless select qualifier casts #26087
Documentation
  • Sys, concurrent, runtime (1): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25371
  • Collection mutable (2): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25372
  • Collection immutable (3): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25373
  • Collection core (4): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25374
  • Numeric types (5): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25375
  • Array, IArray, Predef, Option (6): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25376
  • Math (7): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25377
  • Quoted, compiletime (8): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25378
  • Jdk (9): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25379
  • Util, io, ref (10): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25380
  • Improve sizeCompare doc #25696
  • Function, Tuple, Product (12): fill in missing @param, @tparam, and @return tags in Scaladoc comments (V2) #25996
  • Improve Scaladoc for Tuple#map #26060
  • Fixed broken URL links. #26064
  • Enable sc:compile for stdlib package scala.annotation #25836
  • Enable sc:compile for stdlib package scala.beans #25837
  • Enable sc:compile for stdlib package scala.collection #25838
  • Enable sc:compile for stdlib package scala.collection.convert #25839
  • Fix secondary constructor capture checking #25841
  • Enable sc:compile for stdlib package scala.collection.generic #25845
  • Enable sc:compile for stdlib package scala.collection.immutable #25855
  • Enable sc:compile for stdlib package scala.collection.mutable #25860
  • Enable sc:compile for stdlib package scala.collection.compat #25861
  • Enable sc:compile for stdlib package scala.compiletime #25862
  • Enable sc:compile for stdlib package scala.concurrent #25867
  • Enable sc:compile for stdlib package scala.io #25868
  • Enable sc:compile for stdlib package scala.jdk #25870
  • Enable sc:compile for stdlib package scala.math #25878
  • Enable sc:compile for stdlib package scala.quoted #25912
  • Enable sc:compile for stdlib package scala.reflect #25915
Enums
  • Adjust error on bad enum #23080
  • Preserve Java enum semantics for explicit java.lang.Enum inheritance #25658
Erasure
  • Preserve erased flags on synthetic context-function parameters #25751
  • Fix #24653: Erase aliases of Unit as result type to void. #26192
Expression Compiler
  • Fix expression evaluation in debugger under -old-syntax #26096
Extension Methods
  • Fix: #24765 SAM conversion for extension method from self-based types #25637
Implicits
  • Fixes #24914 Treat equivalent candidates as divergent in implicit search #25910
  • Disallow implicit conversion to AnyRef again. #26210
Incremental Compilation
  • Support zinc invalidation for type arguments in macro calls #23900
  • Ignore annotations no longer on the classpath in ExtractAPI #25889
  • Fixes #21383 enable Mode.ReadPositions when reading annotation trees #25911
Inline
  • [OpenCB Project Fix] Fixes #26015: Start of NoSpan in adaptToArgs fallBack #26017
Lambda Lift
  • Fixes #25943: Track super-calls as call edges in LambdaLift #26029
Linting
  • Improve unused check of variable in assignment body #24685
  • Warn about dollars in names of definitions unless backticked #24690
  • Use precise type for x in case x @ (_: A, _: B), take 2 #26161
Opaque Types
  • Fix crash on invalid opaque type in package #26118
Parser
  • Fix span of xml literal #15635
  • Warn if name of empty template has trailing colon #23907
  • Warn dubious negative literal syntax #24163
  • Fix "Compiler crashes when illegal signature of applyDynamic is used " #24974
  • Check ascription in valdef pattern #25597
  • Parse Java annotations on wildcard type arguments #26187
Pattern Matching
  • Make sealed abstract java classes exhaustive checkable #25788
Pickling
  • Fixes #25801: Handle TypeDefs in ensureHasSym #26011
Presentation Compiler
  • Bugfix: Fix issue with empty name throwing exceptions #25752
  • Improvement: improve perfomance of the presentation compiler #25769
  • Bugfix: Don't add square braces in context bounds #25798
  • Bugfix: Show hover on derives clause #25804
  • Fix warnings in presentation-compiler #25827
  • Improvement: Add -Wunused:all to presentation-compiler #26113
Quotes
  • Check that Closures refer to anonymous functions under -Xcheck-macros #26050
  • Consistently use xCheckMacroAssert in QuotesImpl #26053
REPL
  • CC & REPL: restore :type, :doc, and tab completions #25789
  • Avoid JLine warning about CompletingParsedLine #25917
  • Mostly fix REPL in sbt #25925
  • Fix REPL silently exiting after first user input #25969
  • Relax typer position assert in interactive mode #26130
Reporting
  • Use context.outers instead of owner chain to find class for suspicious top-level resolution #20717
  • Feat: Add actionable diagnostic for missing members #23572
  • Include span of bad args if multiline #25699
Scala-JS
  • Tolerate empty paths in JSPositions conversion #26140
Scaladoc
  • Avoid NPE in Scaladoc signatures on JDK 25 #25779
  • Scaladoc: fix 'occured' -> 'occurred' typos in user-visible error strings #25805
  • Fix scaladoc checkErrorCodeSnippets #25942
Standard Library
  • Optimize the standard library in bootstrapped compilation #25689
  • Change lower bound of Option.orNull to nullable #25733
  • Use unchecked on some pattern matches #25762
  • Remove self reference in Conversion class and add impure conversion test #25931
  • Fix potential NPE in BoxesRunTime.equalsCharObject #25958
  • Safer equalsNumChar #25962
  • Fixes #25702: Avoid AnyClass fallback in requiredClass #26010
  • Fix 26026: restore type parameter of Option.orNull #26027
  • Fix mismatch between wrapArray and wrapArrayMethodName #26162
Transform
  • Find correct type when generating the generic signature of trait fields #25543
  • Remove questionable transform of Select from SelectStatic #25620
  • Resurrect some Scala 2 tests for generic signatures #25736
  • Emit generic signatures for all trait fields #25780
  • Fix generic signatures of forwarders containing value classes #25879
  • Generic signature fixes #25880
  • Fix crash during generic signature emission for inner classes of type aliases #26202
Typeclass Derivation
  • Fix synthesis of mirrors for GADT with dependent type parameters #26080
Typer
  • Change typeOfArg to take TypedArg instead of Arg #25418
  • Make Constant construction type-directed #25869
  • Fix #25894: break cross-unit cyclic export on partial recompile #25900
  • Fixes #24056 Dealias value class types in structural access #25907
  • Fixes #20010 Avoid crash on missing TASTy class references #25908
  • Fixes #24719 Fix LazyAnnotation.tree reentrance in Namer.addChild #25909
  • Fixes for 2 code quality findings #25960
  • Fixes #25856: Position not set crash in implicit search during import qualifier #26032
  • Preserve type info when lifting stable arguments #26063
Value Classes
  • Replicate value class erasure binary compat hack in GenericSignatures #25775
Experimental: Capture Checking
  • Enable sc:compile for scala.util Package #25651
  • Make tests for capability parents of Array class more robust #25695
  • Refine isStatic test in SafeRefs.isSafe #25708
  • Go back to explicit @retains instead of uses_init in stdlib #25719
  • Change syntax of what was uses_init #25720
  • Several fixes to the handling of static objects and recheckIdent #25770
  • Fix #25388: Enhance safe check for synthetic annotations #25883
  • Keep annotations when converting in Setup to dependent function #25891
  • Properly solve capture set during box adaptation #25902
  • Make parameter types of some closures explicit #25967
  • Clarify use-capset test #25976
  • Drop SharedCapability exception in subsumes #26078
  • Tighten check of field classifiers #26085
  • Don't assume classes with self aliases to be pure. #26097
Experimental: Erased definitions
  • Fix bridge generation when erased precedes a non-erased parameter #25923
  • Fix bridge typing when erased precedes a non-erased parameter #26047
Experimental: Explicit Nulls
  • Fix issue with flexifying unions from Java symbols under explicit-nulls #25808
Experimetnal: Safe Mode
  • Assume safe IllegalArgumentException and NoSuchElementException #25859
Experimental: Strict Equality
  • Enable strictEqualityPatternMatching behaviour for non-case objects #25850
  • Fixes #25979: Fix strictEqualityPatternMatching with GADTs #25980

Contributors

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

According to git shortlog -sn --no-merges 3.8.4..3.9.0-RC1 these are:

    95	Solal Pirelli
    60	Martin Odersky
    32	Som Snytt
    25	Matt Bovel
    25	Wojciech Mazur
    23	Oliver Bračevac
    19	Claude
    17	Chua Chee Seng
    16	Piotr Chabelski
    15	Anatolii Kmetiuk
    12	Bill Venners
    11	Tomasz Godzik
     7	Patryk Zieliński
     6	Li Haoyi
     6	dependabot[bot]
     6	noti0na1
     5	Jan Chyb
     4	Jamie Thompson
     4	Oron Port
     4	Rikito Taniguchi
     4	Sébastien Doeraene
     3	Emil Ejbyfeldt
     3	Yichen Xu
     2	Alex Archambault
     2	HarrisL2
     2	Jakub Warchoł
     2	Seth Tisue
     1	Bartłomiej Kozak
     1	Guillaume Martres
     1	Hamza Remmal
     1	Jeon Yoonjae
     1	Kasper Kondzielski
     1	Matthias Berndt
     1	Matthias Kurz
     1	Ondrej Lhotak
     1	Ondřej Lhoták
     1	Sai Asish Y
     1	Sylvain Kuchen
     1	lalala194
     1	pgilliar

View originalPermalink
How 3.9.0-RC1 went

3.8.4

Added 10
  • Allow :help syntax for all settings
  • Add logical package parsing for sourcepath
  • Support for .test.java files in Scala CLI
  • Toggle to turn auto-IDE-setup off in Scala CLI
  • Cross support for run, package and doc sub-commands in Scala CLI (experimental)
  • Global --offline config key in Scala CLI
Changed 3
  • Upgrade Scala CLI to 1.14.0
  • Use Objects.equals in translating ==
  • Do not instrument erased values in scoverage
Fixed 6
  • Copy param annotations at mixin
  • Do not simplify isInstanceOf if unrelated types might be subtypes at run-time
  • Fix crash when processing path dependent context functions using HKTs
  • Preserve singleton precision during scoverage lifting
  • Ensure package transformation properly handles language imports in InstrumentCoverage
  • Fix named arguments evaluation order with by-name parameters
Deprecated 1
  • Ammonite REPL in Scala CLI

Highlights of the release

Other changes and fixes

Annotations
  • Also copy param annots at mixin #24916
  • Named arg may be deprecatedName #21588
  • Use dealiasKeepRefiningAnnots in AvoidMap #25609
Backend
  • Do not simplify isInstanceOf if unrelated types might be subtypes at run-time #25535
  • Port more Scala2 tests + some mixin improvements #25573
  • Use Objects.equals in translating == #25314
Compiler Phases
  • Harden Period creation and use of Run/PhaseId #25484
  • Make Phase.run protected #25366
Context Functions
  • Fix crash when processing path dependent context functions using HKTs #25530
Coverage
  • Fix #25555: Preserve singleton precision during scoverage lifting #25556
  • Fixes #25482: Ensure package transformation properly handles language imports in InstrumentCoverage #25546
  • Scoverage: do not instrument erased values. #25298
Default parameters
  • Fix named arguments evaluation order with by-name parameters #25161
  • Typer: remove by-name lifting and replace default-getter args with fresh syms #25502
Documentation
  • Error mentions bad _1 selector #25616
  • Document Scala compiler error codes #24734
  • Fix capture checking doc links in language.scala #25498
  • Docs: apply snippet compiler on new types reference docs #19513
  • Remove outdated comment in value classes #25428
  • Update IsIterable scaladoc #24692
Enums
  • Make enum apply ascriptions inferred types #25562
Extension Methods
  • Accept using right associative parameters #24766
  • Better handling of illegal trees in extension #25368
GADTs
  • Also trust TypeTest when there is a Bind #24568
Implicits
  • Deprecation when inferring implicit from non-accessible companion #25516
  • Fix missing deprecation warning for implicit in non-accessible companion #25608
  • Update migration message #25627
Inline
  • Ensure the inline match scrutinee type conforms to the recalculated type #24988
  • Do not update Symbol defTrees when retyping after Inlining #23870
  • Inlines: decide sealing against original target, while using widened type as cast destination #25448
  • Do not generate access proxies for locally defined protected defs #25056
  • Avoid useless scrutinee proxy vals in inline match reduction #25279
  • Improve the test for creating protected method accessors for inlines #25865
Linting
  • Match apply in PolyFunction for override #25505
  • Value discard checks inline call for exemption #25554
  • Introduce error message ids for shadow warnings #25101
  • Warn if for with many vals and overloaded map #25090
Match Types
  • Restore MatchTypeNoCases warning with correct source position #25470
Named Tuples
  • Fix Ycheck crash from singleton tuple selects after specialization #25331
  • Fix #23621: make named tuples exhaustive checkable #25267
Nullability
  • Patch to allow interop with XMLBuilder and -Yexplicit-nulls #25221
  • Be honest about the nullability of ConsoleReporter.reader and SourcePosition.outer. #25561
Opaque Types
  • Treat synthetic casts as pure #25126
Overloading
  • Pretype args before skipping clause of overloaded application #23012
Parser
  • Fix #20063: Java leading annotation parsing #25503
  • Observe outdent also for type cases and type blocks in quotes #25519
  • Fix: import resolution for Java #25537
  • Fix #25456: parser crash on polymorphic context bound #25623
  • Accept primitive.class in annotations #25363
  • InCase has indent width of case #25295
  • Don't automatically insert OUTDENT before COMMA #25501
  • Add "did you mean to use parentheses/a block" when finding a complex expression on the RHS of an infix operator #25099
  • Pat var must be isVarPattern #25701
  • Don't pop outermost region when skipping #25738
  • Context bound always has a span #25809
  • Don't lookahead from interpolation #25834
Pattern Matching
  • Clean desugaring of simple tuple assignments #25010
  • Extend caching in the space engine beyond local context #23483
  • Prevent from getting children in case of non-sealed private #25359
  • Use MatchCaseUnreachable #24829
  • Fix wrong exhaustive check with sequence wildcard on case class with custom unapply #24260
  • Try expanding case class to the product of its fields #25454
  • Fix false-positive pat mat unreachable case warning #25978
Positions
  • Preserve span of this during statification of trait constructors #25354
Presentation Compiler
  • Improvement: Add fallbacks in non critical places for presentation compiler #25483
  • Improvement: Use method type if it's available #25641
  • Bugfix: Fix wrong type in InferredType code action #25469
  • Fix & feat: improvements in selection ranges #25290
  • Fix: ignore implicit apply for signature help #25294
  • Bugfix: remove stale top-level symbols between runs #25317
  • feature: Improve the logical sources provider #26079
Quotes
  • Fix crashing for context bound type variables in quoted patterns #25286
  • Remove redundant mapOver in fixThisTypeModuleClassReferences #25440
  • Improve LambdaTypes handling in Quotes reflect memberType #25786
Reflection
  • Fix Select.copy in reflect API losing DerivedName for default getters #25269
  • Do not expose ClassInfo in memberType in reflect API #24922
Reporting
  • Force conditional warnings when configured #25552
  • Suppressions before finalize #25576
  • Use dollar-free param names in stub implementations #25646
  • Fix #24711: Use dot notation for Java nested types in error messages #24919
  • Use deprecatedOverriding message #25439
  • Improve message for misplaced using #15624
  • Use other tree for actual symbol of Assign #22869
  • Add ErrorMessageID to -Winfer-union warnings (#25073) #25249
  • Fix TastyPrinter's JAR-walking logic to include subdirectories #25678
REPL
  • Allow global language imports in REPL and snippet compiler #25458
  • Fix all REPL tests when production behavior is enabled #25449
  • Add setting to control REPL print height #25560
  • Fix #25691: scalaXml Elem rendering in repl #25781
  • Fix Ctrl+C handling in the REPL #25782
  • Fix "Fix Ctrl-C Handling in the REPL" #25835
Rewrites
  • Fix incorrect rewrite of expr _ when expr has a function type #25457
Runner
  • Fix for #22443: prevent stty from being called when not running in a terminal #22444
Scala.js
  • Fix #25342: Transfer methodsAllowingJSAwait to forcefully inlined methods. #25344
Scaladoc
  • Use <sup> tags for exponents in Scaladoc comments #25645
  • Do not hide when a class or a trait extends Any #25403
  • Do not generate documentation for AnyVal, it exists now #25399
  • Ability to hide snippets from the documentation #25411
  • Update scaladoc signature for given methods #25325
  • Fetch the right kind for synthesised definitions #25405
  • Scaladoc: Take title from sidebar.yml into account #18997
  • Bump jackson-* to 3.1.2 (was 2.15.1) #25785
  • Parse HTML properly in Scaladoc #25681
SemanticDB
  • Encapsulate SemanticDB package, unify symbol and document printing #25084
  • Better refinement symbols in semanticDB #18604
Standard Library
  • Array.range trusts NumericRange.count #24878
  • Chore: optimize lazy val with power of two. #22428
  • Move process parse exceptions to sys.error instead of a custom exception #25675
Syntax
  • Check protected parent constructor accesses only occurs in child constructors #25511
  • Fix protected constructor access #25523
  • Do not warn for package object at the top level #25826
TASTy
  • Fix infinite loop with bad section ends in TastyHeaderUnpickler #25676
Tooling
  • Fix MSI installer reporting wrong Scala version on Windows #25591
  • Fix -Ymagic-offset-header for DoubleDefinition error and implicitNotFound errors, and remove global unmanaged cache #25706
Transform
  • Always encode in derived name #23478
  • Fix "Scala 3.8.3 compiling covariant overrides with separate compilation causes AbstractMethodError at runtime" #25659
  • Do not overwrite the supertype of non-trait super in Erasure #26081
Tuples
  • Normalize tuple types when typing patterns #25335
  • Rewrite Desugar.makePatDef to fix typing issues and be more understandable #24972
Typeclass Derivation
  • Fix #23043: spurious package conflict from non-class directories #25441
  • Also checkRefinement for Singleton mirror #24080
Typer
  • Preserve pattern, use tuple type when optimizing #25566
  • Detect InsertedApply on Apply to break synthetic apply loops, not just Select #25463
  • Fail self-recursive deferred given impl #22595
  • Use TypeComparer.constValue in TypeEval #24718
  • Add the transparent flag to java.lang.Object #25394
  • Make type arguments to default methods InferredTypeTrees #25852
Experimental: Capture Checking
  • Distribute capture set into and-type on RHS of comparison #25509
  • Fix global capabilities support in scaladoc #25563
  • Improve capture-error precision for lambdas #25583
  • Make result types of hoisted superArg defs InferredTypes #25577
  • Transform result any to fresh in Setup.transformSym #25584
  • Propagate expected types when rechecking match return expressions #25580
  • Drop assertion in toFunctionType #25628
  • Delay normalization of capture sets of vals and defs #25640
  • Fluidify explicit self types for non-CC classes #25639
  • Add missing TypeMap in Setup: FreshCapToResult #25648
  • Fixes for capture checking case class methods #25278
  • Don't add capture variables for type arguments with pure upper bounds #25316
  • Two fixes for #25251 #25488
  • Fixed #25430: Add missing CaptureChecked flag during ExpandSAMs #25443
  • Fix accessibility check for any's in static objects #25582
  • Disallow type parameters in OnlyCapability annotations #25496
  • Capture check Try #25072
  • Make Capability types have implied capture sets for new #25346
Experimental: Safe Mode
  • Enhance safe mode #25638
  • Fixes to Safe Mode Checking #25603
  • Reject scala.runtime's mutable refs in safe mode #25749
  • Tweak SafeRefs allow list for java.util classes #25783
  • Tune SafeRefs allow list for scala.util classes #25787
  • Require explicit types in assumeSafe definitions in the empty package #25795
  • Skip checkSafeAnnots for synthetic symbols #25773
  • Reject News with unsupported Java classes #25761
Experimental: Explicit Nulls
  • Recognize Nullable annotations in explicit nulls #25237

Contributors

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

According to git shortlog -sn --no-merges 3.8.3..3.8.4 these are:

   156	Solal Pirelli
    84	Martin Odersky
    45	Wojciech Mazur
    36	Som Snytt
    15	Piotr Chabelski
    13	Matt Bovel
    13	Tomasz Godzik
    12	Hamza Remmal
    12	Rikito Taniguchi
    10	Jan Chyb
     9	Oliver Bračevac
     9	noti0na1
     8	Yichen Xu
     8	dependabot[bot]
     7	Jakub Warchoł
     5	Emil Ejbyfeldt
     4	Kenji Yoshida
     4	Li Haoyi
     3	Anatolii Kmetiuk
     3	HarrisL2
     3	Lukas Rytz
     3	Sébastien Doeraene
     2	110416
     2	James You
     2	Matt Dziuban
     2	Ondřej Lhoták
     2	Patryk Zieliński
     2	Ruslan Shevchenko
     1	Aviral Garg
     1	Bbn08
     1	Eugene Flesselle
     1	Harrishan Raveendran
     1	He-Pin(kerr)
     1	Jakub Cieśluk
     1	Jeon Yoonjae
     1	Mark Hammons
     1	Natsu Kagami
     1	Oliver Marienfeld
     1	Piotr Paradziński
     1	Vadim Chelyshov
     1	philwalk
View originalPermalink
How 3.8.4 went

3.3.8-RC2

Pre-release
Added 1
  • Add logical package parsing for sourcepath
Changed 1
  • Improve the logical sources provider
Fixed 9
  • Retry backporting #23665
  • Do not overwrite the supertype of non-trait super in Erasure
  • Don't lookahead from interpolation
  • Fix infinite loop with bad section ends in TastyHeaderUnpickler
  • Context bound always has a span
  • Parse HTML properly in Scaladoc
Removed 1
  • Delete dead code in io/Path

Backported fixes

  • Backport: Retry backporting #23665 (#910)
  • Backport "Do not overwrite the supertype of non-trait super in Erasure" to 3.3 LTS (#909)
  • Backport "feature: Improve the logical sources provider" to 3.3 LTS (#908)
  • Backport "feature: Add logical package parsing for sourcepath" to 3.3 LTS (#907)
  • Backport "Don't lookahead from interpolation" to 3.3 LTS (#905)
  • Backport "Fix infinite loop with bad section ends in TastyHeaderUnpickler" to 3.3 LTS (#904)
  • Backport "Context bound always has a span" to 3.3 LTS (#903)
  • Backport "Parse HTML properly in Scaladoc" to 3.3 LTS (#902)
  • Backport "Don't pop outermost region when skipping" to 3.3 LTS (#901)
  • Backport "Fix TastyPrinter's JAR-walking logic to include subdirectories" to 3.3 LTS (#900)
  • Backport "Ensure mistakes in CI inputs are caught early" to 3.3 LTS (#899)
  • Backport "Delete dead code in io/Path" to 3.3 LTS (#898)

Contributors

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

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

    16  Tomasz Godzik
     2  Solal Pirelli
     2  Som Snytt
View originalPermalink
How 3.3.8-RC2 went

3.8.4-RC3

Pre-release
Added 4
  • Allow :help syntax for all settings
  • Add ErrorMessageID to -Winfer-union warnings
  • Warn if for with many vals and overloaded map
  • Recognize Nullable annotations in explicit nulls
Changed 5
  • Bump Scala CLI to v1.14.0
  • Bump coursier to 2.1.25-M25
  • Improve the logical sources provider
  • Make type arguments to default methods InferredTypeTrees
  • Move process parse exceptions to sys.error instead of a custom exception
Fixed 8
  • Fix false-positive pat mat unreachable case warning
  • Do not overwrite the supertype of non-trait super in Erasure
  • Fix TastyPrinter's JAR-walking logic to include subdirectories
  • Don't pop outermost region when skipping
  • Parse HTML properly in Scaladoc
  • Context bound always has a span
  • Fix infinite loop with bad section ends in TastyHeaderUnpickler
  • Don't lookahead from interpolation

Backported PRs

  • Bump Scala CLI to v1.14.0 (was v1.13.0) #26065
  • Bump coursier to 2.1.25-M25 (was 2.1.25-M24) #26057
  • Allow :help syntax for all settings #26052
  • feature: Improve the logical sources provider #26079
  • Add ErrorMessageID to -Winfer-union warnings (#25073) #25249
  • Warn if for with many vals and overloaded map #25090
  • Recognize Nullable annotations in explicit nulls #25237
  • Fix false-positive pat mat unreachable case warning #25978
  • Make type arguments to default methods InferredTypeTrees #25852
  • Do not overwrite the supertype of non-trait super in Erasure #26081
  • Move process parse exceptions to sys.error instead of a custom exception #25675
  • Ensure mistakes in CI inputs are caught early #25677
  • Fix TastyPrinter's JAR-walking logic to include subdirectories #25678
  • Don't pop outermost region when skipping #25738
  • Parse HTML properly in Scaladoc #25681
  • Context bound always has a span #25809
  • Fix infinite loop with bad section ends in TastyHeaderUnpickler #25676
  • Don't lookahead from interpolation #25834

Contributors

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

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

     8	Solal Pirelli
     4	Wojciech Mazur
     3	Som Snytt
     2	Piotr Chabelski
     1	Martin Odersky
     1	Tomasz Godzik
View originalPermalink
How 3.8.4-RC3 went

3.3.8-RC1

Pre-release
Added 4
  • Support for JDK 26
  • New @uncheckedOverride annotation for definitions that may override
  • Support for // $COVERAGE-OFF$ and // $COVERAGE-ON$ markers for local coverage control
  • Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting
Changed 2
  • Make coverage more similar to the one in Scala 2
  • Make coverage support incremental compilation
Fixed 14
  • Check protected parent constructor accesses only occurs in child constructors
  • Fix protected constructor access
  • Emit deprecation warnings when a symbol is annotated by a deprecated annotation
  • Fix Java leading annotation parsing
  • Do not allow @targetName on primary constructor
  • Cast inline call results to result type, not method type

Highlights of the release

  • Support for JDK 26 #24430
  • Multiple coverage improvement to make it on par with Scala 2 support including // $COVERAGE-OFF$ and // $COVERAGE-ON$ markers
  • New @uncheckedOverride annotation for definitions that may override #24545
  • Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting #24127
  • Numerous linting and presentation compiler improvements and fixes

Other changes and fixes

Access modifiers
  • Check protected parent constructor accesses only occurs in child constructors #25511
  • Fix protected constructor access #25523
Annotations
  • Improve ref check of constructors #24342
  • Also copy param annots at mixin #24916
  • Named arg may be deprecatedName #21588
  • Fix: emit deprecation warnings when a symbol is annotated by a deprecated annotation #23906
  • Fix #20063: Java leading annotation parsing #25503
  • Accommodate adapted Scala 2 annotation value #17516
  • Regression test for #3403 #25521
  • Fix: do not allow @targetName on primary constructor too #24682
  • Add @uncheckedOverride annotation for definitions that may override #24545
Backend
  • Chore: add regression test for #4528 #24663
  • Cast inline call results to result type, not method type #25111
  • Regression tests for #25 #25536
  • Enforce JVM UTF-8 string limits in the backend #25300
  • Do not simplify isInstanceOf if unrelated types might be subtypes at run-time #25535
  • Adjust purity of trait with lazy member #23788
  • Use Objects.equals in translating == #25314
  • Fix generic signatures for mixin forwarders conflicting type parameter names #24567
  • No mixin forwarder when ancestor is sealed #23482
  • Simplify JVM interface list emission, remove a mini-phase #25203
  • Chore: optimize lazy val with power of two #22428
Classpath
  • Skip module-info.class files during REPL tab-completion #24838
  • Fix for #22461 Empty ClassPath attribute in one or more classpath jars causes crash #22462
Coverage
  • Make coverage more similar to the one in Scala 2 #23722
  • Fix #25555: Preserve singleton precision during scoverage lifting #25556
  • Fixes #25482: Ensure package transformation properly handles language imports in InstrumentCoverage #25546
  • Bugfix: Fix issues with Scala JS and coverage #24769
  • Make coverage support incremental compilation #24773
  • Add support for local coverage on and off with // $COVERAGE-OFF$ and // $COVERAGE-ON$ #24486
  • Improvement: Try to optimize coverage phase #24925
  • Scoverage: do not instrument erased values #25298
Default parameters
  • Fix named arguments evaluation order with by-name parameters #25161
Documentation
  • Docs: Enforce links checks in the generated docs #25425
  • Improve the contributing guide #25384
  • Extend copyright into 2026 #24927
  • Update README: This is Scala 3 #25424
  • Explain implicit vs default args #25311
  • Fix some scaladoc in compiler #24166
  • Docs: fix task name for scaladoc/testOnly #23678
  • Replace internal tab char in comment in Synthesizer.scala #23691
Enums
  • Fix Java enum forwarders to pull from companion on initialization #24361
  • Make enum apply ascriptions inferred types #25562
Exports
  • Fix: look at the underlying of a TermRef for a getter #24565
Extension Methods
  • Accept using right associative parameters #24766
  • Add ctor proxies before exports #24884
  • Fix pkg obj prefix of opaque tp ext meth #21527
  • Better handling of illegal trees in extension #25368
  • Fix LiftToAnchors for higher-kinded type applications #23672
  • Prevent crash when extension not found #18830
GADTs
  • Also trust TypeTest when there is a Bind #24568
Implicits
  • Only check seen for LazyRef for TypeSizeAccumulator #20459
  • Chore: add regression test for #8581 #24666
  • Fix "Regression in zio/zio-schema for typer/implicit resolution" #24156
  • Fix implicit scope liftToAnchors for parameter lower bounds #23679
Inference
  • Tweak type for tryParameterless #24716
Initialization
  • Refine parameter adaptation logic for arrays #23591
Infrastructure
  • Tweak tests to not fail under jdk 25 #25148
  • Bump actions/upload-artifact from 6 to 7 #25423
  • Bump actions/download-artifact from 7 to 8 #25420
  • Bump VirtusLab/scala-cli-setup from 1.12.2 to 1.12.3 #25422
  • Bump coursier/cache-action from 7 to 8 #25220
  • Bump actions/upload-artifact from 5 to 6 #24758
  • Bump actions/download-artifact from 6 to 7 #24759
  • Bump actions/checkout from 5 to 6 #24517
  • Bump actions/upload-artifact from 4 to 5 #24268
  • Bump actions/download-artifact from 5 to 6 #24271
  • Bump actions/download-artifact from 4 to 5 #23711
  • Bump actions/checkout from 4 to 5 #23710
  • Chore: bump sbt to 1.11.5 #23805
  • Chore(deps): bump actions/setup-java from 4 to 5 #23812
  • Chore: Use numberOfWorkers instead #24338
  • Improvement: Additional way of defining ENABLE_BSP_ALL_PROJECTS #24122
  • Formatting: Format presentation-compiler with scalafmt #24977
Inline
  • Chore: add regression test for #22575 #25337
  • Ensure the inline match scrutinee type conforms to the recalculated type #24988
  • Make containsOuterRefsAnywhere follow aliases #25214
  • Find annotation args in inline expansion #24895
  • Chore: add regression test for #10343 #24668
  • Improve the test for creating protected method accessors for inlines #25865
  • Do not update Symbol defTrees when retyping after Inlining #23870
  • Prevent opaque types leaking from transparent inline methods #23792
  • Chore: add regression test for #8194 #24655
  • Also substitute symbols in case bindings symbols #24849
  • Inlines: decide sealing against original target, while using widened type as cast destination #25448
  • Fix inline match on blocks with multiple statements #20125
JDK
  • Skip over JEP 445 compact compilation units #23247
  • Handle MissingType during Erasure phase #24817
  • Don't generate bridge methods for inaccessible Java package-private methods #25166
  • Fix isJvmAccessible to handle nested protected Java classes #24625
  • Upgrade ASM to 9.9 for JDK 26 support #24430
  • Fix java record varargs field accessor #24172
Linting
  • Fix false unused import warning for given CanEqual in pattern matching #25231
  • Move second CheckUnused after pattern matcher #25114
  • Extension check handles hiBound of opaque type #25172
  • Unused lint ignores args to ctor of enclosing class #24768
  • Parameter name can be masked in import #24635
  • CheckUnused examines type of Apply #24465
  • Check for synthetic case methods in unused lint #24239
  • Lint avoids revisiting Inlined.call #24277
  • Register no elements for lint after inlining #24279
  • Ignore warnings when compiletime.testing is imported #24036
  • Unused lint does not rewrite suppressed warnings #24055
  • Drill through type lambda for tree symbol #23699
  • Invent given pattern name in for comprehension #23121
  • Check inline expansion for exclusion #23019
  • Unused var message mentions unread or unset #23719
  • Warn unused masking imports, remove obsolete unused options #23757
  • Distrust tree pos for patvar lint #25043
  • Match apply in PolyFunction for override #25505
  • Value discard checks inline call for exemption #25554
  • Lint enum case in outer context #24652
  • Preserve select of exported member in newExpr #24570
  • Always traverse Inlined.call in linter #24043
  • Lint function arrow intended context function #23847
  • Use enclosing enclosingInlineds for empty call #24281
  • Exclude synthetic opaque proxy from lint #24264
  • Regression test locals #25433
  • Augment regression test #24327
Match Types
  • Fix regression: Prioritize tree type over proto type when typing Binds #24175
Metaprogramming
  • Warn about encoded pkg obj names #22707
  • Bugfix: Fix possible SuspendException thrown when using macros #24174
Nullability
  • Patch to allow interop with XMLBuilder and -Yexplicit-nulls #25221
  • Add jspecify NonNull annotation to NotNullAnnots list #24487
  • Add quick fix to add .nn #23598
Opaque Types
  • Preserve insertion order when balancing And/OrType #25361
  • Treat synthetic casts as pure #25126
  • Make opaque types decomposable #24068
Overloading
  • Pretype args before skipping clause of overloaded application #23012
  • Fix varargs overload resolution with wildcard types #24669
  • Fix wildcardArgOK for mixed wildcard/concrete type args #25001
  • Regression test #16004 #24086
  • Tweak tryParameterless to use readapt #24078
  • Fix override checking for Java methods with covariant array #24408
  • Prefer non-extension to extension #24943
  • Fix class super-call invokespecial owner #25437
Parser
  • Accept primitive.class in annotations #25363
  • End of new expr never shrinks #25253
  • Permit new with trivial end #24331
  • Improve message for nested package missing braces #23816
  • Check seen for TypeParamRef in TypeSizeAccumulator #25264
  • Observe outdent also for type cases and type blocks in quotes #25519
  • Fix: import resolution for Java #25537
  • Error tree on outdent is zero extent #23796
  • Don't automatically insert OUTDENT before COMMA #25501
  • Fix: allow postfix setters under language.postfixOps #23775
  • Additional regression tests #25506
Pattern Matching
  • Emit unchecked warnings for trait patterns #24962
  • Fix false exhaustivity warning for seq match #23968
  • Call inhabited for AppliedType recursively #23964
  • Fix Ycheck crash from singleton tuple selects after specialization #25331
  • Fix false unreachable case warning #23800
  • Use upper bound of abstract types in exhaustivity checking #23909
  • Extend caching in the space engine beyond local context #23483
  • Prevent from getting children in case of non-sealed private #25359
  • Use MatchCaseUnreachable #24829
  • Preserve singleton types for final val aliases to Java enum constants #24980
  • Try expanding case class to the product of its fields #25454
  • Never widen constant type on selector type in matches #25197
Pickling
  • Fix #24456: Cleanup the info of a Bind symbol in posttyper #24490
  • Fix #24207: Cleanup the type of UnApply trees in posttyper #24259
  • Chore: add a regression test for #15786 #24658
  • Don't absolutize sources outside of the sourceroot in TASTy #25429
Positions
  • Preserve span of this during statification of trait constructors #25354
  • Compute the right span for abstract error messages #23853
  • Use a better span for an anonymous class #24640
Presentation Compiler
  • Improvement: Use method type if it's available #25641
  • Bugfix: Don't add square braces in context bounds #25798
  • Bugfix: Fix issue with empty name throwing exceptions #25752
  • Bugfix: Fix wrong type in InferredType code action #25469
  • Bugfix: Fix issues in presentation compiler when using Scala JS #25450
  • Improvement: Add fallbacks in non critical places for presentation compiler #25483
  • Fix & feat: improvements in selection ranges #25290
  • Feat(pc): add closing labels inlay hints #25178
  • Bugfix: remove stale top-level symbols between runs #25317
  • Bugfix: Fix various minor presentation compiler issues #25256
  • Fix: ignore implicit apply for signature help #25294
  • Fix incorrect XRay hint #24738
  • Presentation compiler: propagate isDebug timeout check to all tests #25068
  • Handle inlined tree in implicit parameter inlay hints #24762
  • Create extension method in infer method action #24721
  • Fix opaque types displayed as Nothing & Any in hover and signature help #24921
  • Fix negative activeParameter in signature help #24945
  • Closes #7532: Parameter hints not working for functions #23854
  • Improvement: Allow passing -explain to the presentation compiler #24740
  • Exclude XRayModeHint for synthetics #24722
  • Add unsafe RawPresentationCompiler implementation #24133
  • Bugfix: Make sure that we can query tree.source #24123
  • Improvement: additional completions for using clause #23647
  • Inlining interpolated variables #25144
  • Bugfix: inline value false-positive shadowing with lambda params #25140
  • Fix issue with pc breaking in requiredMethod on newly overloaded valueOf #23708
  • Pc: completions - do not add [] for ... derives TC@@ #23811
  • Porting XRayModeHints #23891
  • Improve symbol order in completions provided by the presentation compiler #23888
  • Bugfix: Fix issues with Scala JS and the presentation compiler #25550
  • Bugfix: Show hover on derives clause #25804
  • Improvement: improve perfomance of the presentation compiler #25769
  • Coursier dependency imports should have lexicographic ordering #21592
Quotes
  • Fix crashing for context bound type variables in quoted patterns #25286
  • Fix #25208: handle AndType(TermRef, TypeRef) in TreeUnpickler path trees #25209
  • Remove redundant mapOver in fixThisTypeModuleClassReferences #25440
  • Make typeArgs in QuotesImpl work for AnnotatedTypes #24018
  • Improve LambdaTypes handling in Quotes reflect memberType #25786
Reflection
  • Fix Select.copy in reflect API losing DerivedName for default getters #25269
  • Do not expose ClassInfo in memberType in reflect API #24922
  • Quotes reflect: Allow to return DefDef from a val symbol tree #22603
Reporting
  • Force conditional warnings when configured #25552
  • Use deprecatedOverriding message #25439
  • Fix #24711: Use dot notation for Java nested types in error messages #24919
  • Enhance WInferUnion to not warn propagated explicit union types #25280
  • Fixes #24233: Remove misleading JDK compatibility hint for TASTy errors #25171
  • More descriptive "not found" message when type/term exists with the expected term/type name #24959
  • Mention named givens in double def explainer #23833
  • Do not discard amended format when f-interpolator warns #23697
  • Use dollar-free param names in stub implementations #25646
  • Error mentions bad _1 selector #25616
  • Add ErrorMessageID to -Winfer-union warnings (#25073) #25249
  • Addendum when apply error involves default arg #21133
  • Warn on Scala 2 auto-apply if loosely nullary #24811
  • Forward reference error includes line numbers #22534
  • Use other tree for actual symbol of Assign #22869
  • Add "did you mean to use parentheses/a block" when finding a complex expression on the RHS of an infix operator #25099
  • Fix printing references to nested objects #25086
  • Add error note for type mismatch involving blocks without last expression #25181
  • Don't suggest invisible members of root imports #24999
  • Improve multi-line code message rendering #24723
  • Warn if type argument was inferred as union type #24258
  • Improve printing of strings #22945
  • Better error message: reassignment to val #24184
  • Add addendum to private val parameter variance error message #23876
  • Regression tests #24876
REPL
  • Make REPL type echo-ing use partially qualified names where made possible by imports #24850
  • Remove pipes from multi-line REPL prompts #24307
  • Fix "Colon as operator part at beginning of line in REPL" #24942
  • Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting #24127
Rewrites
  • Deduplicate patches before applying them to sources #24215
Runner
  • Fix for #22443: prevent stty from being called when not running in a terminal #22444
Scaladoc
  • Do not hide when a class or a trait extends Any #25403
  • Ability to hide snippets from the documentation #25411
  • Use <sup> tags for exponents in Scaladoc comments #25645
  • Fix duplicate member entries in Scaladoc generation #24712
  • Scaladoc Overload Method Link Fix #25156
  • Init MacroClassLoader in scaladoc #25141
  • Scaladoc: Take title from sidebar.yml into account #18997
  • [scaladoc] Allow to additional scalacOptions in Markdown code snippets #24755
  • Fetch the right kind for synthesised definitions #25405
  • Add the transparent flag to java.lang.Object #25394
SemanticDB
  • Add context parameters to SemanticDB synthetics #23381
  • Better refinement symbols in semanticDB #18604
  • Encapsulate SemanticDB package, unify symbol and document printing #25084
Testing
  • Fix line and path separators in test #23534
  • Fix: update checkfile for i23905 #24064
Testing framework
  • Reject check file match with stack trace #22389
  • Cleanup compiler test. remove unnecessary isJavaAtLeast conditions #24589
  • Bugfix: Don't run coverage tests in testCompilation without --coverage flag #24932
  • Cleaner, quieter test rig tests #24073
  • Skip tests with no sources such as .scala-build dir #25173
  • Report info logs in checked test output if enabled with -Ylog #25391
  • Bugfix: Fix flaky test in ScalaJSCompletionsSuite #25539
  • Add regression test for #23195 #24853
  • Test hover on backticked identifiers with whitespace #25142
Transform
  • Check extension method at typer #24199
  • Always encode in derived name #23478
  • Fix "Scala 3.8.3 compiling covariant overrides with separate compilation causes AbstractMethodError at runtime" #25659
  • Make Phase.run protected #25366
Tuples
  • Fix inconsistent typeSize calculation for TupleN vs recursive pair encodings #24743
  • Fix: make vals created in desugaring of n-ary lambdas non-synthetic #23896
  • Normalize tuple types when typing patterns #25335
  • Fix #24997: Avoid unnecessary CHECKCAST in untupled function parameters #25085
Typeclass Derivation
  • Fix #23043: spurious package conflict from non-class directories #25441
  • Also checkRefinement for Singleton mirror #24080
Typer
  • Use TypeComparer.constValue in TypeEval #24718
  • Fix crash in Selectable unapply with custom applyDynamic #24343
  • Prevent crash in SAM conversion with mismatched arity #23877
  • Detect InsertedApply on Apply to break synthetic apply loops, not just Select #25463
  • Typer: remove by-name lifting and replace default-getter args with fresh syms #25502
  • Refine isEffectivelyFinal to avoid no-owner crash #23675
  • Do not generate access proxies for locally defined protected defs #25056
  • Use dealiasKeepRefiningAnnots in AvoidMap #25609
  • Fix #24573: Add stricter checks for platform SAM compatibility #24624
  • Make isExactlyNothing and isExactlyAny work for And/OrTypes #24016
  • Handle assertion error in TyperState #23665
  • Fix: correctly require a ClassTag when building a multidimensional Array #23902
  • Fix crash when processing path dependent context functions using HKTs #25530
  • Regression test #24820
  • Chore: add regression test for #13889 #24657
XML
  • Use toVector for XML literal sequences #23221
Union types
  • Dealias in isSimpleThrowable check #24744
View originalPermalink
How 3.3.8-RC1 went

3.8.4-RC2

Pre-release
Added 1
  • Add logical package parsing for sourcepath
Changed 5
  • Bump Scala CLI to v1.13.0
  • Bump jackson-* to 3.1.2
  • Tweak SafeRefs allow list for java.util classes
  • Tune SafeRefs allow list for scala.util classes
  • Require explicit types in assumeSafe definitions in the empty package
Fixed 10
  • Reject scala.runtime's mutable refs in safe mode
  • Skip checkSafeAnnots for synthetic symbols
  • Reject News with unsupported Java classes
  • Improve LambdaTypes handling in Quotes reflect memberType
  • Enforce isVarPattern for pat var
  • Do not warn for package object at the top level

Backported changes

  • Revert #24431 #25703
  • Bump Scala CLI to v1.13.0 (was v1.12.5) #25810
  • Bump jackson-* to 3.1.2 (was 2.15.1) #25785
  • Reject scala.runtime's mutable refs in safe mode #25749
  • Tweak SafeRefs allow list for java.util classes #25783
  • Tune SafeRefs allow list for scala.util classes #25787
  • Require explicit types in assumeSafe definitions in the empty package #25795
  • Skip checkSafeAnnots for synthetic symbols #25773
  • Reject News with unsupported Java classes #25761
  • Improve LambdaTypes handling in Quotes reflect memberType #25786
  • Pat var must be isVarPattern #25701
  • Do not warn for package object at the top level #25826
  • Fix -Ymagic-offset-header for DoubleDefinition error and implicitNotFound errors, and remove global unmanaged cache #25706
  • Fix #25691: scalaXml Elem rendering in repl #25781
  • Fix Ctrl+C handling in the REPL #25782
  • Fix "Scala 3.8.3 compiling covariant overrides with separate compilation causes AbstractMethodError at runtime" #25659
  • Fix "Fix Ctrl-C Handling in the REPL" #25835
  • Improve the test for creating protected method accessors for inlines #25865
  • feature: Add logical package parsing for sourcepath #25446

Contributors

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

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

     5	Wojciech Mazur
     4	Martin Odersky
     4	Piotr Chabelski
     3	Matt Bovel
     2	Jan Chyb
     2	Li Haoyi
     2	Solal Pirelli
     2	noti0na1
     1	Jakub Warchoł
     1	Som Snytt
     1	Tomasz Godzik
     1	Yichen Xu
View originalPermalink
How 3.8.4-RC2 went
View all

Discussion