Skip modified compilation for namespaces if solc < 0.8.20 #892
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.
To support namespaced storage validations, the Hardhat Upgrades plugin overrides the Hardhat compile phase to also make a modified copy and compilation of all contracts so that any namespaced structs' storage layouts can be extracted. This requires use of the AST to detect source locations and modify the source code accordingly.
In old versions of Solidity such as 0.5.x, the AST does not provide source locations for certain nodes, such as documentation nodes. This leads to an error such as #891.
To avoid this, we should skip the modified copy/compilation step for namespaced storage if the solc version is < 0.8.20.
Note that for versions of solc < 0.8.20, namespaced storage validation is not supported anyways because the Solidity compiler does not output struct documentation in the AST. We already throw an error if we detect namespaces being used with solc < 0.8.20, so the modified namespaced compilation is not needed for these cases.
Fixes #891