Skip to content

Commit

Permalink
Adds documentation for Sway attributes. (FuelLabs#4203)
Browse files Browse the repository at this point in the history
## 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
esdrubal and tritao authored Mar 2, 2023
1 parent 1bba22e commit 829cb7c
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
52 changes: 52 additions & 0 deletions docs/book/src/reference/attributes.md
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).
1 change: 1 addition & 0 deletions docs/book/src/reference/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Sway Reference

- [Compiler Intrinsics](./compiler_intrinsics.md)
- [Attributes](./attributes.md)
- [Style Guide](./style_guide.md)
- [Known Issues and Workarounds](./known_issues_and_workarounds.md)
- [Differences from Rust](./rust_differences.md)
Expand Down

0 comments on commit 829cb7c

Please sign in to comment.