Backport fixes to 12.3.0-beta.1#8407
Conversation
…erive strategy (#8276) * Extract fixpoint transitive-closure logic into ReactiveFixpoint module Move the BFS reachability computation, incremental/full recompute, and state management out of Reactive.ml into a dedicated private module with a clean interface. Signed-Off-By: Cristiano Calcagno <cristianoc@users.noreply.github.com> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * analysis/reactive: improve incremental fixpoint robustness Signed-off-by: Cristiano Calcagno <cristianoc@users.noreply.github.com> * analysis/reactive: update fixpoint instrumentation and invariants Signed-off-by: Cristiano Calcagno <cristianoc@users.noreply.github.com> * analysis/reactive: fix stale remove emission in fixpoint Signed-off-by: Cristiano Calcagno <cristianoc@users.noreply.github.com> * analysis/reactive: add incremental fixpoint report and replay tool Signed-off-by: Cristiano Calcagno <cristianoc@users.noreply.github.com> --------- Signed-off-by: Cristiano Calcagno <cristianoc@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> # Conflicts: # CHANGELOG.md
Support `*` and `**` glob patterns in `reanalyze.suppress` and `reanalyze.unsuppress` config entries (e.g. `**/bindings`, `src/Dead*`). Plain prefix strings continue to work as before. Closes #8259 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…t position
When a switch on an untagged variant (e.g. JSON.t) with an Object case was in
statement position (not tail), compile_general_cases would set default=None for
empty default bodies, causing the null/array guard to be silently skipped. This
let null and arrays fall into the typeof "object" branch at runtime.
Two fixes:
- Handle the Some guard, None default case by emitting if (!(guard)) { ... }
- Use the type's block_cases to determine if arrays can appear at runtime,
avoiding unnecessary Array.isArray guards for types without an Array case
Fixes #8251 (comment)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add String.localeCompare options * CHANGELOG
* Fix rewatch panic when package.json has no "name" field * CHANGELOG
# Conflicts: # CHANGELOG.md
* Fix exception record field regression * Format
* Rewatch: ignore stale lock for unrelated process name * CHANGELOG # Conflicts: # CHANGELOG.md
|
Having trouble getting the rewatch tests to work. I think I'll keep the new scheduler v13 only for now. |
rescript
@rescript/darwin-arm64
@rescript/darwin-x64
@rescript/linux-arm64
@rescript/linux-x64
@rescript/runtime
@rescript/win32-x64
commit: |
# Conflicts: # .github/workflows/ci.yml
* Branch lockfiles * Add build.lock / await mechanism * Remove build.lock when finished * Rename loading lockfile message * Short-circuit if path no longer exists * Tests * Drop lock after clean * fmt # Conflicts: # rewatch/src/main.rs # rewatch/tests/experimental/02-experimental-features-parse-error.sh # rewatch/tests/experimental/03-watch-invalid-experimental.sh # rewatch/tests/lock.sh # rewatch/tests/watch/04-watch-config-change.sh
* Fix loss of LOC during AST0 translation * Changelog * Format and completion test updates * Fix build # Conflicts: # CHANGELOG.md
* test: cover warning persistence after atomic saves Add a rewatch integration test that simulates an editor-style atomic save by renaming B.res into place and verifies warnings from ModuleA.res remain in .compiler.log after the rebuild. * Preserve warnings across watch full rebuilds Atomic-save rename events force the watcher down the full rebuild path, which was recreating build state and dropping stored warnings for unchanged modules. Carry warning state forward into the new build state so unrelated module warnings continue to be re-emitted.\n\nAlso add unit tests for the warning carry-forward helper. * docs: add changelog # Conflicts: # CHANGELOG.md # rewatch/tests/02-watch-warnings-persist-atomic-save.sh # rewatch/tests/suite.sh
* propagate expected dict value type into dict literal typing * cleaner impl * change approach back to structural, and fix async as well * changelog # Conflicts: # CHANGELOG.md
When stdout isn't a TTY during `rewatch watch`, full rebuilds previously produced no completion message. Emit a plain 'Finished compilation' line so parent processes and non-TTY consumers can observe when a rebuild finishes.
Change show_progress from `log_level_filter == LevelFilter::Info` to `>= LevelFilter::Info` so that verbose flags (-v, -vv) add debug output without silencing progress messages like 'Finished compilation'.
* Resolve workspace dependencies in editor analysis * CHANGELOG # Conflicts: # CHANGELOG.md
* improve deprecated attribute extraction and support record form - Enhance `findDeprecatedAttribute` to extract the `reason` from record-form `@deprecated` attributes. - Ensure deprecated attribute extraction works regardless of attribute order by reversing the list in `newDeclared`. - Update tests and expected outputs to reflect improved deprecated reason extraction, including record-form deprecations. * Update CHANGELOG.md --------- Co-authored-by: Christoph Knittel <ck@cca.io> # Conflicts: # CHANGELOG.md
* avoid warning 56 blowup for dict patterns * changelog # Conflicts: # CHANGELOG.md
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 52c0b6e2d7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ) -> Result<(), IncrementalBuildError> { | ||
| let build_folder = build_state.root_folder.to_string_lossy().to_string(); | ||
|
|
||
| let _lock = get_lock_or_exit(LockKind::Build, &build_folder); |
There was a problem hiding this comment.
Acquire build lock before running initialization
build.lock is now acquired inside incremental_build, but build::build still runs initialize_build beforehand; that initialization performs filesystem-mutating setup/cleanup (cleanup_previous_build) with no lock held. If two rewatch build processes start at the same time in the same project, both can mutate lib/bs before one waits on the lock, causing racey cleanup and nondeterministic build state. The lock should be taken before initialization (or moved to wrap the full build path) so pre-build cleanup is serialized too.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in #8409, will backport from there once merged.
This backports various fixes/improvements from master to 12.x.
I made it a beta version because lots of stuff is included,
including the new rewatch scheduler (#8374).