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

fix: Allow trait method references from the trait name #3774

Merged
merged 14 commits into from
Dec 13, 2023

Conversation

jfecher
Copy link
Contributor

@jfecher jfecher commented Dec 11, 2023

Description

Problem*

Resolves #3773
Part of #2568

Summary*

This PR implements the ability to be able to call trait methods such as Default::default() where previously we required StructName::default(). The specific impl is selected via type inference. Previously, this resulted in a compiler panic.

Additional Context

When a trait method's type isn't constrained enough or is otherwise still ambiguous after type inference, the compiler currently just selects the first trait implementation that matches. E.g. let _ = Default::default();. This is a separate issue, so I'll create a new issue for this.

Documentation*

Check one:

  • No documentation needed.
  • Documentation included in this PR.
  • [Exceptional Case] Documentation to be submitted in a separate PR.
    • I think traits are finally stable enough to start writing documentation for. I'm going to submit another PR to remove some of the experimental warnings the compiler has for traits, and with it add documentation for traits as well. This wouldn't stabilize all trait features (e.g. associated types are still unimplemented), but users will now be able to use basic traits with functions without warnings. Any unimplemented trait items (associated types again) will not be included in the documentation.

PR Checklist*

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt on default settings.

@jfecher
Copy link
Contributor Author

jfecher commented Dec 12, 2023

This PR is now ready for review

@jfecher
Copy link
Contributor Author

jfecher commented Dec 12, 2023

Frontend tests should be fixed now. Something odd is going on in them - they have unused variable warnings and one duplicated error. Neither of which occur when running nargo execute on the same source program.

@jfecher jfecher added this pull request to the merge queue Dec 13, 2023
Merged via the queue into master with commit cfa34d4 Dec 13, 2023
35 checks passed
@jfecher jfecher deleted the jf/trait-func-meta branch December 13, 2023 14:47
github-merge-queue bot pushed a commit that referenced this pull request Dec 13, 2023
# Description

## Problem\*


## Summary\*

After #3774 is merged we can merge
this PR to remove the experimental warning when using most trait
features. This PR also provides documentation for traits.

## Additional Context

Since there are still some unimplemented trait features I've added
experimental warnings for:
- Placing generics on the trait itself
- Associated types on traits
- Associated constants on traits

## Documentation\*

Check one:
- [ ] No documentation needed.
- [x] Documentation included in this PR.
- [ ] **[Exceptional Case]** Documentation to be submitted in a separate
PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

---------

