Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove DeRef and DeRefMut implementations in the namespace module #5577

Merged
merged 12 commits into from
Feb 8, 2024

Conversation

jjcnn
Copy link
Contributor

@jjcnn jjcnn commented Feb 8, 2024

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

  • I have linked to any relevant issues.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have updated the documentation where relevant (API docs, the reference, and the Sway book).
  • I have added tests that prove my fix is effective or that my feature works.
  • I have added (or requested a maintainer to add) the necessary Breaking* or New Feature labels where relevant.
  • I have done my best to ensure that my PR adheres to the Fuel Labs Code Review Standards.
  • I have requested a review from the relevant team or maintainers.

@jjcnn jjcnn requested a review from a team February 8, 2024 09:36
forc-pkg/src/pkg.rs Outdated Show resolved Hide resolved
@jjcnn jjcnn merged commit 51e8c9d into master Feb 8, 2024
34 checks passed
@jjcnn jjcnn deleted the jjcnn/namespace-refactor branch February 8, 2024 11:32
sdankel pushed a commit that referenced this pull request Feb 8, 2024
…le (#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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants