github scala/scala3 3.5.0

latest releases: 3.3.4-RC3, 3.3.4-RC2, 3.4.3...
25 days ago

Highlights of the release

  • Bundle scala-cli in scala command #20351
  • Introduce Best Effort compilation options #17582
  • Add support for Pipelined builds #18880
  • Add support for var in refinements #19982
  • Implement SIP-42 - Support for binary integer literals #19405

Note

Installation of a new Scala runner using Coursier requires it to be updated or reinstalled to Coursier 2.1.10 or above. Earlier versions did not support installing native packages, defaulted to the old runner JAR.

Other changes and fixes

Backend

  • Fix Closure span assignment in makeClosure #15841

Default parameters

  • Fix default args lookup for given classes #20256
  • Fix implicit search failure reporting #20261

Derivation

  • Fix infinite loop in Mirror synthesis of unreducible match type #20133

Desugaring

  • Add explanation to checkCaseClassInheritanceInvariant error msg #20141

Exports

  • Add annotations in parameters for exports #20140
  • Fix isAliasType #20195

Implicits

  • Fix implicitNotFound message for type aliases #19343
  • Normalize types before collecting parts determining implicit scope #20077
  • Better error diagnostics under -explain-cyclic #20251
  • Update unreducible match types error reporting #19954
  • Improve ConstraintHandling of SkolemTypes #20175

Incremental Compilation

  • Retain default parameters with export #20167

