|
| 1 | +# Highlights of the release |
| 2 | + |
| 3 | +- Warn a standard interpolator used toString on a reference type with `-Wtostring-interpolated` [#20578](https://github.com/scala/scala3/pull/20578) |
| 4 | +- Unblock Scala 3 on Android [#22632](https://github.com/scala/scala3/pull/22632) |
| 5 | +- Implement :jar (deprecate :require) in REPL [#22343](https://github.com/scala/scala3/pull/22343) |
| 6 | +- Linting rework: In selector check, prefix of reference must match import qualifier [#20894](https://github.com/scala/scala3/pull/20894) |
| 7 | +- Add REPL flag to quit after evaluating init script [#22636](https://github.com/scala/scala3/pull/22636) |
| 8 | +- Warn if implicit default shadows given with `-Wrecurse-with-default` [#23559](https://github.com/scala/scala3/pull/23559) |
| 9 | + |
| 10 | +# Other changes and fixes |
| 11 | + |
| 12 | +## Annotations |
| 13 | + |
| 14 | +- Approximate annotated types in `wildApprox` [#22893](https://github.com/scala/scala3/pull/22893) |
| 15 | +- Fix copy of annotation on @main methods [#22582](https://github.com/scala/scala3/pull/22582) |
| 16 | + |
| 17 | +## Coverage |
| 18 | + |
| 19 | +- Make coverage more similar to the one in Scala 2 [#23722](https://github.com/scala/scala3/pull/23722) |
| 20 | + |
| 21 | +## CI |
| 22 | + |
| 23 | +- Disable Cats flaky tests [#23007](https://github.com/scala/scala3/pull/23007) |
| 24 | +- Switch releasing to Sontype Central instead of legacy Sonatype OSS [#23290](https://github.com/scala/scala3/pull/23290) |
| 25 | +- Revert dubious retry in vulpix [#21801](https://github.com/scala/scala3/pull/21801) |
| 26 | + |
| 27 | +## Developer Experience |
| 28 | + |
| 29 | +- Add support for running the `test` sub-command with the bisect script [#22796](https://github.com/scala/scala3/pull/22796) |
| 30 | + |
| 31 | +## Documentation |
| 32 | + |
| 33 | +- Improve the usage of inclusive language [#22360](https://github.com/scala/scala3/pull/22360) |
| 34 | +- Update indentation.md to fix a typo [#23505](https://github.com/scala/scala3/pull/23505) |
| 35 | + |
| 36 | +## Enums |
| 37 | + |
| 38 | +- Make hashcode of enum items stable [#23218](https://github.com/scala/scala3/pull/23218) |
| 39 | + |
| 40 | +## Erasure |
| 41 | + |
| 42 | +- Add regression test for [#23616](https://github.com/scala/scala3/issues/23616) [#23623](https://github.com/scala/scala3/pull/23623) |
| 43 | +- Disallow context function types as value-class parameters to avoid crashes [#23015](https://github.com/scala/scala3/pull/23015) |
| 44 | +- Handle type aliases in contextFunctionResultTypeAfter [#21517](https://github.com/scala/scala3/pull/21517) |
| 45 | +- Align erasure of `Array[Nothing]` and `Array[Null]` with Scala 2 [#22517](https://github.com/scala/scala3/pull/22517) |
| 46 | + |
| 47 | +## Experimental: Erased definitions |
| 48 | + |
| 49 | +- Erased fields are not nullable [#23311](https://github.com/scala/scala3/pull/23311) |
| 50 | + |
| 51 | +## Implicits |
| 52 | + |
| 53 | +- Refine implicit search fallbacks for better ClassTag handling [#23532](https://github.com/scala/scala3/pull/23532) |
| 54 | +- Try extensions for arguments with type mismatch error [#23212](https://github.com/scala/scala3/pull/23212) |
| 55 | + |
| 56 | +## Inline |
| 57 | + |
| 58 | +- Fix Symbol.info remapping in TreeTypeMap [#23432](https://github.com/scala/scala3/pull/23432) |
| 59 | + |
| 60 | +## Lambda Lift |
| 61 | + |
| 62 | +- Fix: treat static vals as enclosures in lambdalift [#22452](https://github.com/scala/scala3/pull/22452) |
| 63 | +- Fix: record calls to constructors in lambdaLift [#22487](https://github.com/scala/scala3/pull/22487) |
| 64 | + |
| 65 | +## Linting |
| 66 | + |
| 67 | +- Check OrType in interpolated toString lint [#23365](https://github.com/scala/scala3/pull/23365) |
| 68 | +- Consider setter of effectively private var [#23211](https://github.com/scala/scala3/pull/23211) |
| 69 | +- Nowarn receiver of extension taking params [#23351](https://github.com/scala/scala3/pull/23351) |
| 70 | +- Dealias when looking into imports [#22889](https://github.com/scala/scala3/pull/22889) |
| 71 | +- Revert unconditional lint of Inlined expansion [#22815](https://github.com/scala/scala3/pull/22815) |
| 72 | +- Warn unused member of anonymous class [#22729](https://github.com/scala/scala3/pull/22729) |
| 73 | +- No warning for parameter of overriding method [#22757](https://github.com/scala/scala3/pull/22757) |
| 74 | +- Lazy val def member is pattern var [#22750](https://github.com/scala/scala3/pull/22750) |
| 75 | +- Ignore params to default arg getters [#22749](https://github.com/scala/scala3/pull/22749) |
| 76 | +- Restore resolving prefixes of implicit Ident [#22751](https://github.com/scala/scala3/pull/22751) |
| 77 | +- Exclude synthetic this.m, Any.m from import lookup [#22695](https://github.com/scala/scala3/pull/22695) |
| 78 | +- Nowarn public implicit val class params [#22664](https://github.com/scala/scala3/pull/22664) |
| 79 | +- Don't warn retainedBody [#22510](https://github.com/scala/scala3/pull/22510) |
| 80 | +- Suppress spurious Suppression [#22383](https://github.com/scala/scala3/pull/22383) |
| 81 | +- Handle Typeable [#22663](https://github.com/scala/scala3/pull/22663) |
| 82 | +- CheckUnused checks span.exists before testing its parts [#22504](https://github.com/scala/scala3/pull/22504) |
| 83 | +- Process Export for unused check [#22984](https://github.com/scala/scala3/pull/22984) |
| 84 | +- Enclosing package p.q not visible as q [#23069](https://github.com/scala/scala3/pull/23069) |
| 85 | +- Remove premature caching of lookups for unused lint [#22982](https://github.com/scala/scala3/pull/22982) |
| 86 | +- Improve checking LHS of Assign [#22977](https://github.com/scala/scala3/pull/22977) |
| 87 | +- Improve Unit ascription escape hatch [#23147](https://github.com/scala/scala3/pull/23147) |
| 88 | +- Mention extension in unused param warning [#23132](https://github.com/scala/scala3/pull/23132) |
| 89 | +- Dealias for unused param check [#23256](https://github.com/scala/scala3/pull/23256) |
| 90 | +- Take inferred or explicit refinement result for unused check [#23325](https://github.com/scala/scala3/pull/23325) |
| 91 | +- Add accessible check for import usage [#23348](https://github.com/scala/scala3/pull/23348) |
| 92 | +- Use result of lambda type of implicit in CheckUnused [#23497](https://github.com/scala/scala3/pull/23497) |
| 93 | + |
| 94 | +## Match Types |
| 95 | + |
| 96 | +- Handle NoType in TypeComparer.disjointnessBoundary [#21520](https://github.com/scala/scala3/pull/21520) |
| 97 | +- Distinguish 0.0 and -0.0 in ConstantType match types [#23265](https://github.com/scala/scala3/pull/23265) |
| 98 | + |
| 99 | +## Metaprogramming |
| 100 | + |
| 101 | +- Add a check for correct Array shape in quotes.reflect.ClassOfConstant [#22033](https://github.com/scala/scala3/pull/22033) |
| 102 | + |
| 103 | +## Opaque Types |
| 104 | + |
| 105 | +- Fix stack overflow errors when generating opaque type proxies [#22479](https://github.com/scala/scala3/pull/22479) |
| 106 | + |
| 107 | +## Optional Braces |
| 108 | + |
| 109 | +- Correctly detect colon lambda eol indent for optional brace of argument [#22477](https://github.com/scala/scala3/pull/22477) |
| 110 | + |
| 111 | +## Overloading |
| 112 | + |
| 113 | +- Fail compilation if multiple conflicting top-level private defs/vals are in the same package [#22759](https://github.com/scala/scala3/pull/22759) |
| 114 | + |
| 115 | +## Parser |
| 116 | + |
| 117 | +- Allow observing an indent after conditional [#22611](https://github.com/scala/scala3/pull/22611) |
| 118 | +- No outdent at eof [#22435](https://github.com/scala/scala3/pull/22435) |
| 119 | +- Fix annotations not expected in the middle of an array type by java parser [#22391](https://github.com/scala/scala3/pull/22391) |
| 120 | +- Fix incorrect warning with -no-indent [#23216](https://github.com/scala/scala3/pull/23216) |
| 121 | + |
| 122 | +## Pattern Matching |
| 123 | + |
| 124 | +- Fix issue in lazy symbol completion or bug in nested classfile parser [#23634](https://github.com/scala/scala3/pull/23634) |
| 125 | +- Fix existing GADT constraints with introduced pattern-bound symbols [#22928](https://github.com/scala/scala3/pull/22928) |
| 126 | +- Avoid crash in uninhab check in Space [#22601](https://github.com/scala/scala3/pull/22601) |
| 127 | + |
| 128 | +## Pickling |
| 129 | + |
| 130 | +- Try to handle SkolemTypes in SingletonTypeTree during pickling [#23236](https://github.com/scala/scala3/pull/23236) |
| 131 | + |
| 132 | +## Presentation Compiler |
| 133 | + |
| 134 | +- Compare span points in pathTo to determine best span [#23581](https://github.com/scala/scala3/pull/23581) |
| 135 | +- Fix: Fix extracting refinements from intersection types in dynamic select hovers [#23640](https://github.com/scala/scala3/pull/23640) |
| 136 | +- Completions for requests just before string [#22894](https://github.com/scala/scala3/pull/22894) |
| 137 | +- Add enum type param support in sourceSymbol [#18603](https://github.com/scala/scala3/pull/18603) |
| 138 | +- Use untpd.Tree instead of tpd.Tree for SelectionRangeProvider [#22702](https://github.com/scala/scala3/pull/22702) |
| 139 | +- Fix: handle multiple params lists in for infer type [#23197](https://github.com/scala/scala3/pull/23197) |
| 140 | +- Fix completion mode filtering + optimize scopeCompletions [#23172](https://github.com/scala/scala3/pull/23172) |
| 141 | +- Add selection ranges for more names [#23257](https://github.com/scala/scala3/pull/23257) |
| 142 | +- Add inlay hints for by-name parameters [#23283](https://github.com/scala/scala3/pull/23283) |
| 143 | +- Add jpath to VirtualFile (for pc) [#23203](https://github.com/scala/scala3/pull/23203) |
| 144 | +- Add X-Ray Inlay Hints [#23891](https://github.com/scala/scala3/pull/23891) |
| 145 | +- Add using to completions when applicable [#23647](https://github.com/scala/scala3/pull/23647) |
| 146 | +- Do not add \[\] after `derives` [#23811](https://github.com/scala/scala3/pull/23811) |
| 147 | + |
| 148 | +## Quotes |
| 149 | + |
| 150 | +- Fix issue with static `this` references erroring in quoted code [#22618](https://github.com/scala/scala3/pull/22618) |
| 151 | +- Skip splice level checking for <refinement> symbols [#22782](https://github.com/scala/scala3/pull/22782) |
| 152 | +- Fix stale top level synthetic package object being used in later runs [#23464](https://github.com/scala/scala3/pull/23464) |
| 153 | + |
| 154 | +## REPL |
| 155 | + |
| 156 | +- REPL: JLine 3.29.0 (was 3.27.1) [#22679](https://github.com/scala/scala3/pull/22679) |
| 157 | +- REPL: emit warning for the `:sh` command [#22694](https://github.com/scala/scala3/pull/22694) |
| 158 | + |
| 159 | +## Reflection |
| 160 | + |
| 161 | +- Fix regression: do not approximate prefixes when using memberType in reflect API [#22448](https://github.com/scala/scala3/pull/22448) |
| 162 | +- Forbid `StringConstant(null)` [#23064](https://github.com/scala/scala3/pull/23064) |
| 163 | +- Quotes reflect: sort the typeMembers output list and filter out non-members [#22876](https://github.com/scala/scala3/pull/22876) |
| 164 | + |
| 165 | +## Reporting |
| 166 | + |
| 167 | +- Register nowarn when inlining [#22682](https://github.com/scala/scala3/pull/22682) |
| 168 | +- Filter help renders box border [#22434](https://github.com/scala/scala3/pull/22434) |
| 169 | +- Fix incorrect warning on type ascription for backquoted identifiers [#23088](https://github.com/scala/scala3/pull/23088) |
| 170 | +- Add an explainer to the DoubleDefinition error [#23470](https://github.com/scala/scala3/pull/23470) |
| 171 | + |
| 172 | +## Scaladoc |
| 173 | + |
| 174 | +- Encode path of class [#23503](https://github.com/scala/scala3/pull/23503) |
| 175 | + |
| 176 | +## Settings |
| 177 | + |
| 178 | +- Chore: filter allowed source versions by import and by settings [#23215](https://github.com/scala/scala3/pull/23215) |
| 179 | + |
| 180 | +## Transform |
| 181 | + |
| 182 | +- Check only stable qual for import prefix [#22633](https://github.com/scala/scala3/pull/22633) |
| 183 | +- Warn trivial recursion with module prefix [#23278](https://github.com/scala/scala3/pull/23278) |
| 184 | + |
| 185 | +## Tuples |
| 186 | + |
| 187 | +- Normalize tuple types in var args seq literals and classOf instances [#23465](https://github.com/scala/scala3/pull/23465) |
| 188 | + |
| 189 | +## Typer |
| 190 | + |
| 191 | +- Generalize "Don't approximate a type using Nothing as prefix" [#23628](https://github.com/scala/scala3/pull/23628) |
| 192 | +- Don't approximate a type using `Nothing` as prefix [#23531](https://github.com/scala/scala3/pull/23531) |
| 193 | +- Tighten condition to preserve denotation in IntegrateMap [#23060](https://github.com/scala/scala3/pull/23060) |
| 194 | +- Disallow context bounds in type lambdas [#22659](https://github.com/scala/scala3/pull/22659) |
| 195 | +- Revert the PolyType case in #21744 [#22820](https://github.com/scala/scala3/pull/22820) |
| 196 | +- Fix isGenericArrayElement for higher-kinded types [#22938](https://github.com/scala/scala3/pull/22938) |
| 197 | +- Revert lambda cleanup [#22697](https://github.com/scala/scala3/pull/22697) |
| 198 | +- Constructor companion gets privateWithin [#22627](https://github.com/scala/scala3/pull/22627) |
| 199 | +- Add regression test for #22076 [#22602](https://github.com/scala/scala3/pull/22602) |
| 200 | +- Constructor proxy is restricted if class is protected [#22563](https://github.com/scala/scala3/pull/22563) |
| 201 | +- Check if a prefix is valid before selecting from a type [#22368](https://github.com/scala/scala3/pull/22368) |
| 202 | +- Preserve hard unions in widenSingletons [#22369](https://github.com/scala/scala3/pull/22369) |
| 203 | +- Revert recent changes to opaque type proxy generation [#23059](https://github.com/scala/scala3/pull/23059) |
| 204 | +- Compare TypeVar and TypeParamRef in mergeRefinedOrApplied [#23045](https://github.com/scala/scala3/pull/23045) |
| 205 | +- Only keep denotation for methods in IntegrateMap [#23226](https://github.com/scala/scala3/pull/23226) |
| 206 | +- Tighten condition when to do SAM type conversion [#23246](https://github.com/scala/scala3/pull/23246) |
| 207 | +- Revert "Make overload pruning based on result types less aggressive (#21744)" in main [#23331](https://github.com/scala/scala3/pull/23331) |
| 208 | +- Fix #22922: Add TypeParamRef handling in isSingletonBounded [#23501](https://github.com/scala/scala3/pull/23501) |
| 209 | +- Fix this references everywhere in dependent function types [#23514](https://github.com/scala/scala3/pull/23514) |
| 210 | +- More careful ClassTag instantiation [#23659](https://github.com/scala/scala3/pull/23659) |
| 211 | +- Use more context for implicit search only if no default argument [#23664](https://github.com/scala/scala3/pull/23664) |
| 212 | + |
| 213 | +## JDK |
| 214 | + |
| 215 | +- Check path of module prefix for tailrec [#23491](https://github.com/scala/scala3/pull/23491) |
| 216 | + |
| 217 | + |
| 218 | +# Contributors |
| 219 | + |
| 220 | +Thank you to all the contributors who made this release possible 🎉 |
| 221 | + |
| 222 | +According to `git shortlog -sn --no-merges 3.3.6..3.3.7` these are: |
| 223 | + |
| 224 | +``` |
| 225 | + 164 Tomasz Godzik |
| 226 | + 81 Som Snytt |
| 227 | + 27 Jan Chyb |
| 228 | + 25 Matt Bovel |
| 229 | + 23 aherlihy |
| 230 | + 20 kasiaMarek |
| 231 | + 15 Martin Odersky |
| 232 | + 13 Hamza Remmal |
| 233 | + 11 Dale Wijnand |
| 234 | + 11 noti0na1 |
| 235 | + 10 Kacper Korban |
| 236 | + 10 Wojciech Mazur |
| 237 | + 8 Guillaume Martres |
| 238 | + 7 Zieliński Patryk |
| 239 | + 5 Jędrzej Rochala |
| 240 | + 5 Quentin Bernet |
| 241 | + 5 Seth Tisue |
| 242 | + 4 Alexander |
| 243 | + 4 Joel Wilsson |
| 244 | + 4 Katarzyna Marek |
| 245 | + 4 Oliver Bračevac |
| 246 | + 3 Natsu Kagami |
| 247 | + 3 Yoonjae Jeon |
| 248 | + 3 anna herlihy |
| 249 | + 2 Daisy Li |
| 250 | + 2 Dolphin von Chips |
| 251 | + 2 Mikołaj Fornal |
| 252 | + 2 Sébastien Doeraene |
| 253 | + 2 Vadim Chelyshov |
| 254 | + 2 rochala |
| 255 | + 1 Alec Theriault |
| 256 | + 1 Aleksey Troitskiy |
| 257 | + 1 Alex1005a |
| 258 | + 1 Daniel Thoma |
| 259 | + 1 Felix Herrmann |
| 260 | + 1 HarrisL2 |
| 261 | + 1 Jan |
| 262 | + 1 Jan-Pieter van den Heuvel |
| 263 | + 1 Jentsch |
| 264 | + 1 João Ferreira |
| 265 | + 1 Lukas Rytz |
| 266 | + 1 Marc GRIS |
| 267 | + 1 MatthieuSLR9 |
| 268 | + 1 Nikita Glushchenko |
| 269 | + 1 Niklas Fiekas |
| 270 | + 1 Patryk Zieliński |
| 271 | + 1 Piotr Chabelski |
| 272 | + 1 Przemysław Sajnóg |
| 273 | + 1 Rocco Mathijn Andela |
| 274 | + 1 Tomas Mikula |
| 275 | + 1 Yichen Xu |
| 276 | + 1 bingchen-li |
| 277 | + 1 fan-tom |
| 278 | + 1 katrinafyi |
| 279 | + 1 kijuky |
| 280 | + 1 philippus |
| 281 | + 1 philwalk |
| 282 | + 1 vder |
| 283 | +``` |
0 commit comments