Co-authored-by: Tom French <tom@tomfren.ch>
Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
TomAFrench added a commit that referenced this pull request Dec 14, 2023
* master: (25 commits)
  chore!: Make file manager read-only to the compiler (#3760)
  feat: Add some traits to the stdlib (#3796)
  fix: Stop issuing unused variable warnings for variables in trait definitions (#3797)
  fix(lsp): package resolution on save (#3794)
  chore: clippy fix (#3793)
  feat: Remove experimental feature warning for traits (#3783)
  fix: Allow trait method references from the trait name (#3774)
  chore: adds a new option only-acir (#3683)
  feat(lsp): add goto definition for structs (#3718)
  chore: disable code lens feature of lsp (#3789)
  chore: moving ordering to category jsons and frontmatters (#3777)
  chore(ci): use `actions/setup-node` for caching yarn dependencies (#2730)
  fix: remove `noirc_driver/aztec` feature flag in docker (#3784)
  chore: remove aztec compile time feature flag (#3596)
  chore: move debugger tests in submodule (#3780)
  feat: simplify explicit equality assertions to assert equality directly (#3708)
  fix(ssa): Handle array arguments to side effectual constrain statements (#3740)
  feat: add `prelude.nr` (#3693)
  chore: removing old docs (#3778)
  feat: avoid overflow checks on boolean multiplication (#3745)
  ...
TomAFrench added a commit that referenced this pull request Dec 14, 2023
* master: (148 commits)
  feat: add support for writing tracing debug info to file (#3790)
  chore: clippy fix (#3803)
  chore(ci): enforce timeouts on build and test workflows (#3804)
  chore!: remove unused `source-resolver` package (#3791)
  chore!: Make file manager read-only to the compiler (#3760)
  feat: Add some traits to the stdlib (#3796)
  fix: Stop issuing unused variable warnings for variables in trait definitions (#3797)
  fix(lsp): package resolution on save (#3794)
  chore: clippy fix (#3793)
  feat: Remove experimental feature warning for traits (#3783)
  fix: Allow trait method references from the trait name (#3774)
  chore: adds a new option only-acir (#3683)
  feat(lsp): add goto definition for structs (#3718)
  chore: disable code lens feature of lsp (#3789)
  chore: moving ordering to category jsons and frontmatters (#3777)
  chore(ci): use `actions/setup-node` for caching yarn dependencies (#2730)
  fix: remove `noirc_driver/aztec` feature flag in docker (#3784)
  chore: remove aztec compile time feature flag (#3596)
  chore: move debugger tests in submodule (#3780)
  feat: simplify explicit equality assertions to assert equality directly (#3708)
  ...
kevaundray added a commit that referenced this pull request Dec 15, 2023
🤖 I have created a release *beep* *boop*
---


<details><summary>0.21.0</summary>

## [0.21.0](v0.20.0...v0.21.0)
(2023-12-15)


### ⚠ BREAKING CHANGES

* remove unused `source-resolver` package
([#3791](#3791))
* Make file manager read-only to the compiler
([#3760](#3760))

### Features

* Add `prelude.nr`
([#3693](#3693))
([5f0f81f](5f0f81f))
* Add some traits to the stdlib
([#3796](#3796))
([8e11352](8e11352))
* Add support for writing tracing debug info to file
([#3790](#3790))
([98a5004](98a5004))
* Allow passing custom foreign call handlers when creating proofs in
NoirJS ([#3764](#3764))
([6076e08](6076e08))
* Allow underscores in integer literals
([#3746](#3746))
([2c06a64](2c06a64))
* Avoid overflow checks on boolean multiplication
([#3745](#3745))
([9b5b686](9b5b686))
* Aztec-packages
([#3754](#3754))
([c043265](c043265))
* Dockerfile to test cargo and JS packages
([#3684](#3684))
([513d619](513d619))
* Docs landing page with a playground
([#3667](#3667))
([9a95fbe](9a95fbe))
* Enhance test information output
([#3696](#3696))
([468fbbc](468fbbc))
* Implement print without newline
([#3650](#3650))
([9827dfe](9827dfe))
* **lsp:** Add goto definition for locals
([#3705](#3705))
([9dd465c](9dd465c))
* **lsp:** Add goto definition for structs
([#3718](#3718))
([a576c5b](a576c5b))
* Optimize out unnecessary truncation instructions
([#3717](#3717))
([c9c72ae](c9c72ae))
* Remove experimental feature warning for traits
([#3783](#3783))
([cb52242](cb52242))
* Reorganizing docs to fit diataxis framework
([#3711](#3711))
([54a1ed5](54a1ed5))
* Simplify explicit equality assertions to assert equality directly
([#3708](#3708))
([2fc46e2](2fc46e2))
* Speed up transformation of debug messages
([#3815](#3815))
([2a8af1e](2a8af1e))


### Bug Fixes

* `try_unify` no longer binds types on failure
([#3697](#3697))
([f03e581](f03e581))
* Add missing assertion to test
([#3765](#3765))
([bcbe116](bcbe116))
* Add negative integer literals
([#3690](#3690))
([8b3a68f](8b3a68f))
* Allow trait method references from the trait name
([#3774](#3774))
([cfa34d4](cfa34d4))
* Deserialize odd length hex literals
([#3747](#3747))
([4000fb2](4000fb2))
* **docs:** Trigger `update-docs` workflow when the `release-please` PR
gets merged and not on every merge to master
([#3677](#3677))
([9a3d1d2](9a3d1d2))
* Initialise strings as u8 array
([#3682](#3682))
([8da40b7](8da40b7))
* **lsp:** Package resolution on save
([#3794](#3794))
([14f2fff](14f2fff))
* Parse negative integer literals
([#3698](#3698))
([463ab06](463ab06))
* Pub is required on return for entry points
([#3616](#3616))
([7f1d796](7f1d796))
* Remove `noirc_driver/aztec` feature flag in docker
([#3784](#3784))
([a48d562](a48d562))
* Remove include-keys option
([#3692](#3692))
([95d7ce2](95d7ce2))
* Revert chnage to modify version in workspace file for acvm
dependencies ([#3673](#3673))
([0696f75](0696f75))
* Sequence update-lockfile workflow so it gets modified after the ACVM
version in the root has been changed
([#3676](#3676))
([c00cd85](c00cd85))
* **ssa:** Handle array arguments to side effectual constrain statements
([#3740](#3740))
([028d65e](028d65e))
* Stop cloning Traits!
([#3736](#3736))
([fcff412](fcff412))
* Stop issuing unused variable warnings for variables in trait
definitions ([#3797](#3797))
([0bb44c3](0bb44c3))
* Unsigned integers cannot be negated
([#3688](#3688))
([f904ae1](f904ae1))


### Miscellaneous Chores

* Make file manager read-only to the compiler
([#3760](#3760))
([e3dcc21](e3dcc21))
* Remove unused `source-resolver` package
([#3791](#3791))
([57d2505](57d2505))
</details>

<details><summary>0.37.1</summary>

## [0.37.1](v0.37.0...v0.37.1)
(2023-12-15)


### Features

* Aztec-packages
([#3754](#3754))
([c043265](c043265))
* Speed up transformation of debug messages
([#3815](#3815))
([2a8af1e](2a8af1e))


### Bug Fixes

* Deserialize odd length hex literals
([#3747](#3747))
([4000fb2](4000fb2))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
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.

Static trait method references lead to a compiler panic
3 participants