Highlights of the release
- Warn a standard interpolator used toString on a reference type with
-Wtostring-interpolated
#20578 - Unblock Scala 3 on Android #22632
- Implement :jar (deprecate :require) in REPL #22343
- Linting rework: In selector check, prefix of reference must match import qualifier #20894
- Add REPL flag to quit after evaluating init script #22636
- Warn if implicit default shadows given with
-Wrecurse-with-default
#23559
Other changes and fixes
Annotations
Coverage
- Make coverage more similar to the one in Scala 2 #23722
CI
- Disable Cats flaky tests #23007
- Switch releasing to Sontype Central instead of legacy Sonatype OSS #23290
- Revert dubious retry in vulpix #21801
Developer Experience
- Add support for running the
test
sub-command with the bisect script #22796
Documentation
Enums
- Make hashcode of enum items stable #23218
Erasure
- Add regression test for #23616 #23623
- Disallow context function types as value-class parameters to avoid crashes #23015
- Handle type aliases in contextFunctionResultTypeAfter #21517
- Align erasure of
Array[Nothing]
andArray[Null]
with Scala 2 #22517
Experimental: Erased definitions
- Erased fields are not nullable #23311
Implicits
- Refine implicit search fallbacks for better ClassTag handling #23532
- Try extensions for arguments with type mismatch error #23212
Inline
- Fix Symbol.info remapping in TreeTypeMap #23432
Lambda Lift
- Fix: treat static vals as enclosures in lambdalift #22452
- Fix: record calls to constructors in lambdaLift #22487
Linting
- Check OrType in interpolated toString lint #23365
- Consider setter of effectively private var #23211
- Nowarn receiver of extension taking params #23351
- Dealias when looking into imports #22889
- Revert unconditional lint of Inlined expansion #22815
- Warn unused member of anonymous class #22729
- No warning for parameter of overriding method #22757
- Lazy val def member is pattern var #22750
- Ignore params to default arg getters #22749
- Restore resolving prefixes of implicit Ident #22751
- Exclude synthetic this.m, Any.m from import lookup #22695
- Nowarn public implicit val class params #22664
- Don't warn retainedBody #22510
- Suppress spurious Suppression #22383
- Handle Typeable #22663
- CheckUnused checks span.exists before testing its parts #22504
- Process Export for unused check #22984
- Enclosing package p.q not visible as q #23069
- Remove premature caching of lookups for unused lint #22982
- Improve checking LHS of Assign #22977
- Improve Unit ascription escape hatch #23147
- Mention extension in unused param warning #23132
- Dealias for unused param check #23256
- Take inferred or explicit refinement result for unused check #23325
- Add accessible check for import usage #23348
- Use result of lambda type of implicit in CheckUnused #23497
Match Types
- Handle NoType in TypeComparer.disjointnessBoundary #21520
- Distinguish 0.0 and -0.0 in ConstantType match types #23265
Metaprogramming
- Add a check for correct Array shape in quotes.reflect.ClassOfConstant #22033
Opaque Types
- Fix stack overflow errors when generating opaque type proxies #22479
Optional Braces
- Correctly detect colon lambda eol indent for optional brace of argument #22477
Overloading
- Fail compilation if multiple conflicting top-level private defs/vals are in the same package #22759
Parser
- Allow observing an indent after conditional #22611
- No outdent at eof #22435
- Fix annotations not expected in the middle of an array type by java parser #22391
- Fix incorrect warning with -no-indent #23216
Pattern Matching
- Fix issue in lazy symbol completion or bug in nested classfile parser #23634
- Fix existing GADT constraints with introduced pattern-bound symbols #22928
- Avoid crash in uninhab check in Space #22601
Pickling
- Try to handle SkolemTypes in SingletonTypeTree during pickling #23236
Presentation Compiler
- Compare span points in pathTo to determine best span #23581
- Fix: Fix extracting refinements from intersection types in dynamic select hovers #23640
- Completions for requests just before string #22894
- Add enum type param support in sourceSymbol #18603
- Use untpd.Tree instead of tpd.Tree for SelectionRangeProvider #22702
- Fix: handle multiple params lists in for infer type #23197
- Fix completion mode filtering + optimize scopeCompletions #23172
- Add selection ranges for more names #23257
- Add inlay hints for by-name parameters #23283
- Add jpath to VirtualFile (for pc) #23203
- Add X-Ray Inlay Hints #23891
- Add using to completions when applicable #23647
- Do not add [] after
derives
#23811
Quotes
- Fix issue with static
this
references erroring in quoted code #22618 - Skip splice level checking for symbols #22782
- Fix stale top level synthetic package object being used in later runs #23464
REPL
Reflection
- Fix regression: do not approximate prefixes when using memberType in reflect API #22448
- Forbid
StringConstant(null)
#23064 - Quotes reflect: sort the typeMembers output list and filter out non-members #22876
Reporting
- Register nowarn when inlining #22682
- Filter help renders box border #22434
- Fix incorrect warning on type ascription for backquoted identifiers #23088
- Add an explainer to the DoubleDefinition error #23470
Scaladoc
- Encode path of class #23503
Settings
- Chore: filter allowed source versions by import and by settings #23215
Transform
Tuples
- Normalize tuple types in var args seq literals and classOf instances #23465
Typer
- Generalize "Don't approximate a type using Nothing as prefix" #23628
- Don't approximate a type using
Nothing
as prefix #23531 - Tighten condition to preserve denotation in IntegrateMap #23060
- Disallow context bounds in type lambdas #22659
- Revert the PolyType case in #21744 #22820
- Fix isGenericArrayElement for higher-kinded types #22938
- Revert lambda cleanup #22697
- Constructor companion gets privateWithin #22627
- Add regression test for #22076 #22602
- Constructor proxy is restricted if class is protected #22563
- Check if a prefix is valid before selecting from a type #22368
- Preserve hard unions in widenSingletons #22369
- Revert recent changes to opaque type proxy generation #23059
- Compare TypeVar and TypeParamRef in mergeRefinedOrApplied #23045
- Only keep denotation for methods in IntegrateMap #23226
- Tighten condition when to do SAM type conversion #23246
- Revert "Make overload pruning based on result types less aggressive (#21744)" in main #23331
- Fix #22922: Add TypeParamRef handling in isSingletonBounded #23501
- Fix this references everywhere in dependent function types #23514
- More careful ClassTag instantiation #23659
- Use more context for implicit search only if no default argument #23664
JDK
- Check path of module prefix for tailrec #23491
Contributors
Thank you to all the contributors who made this release possible 🎉
According to git shortlog -sn --no-merges 3.3.6..3.3.7
these are:
164 Tomasz Godzik
81 Som Snytt
27 Jan Chyb
25 Matt Bovel
23 aherlihy
20 kasiaMarek
15 Martin Odersky
13 Hamza Remmal
11 Dale Wijnand
11 noti0na1
10 Kacper Korban
10 Wojciech Mazur
8 Guillaume Martres
7 Zieliński Patryk
5 Jędrzej Rochala
5 Quentin Bernet
5 Seth Tisue
4 Alexander
4 Joel Wilsson
4 Katarzyna Marek
4 Oliver Bračevac
3 Natsu Kagami
3 Yoonjae Jeon
3 anna herlihy
2 Daisy Li
2 Dolphin von Chips
2 Mikołaj Fornal
2 Sébastien Doeraene
2 Vadim Chelyshov
2 rochala
1 Alec Theriault
1 Aleksey Troitskiy
1 Alex1005a
1 Daniel Thoma
1 Felix Herrmann
1 HarrisL2
1 Jan
1 Jan-Pieter van den Heuvel
1 Jentsch
1 João Ferreira
1 Lukas Rytz
1 Marc GRIS
1 MatthieuSLR9
1 Nikita Glushchenko
1 Niklas Fiekas
1 Patryk Zieliński
1 Piotr Chabelski
1 Przemysław Sajnóg
1 Rocco Mathijn Andela
1 Tomas Mikula
1 Yichen Xu
1 bingchen-li
1 fan-tom
1 katrinafyi
1 kijuky
1 philippus
1 philwalk
1 vder