|
| 1 | +# Highlights of the release |
| 2 | + |
| 3 | +- Add `@scala.annotation.internal.preview` annotation and `-preview` flag. [#22317](https://github.com/scala/scala3/pull/22317) |
| 4 | +- Make SIP-52 `@publicInBinary` a stable feature in 3.7 [#22591](https://github.com/scala/scala3/pull/22591) |
| 5 | +- Make SIP-58 - `Named Tuples` a stable feature in 3.7 [#22753](https://github.com/scala/scala3/pull/22753) |
| 6 | +- Make SIP-62 - `Better Fors` a preview feature in 3.7 [#22776](https://github.com/scala/scala3/pull/22776) |
| 7 | +- Implement SIP-61 `@unroll` annotation as experimental [#21693](https://github.com/scala/scala3/pull/21693) |
| 8 | +- Upgrade Scala 2 Standard Library to 2.13.16 [#22386](https://github.com/scala/scala3/pull/22386) |
| 9 | +- Upgrade Scala.js to 1.18.1. [#22397](https://github.com/scala/scala3/pull/22397) |
| 10 | +- Upgrade Scala CLI to 1.7.0 [#22735](https://github.com/scala/scala3/pull/22735) |
| 11 | +- Expression Compiler is now part of Scala 3 compiler [#22597](https://github.com/scala/scala3/pull/22597) |
| 12 | +- Quotes API: Added `apply` methods to import selectors [#22457](https://github.com/scala/scala3/pull/22457) |
| 13 | +- Quotes API: Implement experimental `summonIgnoring` method [#22417](https://github.com/scala/scala3/pull/22417) |
| 14 | +- Quotes API: Add class parameters, flags, and privateWithin and annotations to experimental `newClass` methods [#21880](https://github.com/scala/scala3/pull/21880) |
| 15 | +- Experimental: Capture Calculus - Inferring `tracked` modifier [#21628](https://github.com/scala/scala3/pull/21628) |
| 16 | +- Presentation Compiler: Show inferred type on holes in hover [#21423](https://github.com/scala/scala3/pull/21423) |
| 17 | +- JVM Backend: Fix #15736 blocking Scala 3 on Android [#22632](https://github.com/scala/scala3/pull/22632) |
| 18 | +- REPL: add flag to quit after evaluating init script [#22636](https://github.com/scala/scala3/pull/22636) |
| 19 | +- REPL: implement :jar (deprecate :require) [#22343](https://github.com/scala/scala3/pull/22343) |
| 20 | +- Linting: Improvements to -Wunused and -Wconf [#20894](https://github.com/scala/scala3/pull/20894) |
| 21 | +- Implicit parameters warn at call site without `using` keyword [#22441](https://github.com/scala/scala3/pull/22441) |
| 22 | +- Minimal support for dependent case classes [#21698](https://github.com/scala/scala3/pull/21698) |
| 23 | + |
| 24 | +# Other changes and fixes |
| 25 | + |
| 26 | +## Annotations |
| 27 | + |
| 28 | +- Lift arguments of explicitly constructed annotations [#22553](https://github.com/scala/scala3/pull/22553) |
| 29 | +- Fix copy of annotation on @main methods [#22582](https://github.com/scala/scala3/pull/22582) |
| 30 | +- `@publicInBinary` has now effect on secondary constructors [#22630](https://github.com/scala/scala3/pull/22630) |
| 31 | +- Fix mapping of annotations [#22407](https://github.com/scala/scala3/pull/22407) |
| 32 | + |
| 33 | +## Backend: Scala.js |
| 34 | + |
| 35 | +- Emit `js.NewArray` IR nodes when possible. [#22446](https://github.com/scala/scala3/pull/22446) |
| 36 | + |
| 37 | +## Classpath |
| 38 | + |
| 39 | +- Fix empty ClassPath attribute in one or more classpath jars causes crash [#22462](https://github.com/scala/scala3/pull/22462) |
| 40 | + |
| 41 | +## Documentation |
| 42 | + |
| 43 | +- Improve the usage of inclusive language [#22360](https://github.com/scala/scala3/pull/22360) |
| 44 | + |
| 45 | +## Erasure |
| 46 | + |
| 47 | +- Handle type aliases in contextFunctionResultTypeAfter [#21517](https://github.com/scala/scala3/pull/21517) |
| 48 | +- Align erasure of `Array[Nothing]` and `Array[Null]` with Scala 2 [#22517](https://github.com/scala/scala3/pull/22517) |
| 49 | + |
| 50 | +## Desugering |
| 51 | + |
| 52 | +- Under `betterFors` don't drop the trailing `map` if it would result in a different type (also drop `_ => ()`) [#22619](https://github.com/scala/scala3/pull/22619) |
| 53 | + |
| 54 | +## Experimental: Capture Checking |
| 55 | + |
| 56 | +- Canonicalize capture variable subtype comparisons [#22299](https://github.com/scala/scala3/pull/22299) |
| 57 | +- Permit Capture Refs for Uninitialized Type and Term Params in BiTypeMap [#22451](https://github.com/scala/scala3/pull/22451) |
| 58 | +- Fix maximal capability handling and expand aliases [#22341](https://github.com/scala/scala3/pull/22341) |
| 59 | + |
| 60 | +## Experimental: Modularity |
| 61 | + |
| 62 | +- Widen skolem types when adding parent refinements [#22488](https://github.com/scala/scala3/pull/22488) |
| 63 | + |
| 64 | +## Experimental: Global Initialization Checker |
| 65 | + |
| 66 | +- Refactor the abstract domain of global init checker to compile http4s [#22179](https://github.com/scala/scala3/pull/22179) |
| 67 | +- Fix global init checking crash when using a value defined in by-name closure [#22625](https://github.com/scala/scala3/pull/22625) |
| 68 | + |
| 69 | +## Experimentals |
| 70 | + |
| 71 | +- Expand value references to packages to their underlying package objects [#22011](https://github.com/scala/scala3/pull/22011) |
| 72 | + |
| 73 | +## Implicits |
| 74 | + |
| 75 | +- Restrict implicit args to using [#22458](https://github.com/scala/scala3/pull/22458) |
| 76 | + |
| 77 | +## Linting |
| 78 | + |
| 79 | +- Suppress spurious Suppression [#22383](https://github.com/scala/scala3/pull/22383) |
| 80 | +- CheckUnused checks span.exists before testing its parts [#22504](https://github.com/scala/scala3/pull/22504) |
| 81 | +- Don't warn retainedBody [#22510](https://github.com/scala/scala3/pull/22510) |
| 82 | +- Handle Typeable [#22663](https://github.com/scala/scala3/pull/22663) |
| 83 | +- Nowarn public implicit val class params [#22664](https://github.com/scala/scala3/pull/22664) |
| 84 | +- Exclude synthetic this.m, Any.m from import lookup [#22695](https://github.com/scala/scala3/pull/22695) |
| 85 | +- Warn unused member of anonymous class [#22729](https://github.com/scala/scala3/pull/22729) |
| 86 | +- Ignore params to default arg getters [#22749](https://github.com/scala/scala3/pull/22749) |
| 87 | +- Lazy val def member is pattern var [#22750](https://github.com/scala/scala3/pull/22750) |
| 88 | +- Restore resolving prefixes of implicit Ident [#22751](https://github.com/scala/scala3/pull/22751) |
| 89 | +- No warning for parameter of overriding method [#22757](https://github.com/scala/scala3/pull/22757) |
| 90 | +- Dealias before checking for member in lint [#22708](https://github.com/scala/scala3/pull/22708) |
| 91 | +- Warn on bad extensions of aliases [#22362](https://github.com/scala/scala3/pull/22362) |
| 92 | +- Warn universal extensions on opaque types [#22502](https://github.com/scala/scala3/pull/22502) |
| 93 | +- Discourage default arg for extension receiver [#22492](https://github.com/scala/scala3/pull/22492) |
| 94 | +- Rename on import is never wildcard [#22712](https://github.com/scala/scala3/pull/22712) |
| 95 | +- Collect nowarn symbols instead of skipping them [#22766](https://github.com/scala/scala3/pull/22766) |
| 96 | + |
| 97 | +## Match Types |
| 98 | + |
| 99 | +- Handle NoType in TypeComparer.disjointnessBoundary [#21520](https://github.com/scala/scala3/pull/21520) |
| 100 | + |
| 101 | +## Named Tuples |
| 102 | + |
| 103 | +- Special case NamedTuple.From for arguments derived from Tuple [#22449](https://github.com/scala/scala3/pull/22449) |
| 104 | +- Generate mirrors for named tuples [#22469](https://github.com/scala/scala3/pull/22469) |
| 105 | + |
| 106 | +## Opaque Types |
| 107 | + |
| 108 | +- Fix stack overflow errors when generating opaque type proxies [#22479](https://github.com/scala/scala3/pull/22479) |
| 109 | +- Fix inline proxy generation for opaque types referencing other opaque types [#22381](https://github.com/scala/scala3/pull/22381) |
| 110 | +- Fix opaque types leaking rhs when inlined and found in type params (and a related stale symbol issue) [#22655](https://github.com/scala/scala3/pull/22655) |
| 111 | + |
| 112 | +## Overloading |
| 113 | + |
| 114 | +- Make overload pruning based on result types less aggressive [#21744](https://github.com/scala/scala3/pull/21744) |
| 115 | + |
| 116 | +## Parser |
| 117 | + |
| 118 | +- Fix annotations being not expected in the middle of an array type by java parser [#22391](https://github.com/scala/scala3/pull/22391) |
| 119 | +- No outdent at eof [#22435](https://github.com/scala/scala3/pull/22435) |
| 120 | +- Allow observing an indent after conditional [#22611](https://github.com/scala/scala3/pull/22611) |
| 121 | +- Correctly detect colon lambda eol indent for optional brace of argument [#22477](https://github.com/scala/scala3/pull/22477) |
| 122 | + |
| 123 | +## Pattern Matching |
| 124 | + |
| 125 | +- Avoid crash in uninhab check in Space [#22601](https://github.com/scala/scala3/pull/22601) |
| 126 | +- Account for named tuples in space subtraction [#22658](https://github.com/scala/scala3/pull/22658) |
| 127 | +- Check exhaustivity of any case class [#22604](https://github.com/scala/scala3/pull/22604) |
| 128 | + |
| 129 | +## Presentation Compiler |
| 130 | + |
| 131 | +- Add enum type param support in sourceSymbol [#18603](https://github.com/scala/scala3/pull/18603) |
| 132 | +- Map name position to desugared version of named context bound [#22374](https://github.com/scala/scala3/pull/22374) |
| 133 | +- Hover and go to definition for named tuples [#22202](https://github.com/scala/scala3/pull/22202) |
| 134 | +- Completions: do not complete package [#20532](https://github.com/scala/scala3/pull/20532) |
| 135 | +- Print parens for single method argument only if a direct tuple type [#21510](https://github.com/scala/scala3/pull/21510) |
| 136 | +- Improvement: use heuristic to figure out `nameSpan` if `pointDelta` too big [#22484](https://github.com/scala/scala3/pull/22484) |
| 137 | +- Fix inferredTypeEdits for symbols [#22485](https://github.com/scala/scala3/pull/22485) |
| 138 | +- Fix: Only fallback to the definition of a synthetic valdef if it is zero extent [#22551](https://github.com/scala/scala3/pull/22551) |
| 139 | +- Better LSP completions inside of backticks [#22555](https://github.com/scala/scala3/pull/22555) |
| 140 | +- Don't search for members in pc info when irrelevant [#22674](https://github.com/scala/scala3/pull/22674) |
| 141 | +- Backport from Metals [#22426](https://github.com/scala/scala3/pull/22426) |
| 142 | +- Backport from Metals [#22491](https://github.com/scala/scala3/pull/22491) |
| 143 | +- Backport from Metals [#22665](https://github.com/scala/scala3/pull/22665) |
| 144 | + |
| 145 | +## Runner |
| 146 | + |
| 147 | +- Upgrade Scala CLI to [1.7.0 highlights](https://github.com/VirtusLab/scala-cli/releases/tag/v1.7.0) |
| 148 | + - Switch to scalameta/scalafmt images of scalafmt 3.9.1+ [#3502](https://github.com/VirtusLab/scala-cli/pull/3502) |
| 149 | + - Support the `--test` command line option for `run` subcommand [#3519](https://github.com/VirtusLab/scala-cli/pull/3519) |
| 150 | + - Support the `--test` command line option for `package` subcommand [#3519](https://github.com/VirtusLab/scala-cli/pull/3519) |
| 151 | + - Detect objects with main class in scripts [#3479](https://github.com/VirtusLab/scala-cli/pull/3479) |
| 152 | + - Support for Scala.js 1.18.2 [#3454](https://github.com/VirtusLab/scala-cli/pull/3454) |
| 153 | + - Support for Scala Native 0.5.7 [#3527](https://github.com/VirtusLab/scala-cli/pull/3527) |
| 154 | + - Add support for running a main method from the test scope [#3502](https://github.com/VirtusLab/scala-cli/pull/3502) |
| 155 | + |
| 156 | +## Quotes |
| 157 | + |
| 158 | +- Add a check for correct Array shape in quotes.reflect.ClassOfConstant [#22033](https://github.com/scala/scala3/pull/22033) |
| 159 | +- Fix issue with static `this` references erroring in quoted code [#22618](https://github.com/scala/scala3/pull/22618) |
| 160 | +- Fix #21721: make case TypeBlock(_,_) not match non-type Block [#21722](https://github.com/scala/scala3/pull/21722) |
| 161 | +- Make Ref.apply() return trees usable in the largest scope possible [#22240](https://github.com/scala/scala3/pull/22240) |
| 162 | +- Make sure Block does not incorrectly match a TypeBlock [#22716](https://github.com/scala/scala3/pull/22716) |
| 163 | +- Do not approximate prefixes when using memberType in reflect API [#22448](https://github.com/scala/scala3/pull/22448) |
| 164 | +- Bring back pattern match exhaustivity checking for macros [#22622](https://github.com/scala/scala3/pull/22622) |
| 165 | + |
| 166 | +## REPL |
| 167 | + |
| 168 | +- REPL: JLine 3.29.0 (was 3.27.1) [#22679](https://github.com/scala/scala3/pull/22679) |
| 169 | +- Repl: emit warning for the `:sh` command [#22694](https://github.com/scala/scala3/pull/22694) |
| 170 | +- Add warning for :kind command [#22572](https://github.com/scala/scala3/pull/22572) |
| 171 | + |
| 172 | +## Reporting |
| 173 | + |
| 174 | +- Filter help renders box border [#22434](https://github.com/scala/scala3/pull/22434) |
| 175 | +- Register nowarn when inlining [#22682](https://github.com/scala/scala3/pull/22682) |
| 176 | +- Rule out exports of member of the current class [#22545](https://github.com/scala/scala3/pull/22545) |
| 177 | + |
| 178 | +## Scaladoc |
| 179 | + |
| 180 | +- Render `@deprecated` correctly even when named arguments weren't used [#21925](https://github.com/scala/scala3/pull/21925) |
| 181 | +- Remove DRI from Scaladoc warnings [#22330](https://github.com/scala/scala3/pull/22330) |
| 182 | + |
| 183 | +## SemanticDB |
| 184 | + |
| 185 | +- Don't add `()` to semanticdb symbol for java variables [#22573](https://github.com/scala/scala3/pull/22573) |
| 186 | +- Fix compiler crash when using betasty with missing java classfiles [#22599](https://github.com/scala/scala3/pull/22599) |
| 187 | + |
| 188 | +## Transform |
| 189 | + |
| 190 | +- Check only stable qual for import prefix [#22633](https://github.com/scala/scala3/pull/22633) |
| 191 | +- Treat static vals as enclosures in lambdalift [#22452](https://github.com/scala/scala3/pull/22452) |
| 192 | +- Record calls to constructors in lambdaLift [#22487](https://github.com/scala/scala3/pull/22487) |
| 193 | +- Only check logicalOwners for methods, and not for classes, when looking for proxies [#22356](https://github.com/scala/scala3/pull/22356) |
| 194 | +- Add error-checking when fetching rhs of trees from TASTy [#22565](https://github.com/scala/scala3/pull/22565) |
| 195 | + |
| 196 | +## Typer |
| 197 | + |
| 198 | +- Root of Java select must be class or rooted package [#21800](https://github.com/scala/scala3/pull/21800) |
| 199 | +- Check if a prefix is valid before selecting from a type [#22368](https://github.com/scala/scala3/pull/22368) |
| 200 | +- Preserve hard unions in widenSingletons [#22369](https://github.com/scala/scala3/pull/22369) |
| 201 | +- Constructor proxy is restricted if class is protected [#22563](https://github.com/scala/scala3/pull/22563) |
| 202 | +- Constructor companion gets privateWithin [#22627](https://github.com/scala/scala3/pull/22627) |
| 203 | +- Revert lambda cleanup [#22697](https://github.com/scala/scala3/pull/22697) |
| 204 | +- Avoid infinite recursion when looking for suggestions [#22361](https://github.com/scala/scala3/pull/22361) |
| 205 | +- Fix cyclic check, regardless of definition order [#22342](https://github.com/scala/scala3/pull/22342) |
| 206 | +- Avoid inf recursion in provablyDisjointClasses [#22489](https://github.com/scala/scala3/pull/22489) |
| 207 | + |
| 208 | +## Value Classes |
| 209 | + |
| 210 | +- Allow private members when computing the denotation of a NamedType [#22549](https://github.com/scala/scala3/pull/22549) |
| 211 | + |
| 212 | +## Other changes |
| 213 | + |
| 214 | +- Remove locale dependent FileSystemException check [#21633](https://github.com/scala/scala3/pull/21633) |
0 commit comments