github openrewrite/rewrite v8.94.0
8.94.0

4 hours ago

What's Changed

  • JavaScript: cache merge builders in a trie over property names by @knutwannheden in #9237
  • JavaScript RPC: send object pages of 5000 messages by @knutwannheden in #9238
  • JavaScript: dispatch visitor methods through a map of kinds by @knutwannheden in #9239
  • RPC: resolve each received type name to its class once per queue by @knutwannheden in #9236
  • Python RPC: dispatch sender and receiver nodes through one type-keyed table by @knutwannheden in #9240
  • JavaScript: fixes for visiting delete statements on Java side by @greg-at-moderne in #9243
  • Add support for upgrading and changing version catalog plugins in TOML format by @KamilPatora in #8950
  • JavaScript: Add missing id to equals/hashCode of JS.ExpressionStateme… by @greg-at-moderne in #9242
  • In tests, re-parse converted sources with their new language’s parser by @greg-at-moderne in #9241
  • RPC: tell jsonrpc the response type each request expects by @knutwannheden in #9245
  • Groovy: Add missing id to equals/hashCode of G.ExpressionStatement, G.GString and G.GString.Value by @knutwannheden in #9250
  • Resolve Go modules excluded from a go.work standalone by @sambsnyd in #9203
  • Xml: fix a few withers to return the same if no changes by @greg-at-moderne in #9249
  • JavaScript: return same FunctionCall from withTypeParameters for an u… by @greg-at-moderne in #9248
  • JavaScript: fixing integration tests by @greg-at-moderne in #9244
  • Scala: fix type attribution of arrays, now JavaType.Array instead of Parameterized by @greg-at-moderne in #9246
  • Python: fix missing type on Py.MatchCase.withGuard by @greg-at-moderne in #9251
  • Fix whitespace when RemoveAnnotationVisitor removes several leading annotations by @timtebeek in #9253
  • C#: pin MessagePack to 2.5.307 for CVE-2026-92707 by @timtebeek in #9255
  • JavaScript: Fix missing visit to FunctionType.modifiers by @greg-at-moderne in #9252
  • JavaScript: Fix three wrong-removal bugs in RemoveImport by @greg-at-moderne in #9259
  • JavaScript: visit the space before await in for-await-of loops by @greg-at-moderne in #9258
  • Lombok check: use tsym.getQualifiedName() instead of Type.toString() by @greg-at-moderne in #9254
  • JavaScript: fix passing options from superclass recipe by @greg-at-moderne in #9256
  • Silence JDK 8 javac warnings and notes in rewrite-java-8 by @timtebeek in #9264
  • Enable Python test harness to assert about source files a recipe generates by @sambsnyd in #9265
  • JavaScript: apply changed scalars in padded elements on RPC receive by @greg-at-moderne in #9269
  • JSON: match numeric literals in JsonPath filter equality by @greg-at-moderne in #9268
  • JavaScript: fix AddImport merging into empty named import by @greg-at-moderne in #9257
  • HCL: select blocks by their labels in JsonPathMatcher by @greg-at-moderne in #9273
  • JavaScript: fix wrong resolved version for duplicate packages in yarn/pnpm locks by @greg-at-moderne in #9271
  • JavaScript: keep markers and type attribution through Prettier format by @greg-at-moderne in #9276
  • Fix Xml.Tag.withValue IndexOutOfBoundsException on empty element by @greg-at-moderne in #9274
  • HCL: add ChangeValue recipe by @greg-at-moderne in #9279
  • HCL: don't re-indent heredoc content in AutoFormat by @greg-at-moderne in #9278
  • HCL: add HclValues.stringValue and label/block name helpers by @greg-at-moderne in #9281
  • rewrite-test: don't count generated or deleted files as changed again two cycles later by @knutwannheden in #9277
  • Make RemoveUnusedProperties and RemoveUnusedImports converge in one cycle by @knutwannheden in #9270
  • Hcl: AddContent recipe by @greg-at-moderne in #9283
  • Honour a composite's causesAnotherCycle for its children's changes by @knutwannheden in #9272
  • JavaScript: UpgradeTransitiveDependencyVersion writes no override for… by @greg-at-moderne in #9282
  • JavaScript: read multi-document pnpm 11+ locks when refreshing resolved dependencies by @greg-at-moderne in #9285
  • HCL: match top-level attributes, nested blocks by recursive descent a… by @greg-at-moderne in #9280
  • Python RPC: encode frames with orjson and read received messages in place by @knutwannheden in #9288
  • Go: return same CompilationUnit from withImports when imports are unchanged by @greg-at-moderne in #9286
  • Python printer: dispatch nodes through accept_python/accept_java by @knutwannheden in #9289
  • JavaScript: the RPC server pages at the default batch size by @knutwannheden in #9295
  • TOML: decode basic-string escapes in Toml.Literal values by @knutwannheden in #9296
  • Python: close wrong-lock paths in native lock regeneration found against the real package managers by @knutwannheden in #9297
  • Python: ADR 0014 and uv optional-dependencies bookkeeping in native lock regeneration by @knutwannheden in #9299
  • Python: uv.lock bookkeeping the corpus replay ranked: extras, constraints, dependents, stamps by @knutwannheden in #9300
  • Python: read lock regeneration fixtures from openrewrite/rewrite-python-lock-fixtures by @knutwannheden in #9301
  • Gradle: type-attribute develocity {} settings blocks, keep Develocity 3.19.2 by @timtebeek in #9303
  • Scala: type repeated params as T[] for Java and immutable.Seq for Scala by @greg-at-moderne in #9302
  • JavaScript: regenerate npm locks as npm 11.21.1 and 12.2.1 by @knutwannheden in #9304
  • Python: use X | None instead of Optional[X] in recipes by @timtebeek in #9306
  • JavaScript: attribute calls and fields bound by a destructured require() to the required module by @greg-at-moderne in #9307
  • JavaScript: RPC codecs receive and send synchronously by @knutwannheden in #9247
  • JavaScript: stream RPC object pages through a worker transport by @knutwannheden in #9293
  • Python: fix SDK spots where recipe results disagree with real runs or with a parse by @knutwannheden in #9308
  • Python: remove_import leaves the tree a parse of its output gives by @knutwannheden in #9309
  • RPC: send comment-free Spaces as refs by @knutwannheden in #9290
  • Python: ChangeImport moves members read through dotted and from-imported modules by @knutwannheden in #9310
  • Python: port uv-pep508's marker algebra for uv lock regeneration by @knutwannheden in #9305
  • Python: uv.lock edits render untouched lines as uv 0.13.4 writes them, and keep a satisfied lock by @knutwannheden in #9311
  • Python: uv.lock edits that fork, revise dependents, or use environments and overrides match uv 0.13.4 by @knutwannheden in #9312
  • Python: a Pipfile edit locks the packages its new versions require by @knutwannheden in #9313
  • Fix provided deps resolution for maven by @BoykoAlex in #8306
  • Find transitive targets in Gradle ExcludeDependency after an earlier model change by @steve-aom-elliott in #9298
  • Use ListUtils.filter in FilterTagChildrenVisitor by @timtebeek in #9323
  • Use TreeVisitor#reduce instead of a captured accumulator by @timtebeek in #9328
  • Use ListUtils.filter instead of mapping elements to null by @timtebeek in #9327
  • Python: a uv.lock specifier records its numerals as PEP 440 writes them by @knutwannheden in #9320
  • Python: a uv.lock edit splits the forks of a lock that is already forked by @knutwannheden in #9321
  • Python: a changed uv.lock records each index as the manifest configures it by @knutwannheden in #9324
  • Python: each uv.lock entry's own forks are recorded in solve order by @knutwannheden in #9325
  • ADR 0014: port each Python resolver, and pipenv's install-correct contract by @knutwannheden in #9314
  • Python: a uv.lock keeps the marker it recorded, and the upload times an HTML index lists by @knutwannheden in #9330
  • Python: the uv reachability pass holds a marker, as uv does by @knutwannheden in #9332
  • Python: parse implicit string concatenation into a balanced tree by @timtebeek in #9315
  • Python: write synthesized line breaks in the file's own line ending by @timtebeek in #9316
  • Python: type a decorated class declaration as the class it declares by @timtebeek in #9317
  • Python: keep CRLF line breaks inside multi-line f-strings and t-strings by @timtebeek in #9318
  • Scala: ListBuffer.empty[T] and other parameterless generic factories get their instantiated return type by @greg-at-moderne in #9333
  • Python: add an import to its isort section where the imports are grouped by @timtebeek in #9319
  • Do not count a static import as a reference when adding a type import by @timtebeek in #9329
  • Scala: map extractor patterns (case Some(v), h :: t) to J.DeconstructionPattern by @greg-at-moderne in #9338
  • Scala: key Java static methods under the Java owner and strip $ only from module classes by @greg-at-moderne in #9337
  • Scala: type attribution for annotation names by @greg-at-moderne in #9335
  • JavaScript: one resolver for import and require() module bindings by @greg-at-moderne in #9339
  • Fix Gradle 9 migration dependency and wrapper compatibility by @jkschneider in #9340
  • Upgrade to Gradle 9.8.2 by @jkschneider in #9342
  • JavaScript: keep only string-valued engines entries in NodeResolutionResult by @knutwannheden in #9345
  • JavaScript: keep directories and the pnpm store out of project discovery by @knutwannheden in #9346
  • JavaScript: escape lone surrogates in member names of type attribution by @knutwannheden in #9344
  • Keep a file parseable when a Javadoc reference's package cannot be listed by @knutwannheden in #9343
  • JavaScript: escape lone surrogates in the name of a call on this by @knutwannheden in #9347
  • Scala: spell lone surrogates in J.Literal values as escapes by @knutwannheden in #9348
  • Submit only shipped dependencies of the released commit to the dependency graph by @timtebeek in #9349
  • Remove SortDependencies from Maven BestPractices by @steve-aom-elliott in #9350
  • Attribute Markup markers to the recipe that added them by @natedanner in #9326
  • JavaType equality works for lazily loaded types by @sambsnyd in #9352
  • ChangeType updates fully qualified type references in Javadoc by @sambsnyd in #9351
  • Give MavenSettings object identity so a build's modules share one copy when serialized by @jkschneider in #9355
  • Python: publish options of the recipes that delegate to Java by @knutwannheden in #9336
  • Fail tests, not production runs, on a cursor whose parent holds the same element by @jkschneider in #9356
  • Scala: fix semicolon (;) parsing between statements by @greg-at-moderne in #9358
  • Scala: type attribution names nested classes by their JVM binary name (Map$Entry, Outer$Inner) by @greg-at-moderne in #9360
  • Python: leave a dependency's own tests out of its exported types, and read its files as ty does by @jkschneider in #9234
  • Record file deletions in RPC BatchVisit by @greg-at-moderne in #9364
  • Mark test Assertions and SourceSpecs with @CheckReturnValue by @timtebeek in #9366
  • Fail rewriteRun when a ScanningRecipe accumulator keeps a Heavyweight object by @jkschneider in #9367
  • Java: Key local variable types by declaration position so sibling locals don't share flags, annotations by @greg-at-moderne in #9365
  • Mark immutable-result APIs with @CheckReturnValue by @timtebeek in #9369
  • Python: resolve setuptools dependencies without building in the source tree by @knutwannheden in #9370
  • Python: share one RPC process across tests, resetting it between them by @knutwannheden in #9374
  • Stop discarding ListUtils.map results by @timtebeek in #9368
  • rewriteRun runs a verification cycle after declared expected cycles by @knutwannheden in #9359
  • rewriteRun fails a test whose recipe leaves an import unused by @knutwannheden in #9375
  • RemoveRedundantProperties: only remove properties older than the parent's value by @timtebeek in #9372
  • AddOrUpdateAnnotationAttribute types the enum constants it writes by @knutwannheden in #9379
  • RemoveImport unfolds a star import only into named types and keeps a written alias by @knutwannheden in #9377
  • RemoveAnnotationAttribute removes the imports the removed value used by @knutwannheden in #9378
  • Resolve the Tooling API plugin through MAVEN_CENTRAL_MIRROR_URL when it is set by @jkschneider in #9380
  • Use MAVEN_CENTRAL_MIRROR_URL in place of Maven Central in model builds by @jkschneider in #9383
  • Give rewrite-maven's tests that set up their own context the Maven Central mirror (tests only) by @jkschneider in #9384
  • Send the Gradle plugin portal to MAVEN_CENTRAL_MIRROR_URL in model builds too by @jkschneider in #9385
  • Probe local servers in repositoryOrder, since oss.sonatype.org now redirects to Maven Central by @jkschneider in #9386
  • Let one test at a time use withLocalRepository, and take customInitScript's plugin from the mirror by @jkschneider in #9387
  • Send Sonatype's snapshot repositories to MAVEN_CENTRAL_MIRROR_URL in model builds too by @jkschneider in #9389
  • Keep MavenPomDownloaderTest and ResolvedPomTest off Maven Central and Sonatype (tests only) by @jkschneider in #9388
  • Preserve primitive parameter types in FindSymbols signatures by @jkschneider in #9390
  • Python: provision the dependency environment from the manifest the markers read by @knutwannheden in #9373
  • Handle Maven RELEASE and LATEST dependency selectors by @jkschneider in #9391
  • Install each RPC engine version once when several test forks start it at once by @jkschneider in #9396
  • Compute rewrite-python's engine version from its commit in every build, rather than read back the file an earlier build left by @jkschneider in #9395
  • Expect the mirror's URL in MavenDependencyFailuresTest as the downloader normalizes it, http when only http answers by @jkschneider in #9397
  • Declare a shared BOM property override once, and settle upgrades of plugin-managed versions by @knutwannheden in #9371
  • JavaScript: fix deleted trees in BatchVisit and RecipeSpec support for generated and deleted files by @greg-at-moderne in #9361
  • Scala: key objects by their binary name (Foo$) so classes and companions don't mix up by @greg-at-moderne in #9398
  • JavaScript: flag async callbacks in sync array methods only on array receivers by @knutwannheden in #9401
  • Add Gradle RemoveExclusion recipe by @timtebeek in #9376
  • Scala: a union type is a MultiCatch of its alternatives by @greg-at-moderne in #9334
  • C#: keep global.json msbuild-sdks while parsing instead of deleting the file by @macsux in #9382
  • Add UpdateProjectUrlFromGitOrigin by @steve-aom-elliott in #9322
  • Remove the benchmarks that load rewrite-spring's recipes, which made rewrite depend on rewrite-spring by @jkschneider in #9404
  • Run rewrite-python's install and tests after pythonUpdateVersion, which rewrites the pyproject.toml they read by @jkschneider in #9405
  • Set only pyproject.toml's own version in pythonUpdateVersion, not ruff's target-version and ty's python-version too by @jkschneider in #9407

Full Changelog: v8.93.10...v8.94.0

Don't miss a new rewrite release

NewReleases is sending notifications on new releases.