Commit Graph

1039 Commits

Author SHA1 Message Date
Brandon Williams
856f9b8d82 More fixes for @Reducer macro. (#2834)
* More fixes for @Reducer macro.

* wip
2024-02-19 10:29:28 -08:00
Brandon Williams
ad7223a69c Add more namespacing. 2024-02-19 08:35:50 -08:00
stefancodinglands
09aab16626 Added missing namespace for Scope when in ReducerMacro (#2832)
* Added missing namespace to Scope when generating Reducer with macro

* Update ReducerMacroTests.swift
2024-02-19 08:34:39 -08:00
Brandon Williams
da1cd105cc Fix macro compiler bug in release mode. (#2827)
* Fix macro compiler bug in release mode.

* few more tests
2024-02-18 17:05:40 -08:00
Takehiro Kaneko
57bedee12a A small change on migration guide 1.8 (#2799) 2024-02-13 22:10:21 -08:00
hmhv
3f682e4f96 Fix typo (#2797)
* fix typo

* fix typo for tutorial
2024-02-13 09:19:56 -08:00
Shai Mishali
5394686397 [macro] Make _$id and _$willModify() public (#2789) 2024-02-12 12:27:26 -08:00
Stephen Celis
5668566d1c Document @Reducer(state: .equatable) in the migration guide (#2796) 2024-02-12 12:21:10 -08:00
stephencelis
cf967a28a8 Run swift-format 2024-02-12 15:11:58 +00:00
Stephen Celis
f75f9380b1 @Reducer macro enhancements (#2795)
* updated binding docs

* adding docs

* clean up

* wip

* wip

* wip

* clean up

* clean up

* clean up

* wip;

* lots of fixes

* update more docs

* fix

* wip

* wip

* Remove ObservationRegistrarWrapper. (#2634)

* Remove ObservationRegistrarWrapper.

* Delete Sources/ComposableArchitecture/Internal/ObservationRegistrarWrapper.swift

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* more docs

* update docs

* a few more tests

* fix

* wip

* wip

* wip

* Cache data in store collections (#2635)

* fix tutorial highlighting

* wip

* wip

* wip

* wip

* tests for observation of special domain types

* another test

* fix

* wip

* Implement memoization for perception checks (#2630)

* Implement memoization for isInSwiftUIBody

* tidy up

* Perception caching updates (#2649)

* Small updates to perception caching.

* wip

* debug

* some more macro tests

* syncups tutorial beginnings

* wip

* wip

* wip

* wip

* wip

* merge fixes

* wip

* update tests

* fix

* fix

* fix perception checking in store

* rename task local

* delete old test

* deprecate test using old apis

* fix test

* perception tests for store

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Opt out of key path for Store.ifLet

* sync ups

* lots more sync up tutorial

* more sync ups tutorial

* wip

* wip

* wio

* wip

* wip

* wip

* updated references of 1.6 to 1.7

* wip

* no need to force unwrap here

* fixed crash in ForEach with bindings

* more sync ups tutorial

* more sync ups tutorial

* wip

* more sync ups

* wip

* wip

* Better support for observing copies of values (#2650)

* Explore using _modify

* wip

* wip

* wip

* wip

* wip

* wip

* more tests

* wip

* get another failing test for an edge case

* wip

* tests all passing

* flag for determining when new state was created

* wip

* clean up

* wip

* wip

* wip;

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* New test that currently fails.

* wip

* wip

* Update Sources/ComposableArchitectureMacros/PresentsMacro.swift

* wip

* remove redundant attached member attribute

* storage

* cleanup

* more benchmarks and tests

* wip

* wip

* wip

* wip

* update tests

* wip

* wip

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>

* wip

* wip

* wip

* swift-format

* fix

* wip

* wip

* wip

* wip

* Perception

* wip

* wip

* clean up shared state

* fix shared state tests

* wip

* add alert test

* wip

* wip

* wip

* wip

* Use transaction in binding

* wip

* wip

* wip

* wip

* wip

* wip

* uikit

* keep references to controllers when presenting so that we can properly dismiss

* change order of features in shared state demo

* wip

* cleanup

* cleanup

* wip

* wip

* wip

* Fix perception checking for effect actions.

* wip

* wip

* wip

* Fix perception checking for effect actions.

* wip

* wip

* remove sync ups tutorial

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* @Reducer macro will insert protocol requirements if missing

* wip

* fixes

* fix

* wip

* wip

* wip

* docs for observe function for uikit

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Add cancellation to observation'

* re-record integration test snapshots

* fixed some todos

* update test

* remove 5.9.2 checks

* wip

* wip

* improve docs

* update docs

* updates

* lots of fixes

* more docs

* remove unneeded file;

* wip

* wip

* wip

* update readme and getting started

* wip

* wip

* simplify

* migration stuff

* wip

* Update Models.swift

* wip

* wip

* wip

* Update Bindings.md

* wip

* wip

* wip

* wip

* fix

* wip

* wip

* wip

* wip

* wip

Co-authored-by: Kabir Oberai <oberai.kabir@gmail.com>

* lots of docs and some fixes

* more docs

* more docs

* wip

* upate integration tests to use enum destination macro

* re-org migration guide

* wip

* wip

* docs for other enum reducer macros

* update ephemeral state docs

* wip

* move docs for reducer protocol and macro into single article

* mention observable state

* wip

* updated docs and some macro tests

* wip

* wip

* cleanup

* wip

* wip

* wip

* revert 16

* wip

* clean up

* Revert "clean up"

This reverts commit 49e73081ac.

* Availability fixes

* comment out tests crashing the compiler

* wip

* fix ttt tests

* wip

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>
Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
Co-authored-by: George Scott <gscott@gekkoto.com>
Co-authored-by: Kabir Oberai <oberai.kabir@gmail.com>
2024-02-12 07:11:05 -08:00
Ryu
08c7c6b422 fix (#2790) 2024-02-11 11:54:52 -08:00
Stephen Celis
87b77a8bae Fix typo 2024-02-09 11:27:49 -08:00
Stephen Celis
71c82d7e83 Properly tag observable enums (#2786)
* Failing test and a simple solution.

* another failing test

* wip

* wip

* Fix

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>
2024-02-08 14:54:20 -08:00
Yasuhiro Hatta
4ae34cad32 Fix typo in the 1.7 migration guide (#2780) 2024-02-08 14:26:29 -08:00
Stephen Celis
e10f42ed3c Propagate @ViewAction macro availability (#2785) 2024-02-08 12:34:56 -08:00
Stephen Celis
d9a3cfb5fa Better document explicit id with scoped ForEach (#2784)
`ForEachStore` implicitly used `id: \.state.id` under the hood, so a
naive migration to `ForEach` might miss this detail. Let's be more
explicit in our documentation and migration guide to avoid this issue.

In the future it might be possible to address better in the library
itself, but for now the requirement for stores to be identifiable for
other forms of navigation means allowing for this.
2024-02-08 12:33:54 -08:00
Takehiro Kaneko
1e7942c9d1 fix typo in migration guide 1.6 (#2779) 2024-02-07 19:12:18 -08:00
Brandon Williams
7551bb8dc3 Fix navigationDestinationWrapper in docs. (#2765)
* Fix navigationDestinationWrapper in docs.

* Update TreeBasedNavigation.md

* Update TreeBasedNavigation.md

* wip

* update some presentation states

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>
2024-02-02 14:13:30 -08:00
Brandon Williams
412a896976 Update warning for uncached stores. (#2764)
* Update warning for uncached stores.

* update warnings

* Update tests'

* Update Store+Observation.swift

* Update ScopeCacheTests.swift

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>
2024-02-02 13:38:32 -08:00
hmhv
1f5985a359 remove invalid newlines (#2763) 2024-02-02 10:18:52 -08:00
Stephen Celis
2c3453cb79 Some cleanup (#2759)
* Some cleanup

  - `if/guard let x = x` -> `if/guard let x`
  - Remove unneeded `self` from a few demos
  - Fix up some presentation logic in TicTacToe

* Update Examples/TicTacToe/tic-tac-toe/Sources/LoginUIKit/LoginViewController.swift

* wip

* wip

* wip
2024-02-01 15:43:52 -08:00
mbrandonw
83ec5d3c5f Run swift-format 2024-01-31 18:39:19 +00:00
Brandon Williams
b1a0c88516 Fix visionOS and Xcode project warnings (#2752)
* Fix deprecation warnings for visionOS

* update project settings

* use negated visionOS check

* fix ttt alert dismissl

* formatting
2024-01-31 10:38:24 -08:00
peter bohac
94faadf363 Workaround for the build break on visionOS (#2746)
This is likely not the proper solution, but it does get my projects building.
2024-01-30 15:48:38 -08:00
stephencelis
776bc5c28f Run swift-format 2024-01-30 19:47:39 +00:00
Yuya Oka
36e54203dd Support package access modifier for Observation architecture (#2741) 2024-01-30 11:45:51 -08:00
Stephen Celis
63e29b311e Deprecate Reducer.onChange(of:removeDuplicates:) (#2744)
The `removeDuplicates` overload is just too tough on the compiler to
resolve, so we don't think it's worth shipping in the library in the
long run. SwiftUI's `View.onChange` doesn't have such an option, and
adding such a signature results in the same compiler issues. Let's stick
with the interface that most closely matches SwiftUI's and avoid
interfaces that are problematic for the compiler.
2024-01-30 10:43:04 -08:00
Stephen Celis
efc79f94a6 Move binding warning suppression to dynamic member lookup (#2740)
* Move binding warning suppression to dynamic member lookup

In TCA it is considered a bug to send an action to a child feature when
it is dismissed.

In SwiftUI, a focused text field binding will write to itself when the
view it is presented in is dismissed.

So if you derive a TCA binding to a text field in a dismissable child
feature, dismissing said feature will write to the text field and cause
a warning to be emitted.

To work around this, we set a task local, and are currently setting it
in debug-only methods that construct a binding from scratch. Creating
bindings from scratch unfortunately leads to issues with animations, so
we should avoid doing so.

Instead, we can leverage properties on store that bindings are derived
from and suppress the warnings from there.

* wip

* wip

* wip

* wip

* wip

* wip
2024-01-30 10:30:34 -08:00
Gleb Shevchenko
4d9f1713a0 Add missing var keyword (#2743) 2024-01-30 10:09:33 -08:00
Zvonimir Pavlović
4c6b617f88 Documentation: Fix a small typo in the 1.7 migration guide (#2738) 2024-01-29 12:58:32 -08:00
Shinichiro Oba
da028ac6a7 Fix Navigation tutorial (#2736)
* Add missing case

* `destination` property should be `nil`

* Change `store` property to `Bindable` to show alert

* Fix filename

* Fix indentation diffs
2024-01-29 09:03:47 -08:00
Cosmic Flamingo
9443607ab8 Fix @Presentation typo in Migrating to 1.7 docs (#2732) 2024-01-28 13:52:07 -08:00
Ryu
30ab89daa4 fix syntax error (#2731) 2024-01-28 10:22:09 -08:00
stephencelis
fd49eb28f5 Run swift-format 2024-01-27 01:08:50 +00:00
Stephen Celis
c373d8eae3 Observable Architecture (#2593)
* bring back view store performance

* wip

* Allow chaining of store bindings

* wip

* Localize ignoring bindings to text field resignation/dismissal

* wip

* fix DiagnosticsError message (#2597)

* store collection

* wip

* wip

* update migration guide

* Add `@Presents` macro for observable presentation

While it would be nice for the `@PresentationState` property wrapper to
"just work" with TCA's upcoming observable tools, sadly that does not
seem to be the case. Adding observation directly to
`@PresentationState`, as we have done with the beta so far, can break
existing projects due to the additional observation. This primarily
manifests itself in projects that present navigation stacks, where the
`@PresentationState` observation can cause the navigation hierarchy to
recompute and trigger SwiftUI bugs.

The best we've come up with so far is introducing a brand new macro that
automatically wraps a property with `@PresentationState` _and_
instruments it with observation.

We're open to other ideas, and we do have future plans to eliminate the
need for a property wrapper or macro at all, but till then this offers a
non-breaking upgrade path!

* fixes

* Observe child store changes

* wip

* wip

* wip

* Fix typo in MigratingTo1.6.md (#2608)

* Rename bindingViewStore argument to store in MigratingTo1.6.md (#2611)

* wip

* Revert "wip"

This reverts commit f221ed0e1a.

* Add `@Presents` macro for observable presentation (#2604)

* Add `@Presents` macro for observable presentation

While it would be nice for the `@PresentationState` property wrapper to
"just work" with TCA's upcoming observable tools, sadly that does not
seem to be the case. Adding observation directly to
`@PresentationState`, as we have done with the beta so far, can break
existing projects due to the additional observation. This primarily
manifests itself in projects that present navigation stacks, where the
`@PresentationState` observation can cause the navigation hierarchy to
recompute and trigger SwiftUI bugs.

The best we've come up with so far is introducing a brand new macro that
automatically wraps a property with `@PresentationState` _and_
instruments it with observation.

We're open to other ideas, and we do have future plans to eliminate the
need for a property wrapper or macro at all, but till then this offers a
non-breaking upgrade path!

* wip

* Fix perception bindings (#2609)

* Fix runtime warning when binding accesses perceptible state.

* Fix runtime warning in SwiftUI bindings.

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* wip

* wip

* fix

* wip

* wip

* wip

* Check observable state identity for presentation state.

* Add willSset/didSet to registrar types.

* clean up @Presents

* clean up

* fix

* Emit observation warnings in escaping contexts like `ForEach` and `sheet` (#2613)

* Fix perception warning in ForEach.

* fix

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>

* Introduce @ViewAction(for:) macro. (#2612)

* Add back @ViewAction macro.

* wip

* wip

* wip

* wip

* wip

* clean up

* wip

* wip

* fix migration guide'

* ViewActionable

* wip

* rename

* wip

* wip

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* Introduce @BindableStore for bindings in pre-iOS 17 (#2610)

* Introduce @BindableStore.

* docs

* wip

* wip

* fixc

* wip

* wip

* wip

* wip

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* re-record intergration logs

* wip

* wip

* localize invalid stores to store collection

* Deprecate closure-based `store.scope` operations (#2618)

These uncached operations can be problematic, especially when working
with observation, which often depends on the stable identity of stores.

* document

* Update warning message

* Performance Improvement: Skip perception checks when calling reducers. (#2622)

* Skip perception checks when calling reducers.

* inline withoutPerceptionChecking() for RELEASE

Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>

---------

Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>

* Don't show perception warnings in action closures. (#2614)

* Don't show perception warnings in action closures.

* wip

* wip

* wip

* clean up

* wip

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* fix BindableStore + release

* Add docs

* Change associated type names of ViewActionSending (#2629)

* Fix some @ViewAction annoyances.

* wip

* wip

* wip

* wip

* wip

* wip

* fix

* wip

* fixed merge

* Add new view modifiers for observing alerts/dialogs (#2628)

* Add new view modifiers for observing alerts/dialogs

Instead of:

```swift
.alert(store: store.scope(state: \.$alert, action: \.alert))
```

You can now do:

```swift
.alert($store.scope(state: \.alert, action: \.alert))
```

This new modifier is powered by the same store binding scope operation
that can power `sheet(item:)`, etc., and is much lighter weight than the
previous view modifier, which spun up view stores and `WithViewStore`
views.

* wip

* wip

* wip

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>

* Fix uncached warning when using Store.ifLet (#2625)

* Fix uncached warning when using Store.ifLet

* wip

* wip

* wip

* wip

* wip

* wip

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* Resolve packages

* Updated scopes

* wip

* wip

* updated binding docs

* adding docs

* clean up

* wip

* wip

* wip

* clean up

* clean up

* clean up

* wip;

* lots of fixes

* update more docs

* fix

* wip

* wip

* Remove ObservationRegistrarWrapper. (#2634)

* Remove ObservationRegistrarWrapper.

* Delete Sources/ComposableArchitecture/Internal/ObservationRegistrarWrapper.swift

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* more docs

* update docs

* a few more tests

* fix

* wip

* wip

* wip

* Cache data in store collections (#2635)

* fix tutorial highlighting

* wip

* wip

* wip

* wip

* tests for observation of special domain types

* another test

* fix

* wip

* Implement memoization for perception checks (#2630)

* Implement memoization for isInSwiftUIBody

* tidy up

* Perception caching updates (#2649)

* Small updates to perception caching.

* wip

* debug

* some more macro tests

* syncups tutorial beginnings

* wip

* wip

* wip

* wip

* wip

* merge fixes

* wip

* update tests

* fix

* fix

* fix perception checking in store

* rename task local

* delete old test

* deprecate test using old apis

* fix test

* perception tests for store

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Opt out of key path for Store.ifLet

* sync ups

* lots more sync up tutorial

* more sync ups tutorial

* wip

* wip

* wio

* wip

* wip

* wip

* updated references of 1.6 to 1.7

* wip

* no need to force unwrap here

* fixed crash in ForEach with bindings

* more sync ups tutorial

* more sync ups tutorial

* wip

* more sync ups

* wip

* wip

* Better support for observing copies of values (#2650)

* Explore using _modify

* wip

* wip

* wip

* wip

* wip

* wip

* more tests

* wip

* get another failing test for an edge case

* wip

* tests all passing

* flag for determining when new state was created

* wip

* clean up

* wip

* wip

* wip;

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* New test that currently fails.

* wip

* wip

* Update Sources/ComposableArchitectureMacros/PresentsMacro.swift

* wip

* remove redundant attached member attribute

* storage

* cleanup

* more benchmarks and tests

* wip

* wip

* wip

* wip

* update tests

* wip

* wip

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>

* wip

* wip

* wip

* swift-format

* fix

* wip

* wip

* wip

* wip

* Perception

* wip

* wip

* clean up shared state

* fix shared state tests

* wip

* add alert test

* wip

* wip

* wip

* wip

* Use transaction in binding

* wip

* wip

* wip

* wip

* wip

* wip

* uikit

* keep references to controllers when presenting so that we can properly dismiss

* change order of features in shared state demo

* wip

* cleanup

* cleanup

* wip

* wip

* wip

* Fix perception checking for effect actions.

* wip

* wip

* wip

* Fix perception checking for effect actions.

* wip

* wip

* remove sync ups tutorial

* wip

* wip

* wip

* wip

* wip

* docs for observe function for uikit

* Add cancellation to observation'

* re-record integration test snapshots

* fixed some todos

* update test

* remove 5.9.2 checks

* wip

* improve docs

* update docs

* updates

* lots of fixes

* more docs

* remove unneeded file;

* wip

* wip

* wip

* update readme and getting started

* wip

* simplify

* migration stuff

* wip

* Update Models.swift

* wip

* wip

* wip

* Update Bindings.md

* wip

* wip

* wip

* wip

* fix

* wip

* wip

* wip

* wip

* wip

Co-authored-by: Kabir Oberai <oberai.kabir@gmail.com>

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>
Co-authored-by: hmhv <admin@hmhv.info>
Co-authored-by: Jimmy Prime <jimmylevelup@gmail.com>
Co-authored-by: Michael Pohl <15653162+Mika5652@users.noreply.github.com>
Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
Co-authored-by: George Scott <gscott@gekkoto.com>
Co-authored-by: Kabir Oberai <oberai.kabir@gmail.com>
2024-01-26 16:59:03 -08:00
Takuto NAKAMURA (Kyome)
4465e4eb59 Fix Composing features tutorial; Modify Make the State conform to Equatable to pass the test. (#2727)
* Make the State conform to Equatable to pass the test

* Add note about Equatable.

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>
2024-01-25 19:08:34 -08:00
hmhv
36331fcc4e fix to send action (#2726) 2024-01-25 09:17:01 -08:00
Jon Cox
d3a9465e2c Documentation: Fixed a small typo. (#2723) 2024-01-24 14:13:01 -08:00
Stephen Celis
969b5734fd Use XCTExpectFailure from XCTestDynamicOverlay (#2721)
The test store has dynamically loaded this helper for awhile now, but
now we can offload that work to another library.
2024-01-23 12:16:56 -08:00
Stephen Celis
11184dfa8c Update TestStore.swift (#2720) 2024-01-22 22:33:07 -08:00
Luke Redpath
d1eaa5d6aa Add stack action path element subscript to testing notes (#2704)
* Add stack action path element subscript to testing notes

Updates the stack navigation documentation to include information on how to test that a specific element action is received using case key paths.

Wording could maybe be improved but its a starting point.

* Update StackBasedNavigation.md

---------

Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
2024-01-16 14:03:42 -08:00
Shinichiro Oba
ac2e7ac1bc Fix "Composing features" tutorial (#2698)
* Fix the filename

* Add `@MainActor` and `async` for testing the feature

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>
2024-01-08 10:50:11 -08:00
Stephen Celis
ae491c9e3f Fix tutorial indentiation for diffs 2024-01-08 10:25:52 -08:00
Stephen Celis
1b1355cf1f Fix retain cycle in PresentationModifier (#2697) 2024-01-05 18:21:28 -08:00
Brandon Williams
97304efd52 Prepare dependencies a single time when creating Store. (#2695) 2024-01-05 15:21:45 -08:00
Stephen Celis
8e3ff3d927 Tutorial fixes (#2693)
Noted a few things while watching @vincent-pradeilles work his way
through it.
2024-01-04 13:39:15 -08:00
Shinichiro Oba
7dc85c9e54 Delete trailing whitespace to prevent unnecessary diffs (#2692) 2024-01-04 09:01:41 -08:00
Stephen Celis
24a1f368f8 Improve TestStore.receive(\.action, payload) failures (#2691)
This commit improves the failure messaging for the new
`TestStore.receive` method by rendering a diff of the value when the
payload doesn't match up.
2024-01-02 18:02:30 -08:00
Stephen Celis
16f428c5dc Remove state subscript key paths for coalescing optional state (#2690)
Due to a bug in Swift key paths
(https://github.com/apple/swift/issues/70611) we should use closures
when maintaining a memoized cache of optional child state.
2024-01-02 14:25:38 -08:00
stephencelis
5883f44f14 Run swift-format 2024-01-02 22:07:47 +00:00