feat: enhance the solidity test artifacts discovery
- [ ] Because this PR includes a bug fix, relevant tests have been included.
- [ ] Because this PR includes a new feature, the change was previously discussed on an Issue or with someone from the team.
- [x] I didn't do anything of this.
This PR makes the check whether an artifact is a test artifact more accurate. It implements the design described in https://www.notion.so/nomicfoundation/Test-Artifacts-Discovery-11f578cdeaf580bdb7e5c4268c5f248d
The base cases of the newly added isTestArtifact method have been tested using unit tests and manually.
It introduces 2 new dependencies:
-
@nomicfoundation/slang- 2.6M - direct -
@bytecodealliance/preview2-shim- 524K - transitive
The latest updates on your projects. Learn more about Vercel for Git ↗︎
| Name | Status | Preview | Comments | Updated (UTC) |
|---|---|---|---|---|
| hardhat | ✅ Ready (Inspect) | Visit Preview | 💬 Add feedback | Oct 28, 2024 11:23am |
⚠️ No Changeset found
Latest commit: 35622811beb3bfbc7269f83bcdf31ca000854ccd
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
Click here to learn what changesets are, and how to add one.
Click here if you're a maintainer who wants to add a changeset to this PR
hardhat
Total size of the bundle: 225M
Total number of dependencies (including transitive): 58
List of dependencies (sorted by size)
220M total
30M @ignored/edr-optimism-linux-x64-musl
30M @ignored/edr-optimism-linux-x64-gnu
27M @ignored/edr-optimism-linux-arm64-musl
27M @ignored/edr-optimism-linux-arm64-gnu
22M @ignored/edr-optimism-win32-x64-msvc
21M @ignored/edr-optimism-darwin-x64
20M esbuild
20M @ignored/edr-optimism-darwin-arm64
8.9M solc
2.8M @sentry/tracing
1.9M @noble/curves
1.7M undici
1.2M @sentry/types
1.2M @noble/hashes
932K @sentry/node
920K @sentry/utils
824K zod
796K @ignored/hardhat-vnext-utils
576K tsx
548K @sentry/core
504K fast-equals
492K @scure/bip39
460K @ignored/edr
384K @ignored/edr-optimism
368K ethereum-cryptography
344K @sentry/hub
320K enquirer
284K semver
268K @ignored/hardhat-vnext-errors
188K commander
168K @scure/base
136K adm-zip
128K get-tsconfig
96K @scure/bip32
92K chalk
88K tslib
88K @sentry/minimal
84K js-sha3
76K agent-base
72K @nomicfoundation/solidity-analyzer
68K debug
64K lru_map
64K https-proxy-agent
60K @ignored/hardhat-vnext-zod-utils
56K rfdc
56K follow-redirects
48K memorystream
48K command-exists
48K ansi-colors
44K tmp
40K resolve-pkg-maps
36K p-map
32K cookie
24K strip-ansi
24K env-paths
24K ansi-regex
20K os-tmpdir
20K ms
With https://github.com/NomicFoundation/edr/pull/705 in place, we could get away with being less strict when it comes to test contracts discovery. It still could be useful if, let's say, we wanted to ensure we don't spend time compiling files that have .t.sol extension but don't define any tests, but I don't think it's that important.
Let me know if you think we should simplify the isTestArtifact function by removing the source content checks, which in turn will allow us to remove the dependency on slang.
The above suggestion is implemented in https://github.com/NomicFoundation/hardhat/pull/5844 if we decide to proceed with it.
Agreed, that's exactly what I discovered when playing around with compilation for the test task. I'm going to share my thoughts on that later today in a doc.