2017-11-04 07:28:10 +08:00
|
|
|
# Code style
|
|
|
|
|
|
|
|
smoltcp does not follow the rustfmt code style because whitequark (the original
|
|
|
|
author of smoltcp) finds automated formatters annoying and impairing readability
|
|
|
|
just as much as improving it in different cases.
|
|
|
|
|
|
|
|
In general, format the things like the existing code and it'll be alright.
|
|
|
|
Here are a few things to watch out for, though:
|
|
|
|
|
|
|
|
## Ordering use statements
|
|
|
|
|
|
|
|
Use statements should be separated into two sections, uses from other crates and uses
|
|
|
|
from the current crate. The latter would ideally be sorted from most general
|
|
|
|
to most specific, but it's not very important.
|
|
|
|
|
|
|
|
```rust
|
|
|
|
use core::cell::RefCell;
|
|
|
|
|
2020-12-27 07:11:30 +08:00
|
|
|
use crate::{Error, Result};
|
|
|
|
use crate::phy::{self, DeviceCapabilities, Device};
|
2017-11-04 07:28:10 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
## Wrapping function calls
|
|
|
|
|
|
|
|
Avoid rightwards drift. This is fine:
|
|
|
|
|
|
|
|
```rust
|
|
|
|
assert_eq!(iface.inner.process_ethernet(&mut socket_set, 0, frame.into_inner()),
|
|
|
|
Ok(Packet::None));
|
|
|
|
```
|
|
|
|
|
|
|
|
This is also fine:
|
|
|
|
|
|
|
|
```rust
|
|
|
|
assert_eq!(iface.inner.lookup_hardware_addr(MockTxToken, 0,
|
|
|
|
&IpAddress::Ipv4(Ipv4Address([0x7f, 0x00, 0x00, 0x01])),
|
|
|
|
&IpAddress::Ipv4(remote_ip_addr)),
|
|
|
|
Ok((remote_hw_addr, MockTxToken)));
|
|
|
|
```
|
|
|
|
|
|
|
|
This is not:
|
|
|
|
|
|
|
|
```rust
|
|
|
|
assert_eq!(iface.inner.lookup_hardware_addr(MockTxToken, 0,
|
|
|
|
&IpAddress::Ipv4(Ipv4Address([0x7f, 0x00, 0x00, 0x01])),
|
|
|
|
&IpAddress::Ipv4(remote_ip_addr)),
|
|
|
|
Ok((remote_hw_addr, MockTxToken)));
|
|
|
|
```
|
|
|
|
|
|
|
|
## Wrapping function prototypes
|
|
|
|
|
|
|
|
A function declaration might be wrapped...
|
|
|
|
|
|
|
|
* right after `,`,
|
|
|
|
* right after `>`,
|
|
|
|
* right after `)`,
|
|
|
|
* right after `->`,
|
|
|
|
* right before and after `where`.
|
|
|
|
|
|
|
|
Here's an artificial example, wrapped at 50 columns:
|
|
|
|
|
|
|
|
```rust
|
|
|
|
fn dispatch_ethernet<Tx, F>
|
|
|
|
(&mut self, tx_token: Tx,
|
|
|
|
timestamp: u64, f: F) ->
|
|
|
|
Result<()>
|
|
|
|
where Tx: TxToken,
|
|
|
|
F: FnOnce(EthernetFrame<&mut [u8]>)
|
|
|
|
{
|
|
|
|
// ...
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Visually aligning tokens
|
|
|
|
|
|
|
|
This is fine:
|
|
|
|
|
|
|
|
```rust
|
|
|
|
struct State {
|
|
|
|
rng_seed: u32,
|
|
|
|
refilled_at: u64,
|
|
|
|
tx_bucket: u64,
|
|
|
|
rx_bucket: u64,
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
This is also fine:
|
|
|
|
|
|
|
|
```rust
|
|
|
|
struct State {
|
|
|
|
rng_seed: u32,
|
|
|
|
refilled_at: u64,
|
|
|
|
tx_bucket: u64,
|
|
|
|
rx_bucket: u64,
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
It's OK to change between those if you touch that code anyway,
|
|
|
|
but avoid reformatting just for the sake of it.
|