It's been a couple months since our last update. In this time, we've merged a total of 20 pull requests from 7 different contributors. Here are some highlights.
We shipped 2 more releases
As always, you can find the binaries and notes on the release pages.
self
as a parameter
The self
value is no longer implicitly defined in all code blocks. It must now be declared as the first parameter in a contract function signature.
This change was made as part of an effort to make function access more explicit. There is a similar change coming with #558.
Added in #520.
fn
instead of def
Fe no longer uses the def
keyword as a label for function definitions. We use fn
instead now. This makes the syntax more clear.
Added in #496.
Query-based analysis
The analyzer was previously implemented as a single pass through the AST, which meant that it wasn't possible to refer to a type defined later in the file or define recursive types. To solve this problem and to improve the overall design of the analyzer, we now use Salsa, and thus a query-based style.
Salsa is used extensively in rust-analyzer, which is where we got the idea to use it.
Added in #468.
Other features and bugfixes
- Typo fix in docs (thanks @jacobkaufmann!) #549
- Fuzzer crash fixed #546
- Readme improvements (thanks @zora89!) #544
- Pretty printed display of AST #540
- Analyzer checks for shadowing of built-ins and generic arg lists where they don't belong #539
- Don't ignore non-fatal parser errors when analysis succeeds #535
- Fix "analysis failed but no diagnostics were emitted" panics #534
- Add support for numeric invert operator #526
- Check labels in function calls on self and external contracts #518
- Cover all remaining statements and expressions in the spec #514
- Fuzzer crash fixed (thanks @andy-ow!) #510
let
var decl (thanks @WilfredTA!) #509- Validate string literals to only allow a subset of ASCII chars #506
- Reject certain code that should return but doesn't #502
- Overhaul spec content #489
What's next
We are still focused on cutting a beta release before the end of the year and will keep the community updated. For more information about our immediate goals and to see whats under development, please see the issues and PRs in our repository.
Stay tuned for more updates and monthly releases.