ReviewChecklist.md
The Solidity compiler is a critical piece of infrastructure in the Ethereum ecosystem. For this reason, our review process is quite strict and all PRs have to fulfill certain quality expectations and guidelines. The list below is meant to reduce the workload on the core team by helping contributors self-identify and solve common issues before they are pointed out in the review. It is also meant to serve as a final checklist for reviewers to go through before approving a PR.
nice to have, should have,
must have eventually, must have, roadmap) we have not yet decided whether to implement it.needs design label, we have not yet decided how it should be implemented.good first issue candidate means that the issue will potentially be a good first issue
eventually but at the moment it is not yet ready to be worked on.breaking branch rather than on the develop branch.Fixes #<issue number> form so that Github will close the issue automatically.fix-array-abi-encoding-bug.
Do not submit PRs directly from the develop branch of your fork since it makes rebasing and fetching new changes harder.develop or breaking because
GitHub closes them when the base branch gets merged.
Do this only for PRs created directly in the main repo._soltest_, jobs in CI.
In many cases the expectations can be updated automatically:
cmdlineTests.sh --update for command-line tests.isoltest --enforce-gas-cost --accept-updates for soltest-based tests.
isoltest --enforce-gas-cost --optimize --accept-updates is needed to update gas expectations with optimizer enabled.takeover label if the PR can be finished without significant effort or is something that actually needs to be done right now.
Otherwise close it.
It can still be taken over later or reopened by the submitter but until then we should not be getting sidetracked by it.Before an in-depth review, it is recommended to give new PRs a quick, superficial review, which is not meant to provide complete and detailed feedback, but instead give the submitter a rough idea if the PR is even on the right track and let them solve the obvious problems on their own.
Light review should focus on the following three areas:
If the answers above are "Yes, Yes, No", thank the contributor for their effort and close the PR.
solAssert().The following points are all covered by the coding style but come up so often that it is worth singling them out here:
T const*, not const T *..editorconfig.
auto sparingly. Only use it when the actual type is very long and complicated or when it is
already used elsewhere in the same expression.using namespace only in .cpp files. Use it for std and our own modules.
Avoid unnecessary std:: prefix in .cpp files (except for std::move and std::forward).``x``). Prefer single backticks in Markdown (`x`),
but note that double backticks are valid too and we use them in some cases for legacy reasons.ASTJSON test?CommandLineParser tests?address, address payable, bool? Function pointers?
Static and dynamic arrays? string and bytes? Mappings?
Values of types that cannot be named: literals, tuples, array slices, storage references?using for?storage, memory, calldata, immutable, constant?
Remember that internal functions can take storage arguments.pragma solidity *.urls instead of content and put
the Solidity or Yul code in a separate file.develop branch (or breaking if it is a breaking change)?_ext_ in the name).
If these fail, rebase on latest develop (or breaking) and try rerunning them.
Note also that not all of these checks are required for the PR to be merged.external contribution label to mark PRs not coming from the core team.has dependencies and set the base branch accordingly.documentation or optimizer are helpful for filtering PRs.