Inline

  • Fix by-name parameter in beta-reduction #20096
  • Add warning for anonymous inline classes (#16723) #20291
  • Avoid conversion of Unit type into () term #20295
  • Type desugared transparent inline def unapply call in the correct mode #20108
  • Regression: fix compilation performance on Windows #20193
  • Fix inline match on blocks with multiple statements #20125
  • Inline unapplys in the inlining phase #19382
  • Fix outerSelect in Inliner #20313

Linting

  • Fix #20146: attach the original name if there is an import selection for an indent #20163
  • Add regression test for issue 18632 #20308

Match Types

  • Make aliases of MatchAliases normal TypeAliases #19871
  • Fix #19746: Do not follow param term refs in isConcrete. #20015
  • Do match type reduction atPhaseNoLater than ElimOpaque #20017
  • Do not flag match types as Deferred and amend #20077 #20147
  • Always use baseType when constraining patternTp with scrutineeTp #20032
  • Use MirrorSource.reduce result for companionPath #20207
  • Regression: Fix match type extraction of a MatchAlias #20111
  • Revert "Approximate MatchTypes with lub of case bodies, if non-recursive" in 3.5.0 #21266

Polyfunctions

  • Discard poly-functions when trying to resolve overloading #20181

Presentation Compiler

  • Stabilise returned completions by improving deduplication + extra completions for constructors #19976
  • Fix active param index for empty param lists #20142
  • Delias type members in hover #20173
  • Interactive: handle context bounds in extension construct workaround #20201
  • Fix: prefer non-export definition locations #20252
  • Don't show enum completions in new keyword context #20304
  • Chore: Backport changes for presentation compiler #20345
  • Add custom matchers for completions (fuzzy search for presentation compiler) #19850

Quotes

  • Fix TermRef prefixes not having their type healed #20102
  • Improve reporting in staging about the possible use of an incorrect class loader #20137
  • Introduce MethodTypeKind to quotes reflection API #20249
  • Add quote ASTs to TASTy #20165

Reflection

  • Allow to beta reduce curried function applications in quotes reflect #18121
  • Set the inlining phase in the Context used for checking macro trees #20087
  • Add Symbol.isSuperAccessor to reflection API #13388
  • Stabilize reflect SymbolMethods.isSuperAccessor #20198

Repl

  • Fix validity period of derived SingleDenotations #19983
  • Fix #18383: Never consider top-level imports as unused in the repl. #20310

Reporting

  • Warn if extension receiver already has member #17543
  • Deprecation of case class elements #17911
  • Support src filter in -WConf (Closes #17635) #18783
  • Add note about type mismatch in automatically inserted apply argument #20023
  • Make error reporting resilient to exception thrown while reporting #20158
  • Remove duplicate comma from Matchable selector warning #20159
  • Generalize warnings for top-level calls to Any or AnyRef methods #20312
  • Make CheckUnused not slow. #20321
  • Bring back ambiguity filter when we report an implicit not found error #20368
  • Treat 3.5-migration the same as 3.5 for a warning about implicit priority change #20436
  • Priority warning fix alternative #20487
  • Use final result type to check selector bound #20989
  • Refine implicit priority change warnings #21045
  • Backport "Fix healAmbiguous to compareAlternatives with disambiguate = true" to 3.5.0 #21344

Rewrites

  • Patch indentation when removing braces (and other bug fixes in -indent -rewrite) #17522
  • Extra check to avoid converting block expressions on the rhs of an in… #20043

Scaladoc

  • Fix scaladoc crash on Windows - illegal path character #20311
  • Scaladoc: improve refined function types rendering #20333
  • Relax font-weight reset #20348

Scala JS

Settings

  • Lift Scala Settings from experimental to stabilized #20199

Tooling

  • Detect macro dependencies that are missing from the classloader #20139
  • Write pipelined tasty in parallel. #20153
  • ConsoleReporter sends INFO to stdout #20328
  • Bundle scala-cli in scala command #20351
  • Adapt the workflow to release on SDKMAN! #20535
  • Adapt the release workflow to SIP-46 #20565
  • Release .zip instead of .tar.gz for windows in sdkman #20630
  • SIP 46 - read classpath from file, remove lib directory in distribution #20631
    .gz for windows in sdkman #20630
  • Bump scala-cli to 1.4.0 #20859
  • Add --skip-cli-updates by default to the scala command #20900
  • Use pathing jars in cli commands #21121
  • expand classpath of pathing jars in scala_legacy command #21160
  • emit generatedNonLocalClass in backend when callback is not enabled #21186

Transform

  • Fix overloaded default methods test in RefChecks #20218
  • Fix handling of AppliedType aliases in outerPrefix #20190
  • Elide unit binding when beta-reducing #20085

Typer

  • Reduce projections of type aliases with class type prefixes #19931
  • Re-lub also hard union types in simplify #20027
  • Fix #19789: Merge same TypeParamRef in orDominator #20090
  • Allow SAM types to contain match alias refinements #20092
  • Don't dealias when deciding which arguments to defer #20116
  • Avoid the TypeVar.inst trap #20160
  • Avoid crash when superType does not exist after erasure #20188
  • Refine overloading and implicit disambiguation #20084
  • Refactor constant folding of applications #20099
  • Rollback constraints if isSameType failed second direction #20109
  • Suppress "extension method will never be selected" for overrides #20164
  • Allow SAM types to contain multiple refinements #20172
  • Normalize when verifying if TypeTestCasts are unchecked #20258
  • Avoid stacked thisCall contexts #20488
  • fix issue 20901: etaCollapse context bound type #20910
  • Fix symbol reference retrivial of scala.caps.Caps #20493

Experimental Changes

  • Named tuples second implementation #19174
  • Change rules for given prioritization #19300
  • Enable experimental mode when experimental feature is imported #19807
  • Add message parameter to @experimental annotation #19935
  • Implement match type amendment: extractors follow aliases and singletons #20161
  • Avoid forcing whole package when using -experimental #20409

Capture Checking

  • Carry and check universal capability from parents correctly #20004
  • Make parameter types of context functions inferred type trees #20155
  • Handle reach capabilities correctly in depedent functions #20203
  • Fix the visibility check in markFree #20221
  • Make inline proxy vals have inferred types #20241
  • CC: Give more info when context function parameters leak #20244
  • Plug soundness hole for reach capabilities #20051
  • Tighten the screws a bit more to seal the soundness hole for reach capabilities #20056
  • Drop retains annotations in inferred type trees #20057
  • Allow @retains arguments to be context functions #20232
  • Fix conversion of this.fld capture refs under separate compilation #20238

Erased definitions

  • Fix "Compiler crash when using CanThrow" #20210
  • Only allow erased parameters in erased definitions #19686

Initialization

  • Deprecate StandardPlugin.init in favor of initialize method taking implicit Context #20330
  • Fix missing changesParents in PostTyper #20062
  • Special case for next field of colon colon in global init checker #20281
  • Extend whitelist in global initialization checker #20290

Macro Annotations

  • Allow macro annotation to transform companion #19677
  • Remove experimental MainAnnotation/newMain (replaced with MacroAnnotation) #19937

Nullability

  • Add flexible types to deal with Java-defined signatures under -Yexplicit-nulls #18112
  • Fix #20287: Add flexible types to Quotes library #20293
  • Add fromNullable to Predef for explicit nulls #20222

Contributors

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

According to git shortlog -sn --no-merges 3.4.2..3.5.0 these are:

   153	Martin Odersky
    53	Eugene Flesselle
    41	Jamie Thompson
    29	Wojciech Mazur
    25	Nicolas Stucki
    22	Sébastien Doeraene
    18	noti0na1
    16	Matt Bovel
    13	Guillaume Martres
    11	Paweł Marks
    10	Hamza REMMAL
     9	Yichen Xu
     8	Jan Chyb
     7	Hamza Remmal
     7	Som Snytt
     6	Jędrzej Rochala
     5	Fengyun Liu
     5	dependabot[bot]
     3	Mikołaj Fornal
     2	Aviv Keller
     2	EnzeXing
     1	Chris Pado
     1	Filip Zybała
     1	Georgi Krastev
     1	Jisoo Park
     1	Katarzyna Marek
     1	Lucas Nouguier
     1	Lucy Martin
     1	Ola Flisbäck
     1	Pascal Weisenburger
     1	Quentin Bernet
     1	Raphael Jolly
     1	Seth Tisue
     1	Stephane Bersier
     1	Tomasz Godzik
     1	Yoonjae Jeon
     1	aherlihy
     1	rochala
     1	willerf

Don't miss a new scala3 release

NewReleases is sending notifications on new releases.