Highlights of the release
- Bump Scala CLI to 1.12.5 and Coursier to 2.1.25-M24 #25592
Other changes and fixes
Annotations
- Also copy param annots at mixin #24916
- Named arg may be deprecatedName #21588
- Use
dealiasKeepRefiningAnnotsinAvoidMap#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.equalsin translating==#25314
Compiler Phases
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
IsIterablescaladoc #24692
Enums
- Make enum apply ascriptions inferred types #25562
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
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
- Enhance constant-folding during inlining #24431
- 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
Linting
- Match apply in PolyFunction for override #25505
- Value discard checks inline call for exemption #25554
- Introduce error message ids for shadow warnings #25101
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.classin 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
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
Positions
- Preserve span of
thisduring 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
Quotes
- Fix crashing for context bound type variables in quoted patterns #25286
- Remove redundant mapOver in fixThisTypeModuleClassReferences #25440
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
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
Rewrites
- Fix incorrect rewrite of
expr _when expr has a function type #25457
Runner
Scala.js
Scaladoc
- Use
<sup>tags for exponents in Scaladoc comments #25645 - Do not hide when a
classor atraitextendsAny#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
SemanticDB
- Encapsulate SemanticDB package, unify symbol and document printing #25084
- Better refinement symbols in semanticDB #18604
Standard Library
Syntax
- Check protected parent constructor accesses only occurs in child constructors #25511
- Fix protected constructor access #25523
Tooling
- Fix MSI installer reporting wrong Scala version on Windows #25591
Transform
- Always encode in derived name #23478
Tuples
- Normalize tuple types when typing patterns #25335
- Rewrite
Desugar.makePatDefto 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
InsertedApplyonApplyto break synthetic apply loops, not justSelect#25463 - Fail self-recursive deferred given impl #22595
- Use TypeComparer.constValue in TypeEval #24718
- Add the
transparentflag tojava.lang.Object#25394
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-RC1 these are:
87 Solal Pirelli
67 Martin Odersky
31 Som Snytt
12 Hamza Remmal
10 Matt Bovel
9 Oliver Bračevac
9 Wojciech Mazur
8 Jan Chyb
8 Piotr Chabelski
8 Rikito Taniguchi
8 Tomasz Godzik
8 dependabot[bot]
7 Yichen Xu
7 noti0na1
6 Jakub Warchoł
5 Emil Ejbyfeldt
4 Kenji Yoshida
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 Li Haoyi
1 Mark Hammons
1 Natsu Kagami
1 Oliver Marienfeld
1 Piotr Paradziński
1 Vadim Chelyshov
1 philwalk