Hello!
If you're reading this, you probably want to contribute to Mlem. Welcome! We're happy to have you on board. You may wish to join our Matrix room if you haven't already.
This project makes use of SwiftLint. This runs as part of the Xcode build phases.
In order to benefit please ensure you have Homebrew installed on your system and then run the following command to install Swiftlint:
brew install swiftlint
To avoid having multiple in-flight tasks working on the same part of the codebase, we have a set procedure for claiming and performing work. If you don't follow it, your PR will probably be rejected (unless it's really that good).
- Go to our project board.
- Find an unassigned issue under the "Todo" section that you'd like to work on.
- Comment that you would like the issue to be assigned to you.
- Wait for the task to be assigned to you! This is very important for avoiding merge conflicts.
- Fork the repository (if you haven't already) and develop the changes on your fork. It is important that you create your development branch using the upstream
dev
branch as the source, not themaster
branch. - Open a Pull Request for your changes. Your PR should be able to merge with no conflicts - if conflicting changes are made to the
dev
branch before your PR is merged, you will have to resolve the conflicts or rebase your changes.
When your code is approved, it can be merged into the dev
branch by a member of the development team. If you need to tinker with your changes post-approval, please make a comment that you are doing so. PRs that sit approved for more than 12 hours with no input from the dev may be merged if they are blocking other work.
Please develop according to the following principles:
- One View per file. A file containing a View struct must end in "View". We're yet to decide on an official naming scheme for files - feel free to offer your thoughts here.
- Within reason, any complex of views that renders a single component of a larger view should be placed in a descriptively named function, computed property or
@ViewBuilder
variable beneath the body of the View. This keeps pyramids from piling up and makes our accessibility experts' work easier. - If you can reuse code, do. Prefer abstracting common components to a generic struct and common logic to a generic function.
We operate a Lemmy Instance at https://test-mlem.jo.wtf/ which you may use for testing purposes.