forked from FuelLabs/sway
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds documentation for Sway attributes. (FuelLabs#4203)
## Description Adds Documentation for allow, doc, inline, payable, storage, and test attributes. Closes FuelLabs#3302 Closes FuelLabs#4114 ## 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). - [ ] 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. --------- Co-authored-by: João Matos <[email protected]>
- Loading branch information
Showing
2 changed files
with
53 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# Attributes | ||
|
||
The Sway compiler supports a list of attributes that perform various operations that are useful for building, testing and documenting Sway programs. Below is a list of all available attributes: | ||
|
||
## Allow | ||
|
||
The `#[allow(dead_code)]` attribute overrides the check for dead code so that violations will go unreported. | ||
|
||
## Doc | ||
|
||
The `#[doc(..)]` attribute specifies documentation. | ||
|
||
Line doc comments beginning with exactly three slashes `///`, are interpreted as a special syntax for doc attributes. That is, they are equivalent to writing `#[doc("...")]` around the body of the comment, i.e., `/// Foo` turns into `#[doc("Foo")]` | ||
|
||
Line comments beginning with `//!` are doc comments that apply to the module of the source file they are in. That is, they are equivalent to writing `#![doc("...")]` around the body of the comment. `//!` module level doc comments should be at the top of Sway files. | ||
|
||
Documentation can be generated from doc attributes using `forc doc`. | ||
|
||
## Inline | ||
|
||
The inline attribute suggests that a copy of the attributed function should be placed in the caller, rather than generating code to call the function where it is defined. | ||
|
||
> **Note**: The Sway compiler automatically inlines functions based on internal heuristics. Incorrectly inlining functions can make the program slower, so this attribute should be used with care. | ||
The `#[inline(never)]` attribute *suggests* that an inline expansion should never be performed. | ||
|
||
The `#[inline(always)]` attribute *suggests* that an inline expansion should always be performed. | ||
|
||
> **Note**: `#[inline(..)]` in every form is a hint, with no *requirements* | ||
on the language to place a copy of the attributed function in the caller. | ||
|
||
## Payable | ||
|
||
The lack of `#[payable]` implies the method is non-payable. When calling an ABI method that is non-payable, the compiler emits an error if the amount of coins forwarded with the call is not guaranteed to be zero. Note that this is strictly a compile-time check and does not incur any runtime cost. | ||
|
||
## Storage | ||
|
||
In Sway, functions are pure by default but can be opted into impurity via the `storage` function attribute. The `storage` attribute may take `read` and/or `write` arguments indicating which type of access the function requires. | ||
|
||
The `#[storage(read)]` attribute indicates that a function requires read access to the storage. | ||
|
||
The `#[storage(write)]` attribute indicates that a function requires write access to the storage. | ||
|
||
More details in [Purity](../blockchain-development/purity.md). | ||
|
||
## Test | ||
|
||
The `#[test]` attribute marks a function to be executed as a test. | ||
|
||
The `#[test(should_revert)]` attribute marks a function to be executed as a test that should revert. | ||
|
||
More details in [Unit Testing](../testing/unit-testing.md). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters