-
Notifications
You must be signed in to change notification settings - Fork 269
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactor and clean up the SyncService #4543
Open
poljar
wants to merge
12
commits into
main
Choose a base branch
from
poljar/offline-mode-sync-service-pr
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+276
−205
Open
Changes from 1 commit
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
e5763d6
refactor(ui): Move common data of the SyncService under a lock
poljar a735180
refactor(ui): Rename the scheduler task to supervisor task
poljar d00e609
refactor(ui): Create a Supervisor for the SyncService
poljar 31cd71f
refactor(ui): Move the spawning of the child tasks into the supervisor
poljar 8231688
refactor(ui): Move the expiration of the sync services closer to the …
poljar 564a1f1
refactor(ui): Move the task spawning functions under the supervisor
poljar c1adf90
refactor(ui): Remove some early returns from the sync service
poljar f6b759c
refactor(ui): Prettify the two sync tasks a bit
poljar 2261c6d
fix(ui): Shutdown the child tasks if the channel got closed in the su…
poljar 5f62220
docs(ui): Polish the documentation of the SyncService a bit
poljar 9ae0235
fixup! refactor(ui): Move common data of the SyncService under a lock
poljar b38e8b9
fixup! refactor(ui): Prettify the two sync tasks a bit
poljar File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change feels like a regression: it adds one extra level of indent, for absolutely no extra value. I see the point of doing it in the other function because the body's size is so small there (in particular, there's no control flow), but it's not the case here, so this just adds visual clutter :/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The body size of the
SyncService::start()
andSyncService::stop()
methods was reduced to just a couple of lines in a previous commit, allowing us to do exactly this without introducing visual clutter from indentation.The value becomes clear when you consider what needs to happen if someone adds another enum variant—something I plan to do.
Consider the examples:
First, the pattern where we flatten out one branch to remove the indentation:
Now the way it is in the pull-request:
When we add a new variant, I’ll either need to convert the first variant into the second, or introduce even more early returns, which would make the flow even less clear:
I hope we can agree that adding more variants would make the flow of execution even more convoluted.
In contrast, the second variant naturally provides a clear place to add a new branch, that's precisely what pattern matching is here for.
I would urge you to reconsider your stance on this pattern and code style, and to evaluate how flattening the branches of a pattern match might affect the extensibility of the codebase.
Early returns have their, in my opinion, limited use—but this ain't it, babe. 🎶
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That you planned to add another variant is something I wasn't aware of, and couldn't guess, so that makes sense in this case 👍
No, I'd rather have you reconsider your stance: more early returns make for fewer indent levels, and more "linear" / "simple" / "beautiful" code, where all the assumptions are checked upfront, and then the actual work is done later. Agree to disagree here :-)