You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Remove DeRef and DeRefMut implementations in the namespace module (#5577)
## Description
This PR is the first step of a large refactoring of the `namespace`
module.
The PR removes the `DeRef` and `DeRefMut` implementations in the
`namespace` module, as they make refactoring more difficult to keep
track of. This change means that calls to `Root` and `Module` must now
explicitly go through `Namespace`, since that is the type that is passed
along during typechecking.
I'm submitting the PR now because there have been changes to `master`
while I've been working on this, and the changes are really difficult to
merge, so I want `master` to be relatively stable.
Subsequent PRs will:
- Eliminate the `dst` parameter from all import functions (the
destination is always the current module).
- Move all import functions to `Namespace` (they currently reside in
`Module` where they aren't needed, and where they require a clone the
module path to work).
- Move `Namespace::init` to `Root`, and change how it is used (it
currently holds a constant declaration of `CONTRACT_ID` for contract
modules, and that declaration is cloned into every submodule. The nice
way to do this is to declare it in the root module and implicitly import
it into each submodule).
- Eliminate the `Option` part of `Module::name` (modules are not allowed
to be nameless - the option only exists because they root module can in
principle be nameless, but it ought to be named based on the package the
module structure is in).
- Fix the import and name resolution functions so that they don't treat
absolute paths as relative (this should fix some of the performance
issues we're seeing).
- Make `Namespace::root` a reference so that the entire module structure
isn't cloned for every submodule (this requires a change in ownership of
the root module).
- Introduce reexports in the form of `pub use`.
This PR is the first step in fixing #5498.
## Checklist
- [x] I have linked to any relevant issues.
- [x] I have commented my code, particularly in hard-to-understand
areas.
- [x] I have updated the documentation where relevant (API docs, the
reference, and the Sway book).
- [x] I have added tests that prove my fix is effective or that my
feature works.
- [x] I have added (or requested a maintainer to add) the necessary
`Breaking*` or `New Feature` labels where relevant.
- [x] I have done my best to ensure that my PR adheres to [the Fuel Labs
Code Review
Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md).
- [x] I have requested a review from the relevant team or maintainers.
0 commit comments