基礎フォーマットルール
§1 インデント
§1.1 インデント幅。 デフォルトで4スペースのインデントを使用。indent_width設定項目で変更可能。
// デフォルトインデント(4スペース)
fn foo() {
let x = 1;
if x > 0 {
print(x);
}
}
// 2スペースインデント(indent_width = 2)
fn foo() {
let x = 1;
if x > 0 {
print(x);
}
}§1.2 タブによるインデント。 use_tabs = trueの場合、タブ文字でインデント。デフォルトはfalse。
§1.3 インデントの一貫性。 同一ファイル内でタブとスペースを混用してはならない。
§2 行幅
§2.1 最大行幅。 デフォルトの最大行幅は120文字。line_width設定項目で変更可能。
§2.2 改行戦略。 行が最大行幅を超える場合、適切な位置で改行する必要がある。改行位置の優先順位:
- 低優先度演算子の後(
+,-,||,&&,=) - 関数引数リスト
- リスト/辞書要素
- 高優先度演算子の後(
*,/,%,==,!=)
§2.3 改行後のインデント。 改行後の内容は必ず一段インデントを増やす。
// 行幅を超える場合の改行
let result = very_long_variable_name + another_long_name + yet_another_long_name;
// フォーマット後
let result = very_long_variable_name
+ another_long_name
+ yet_another_long_name;§3 演算子
§3.1 演算子のスペース。 二項演算子の両側にスペースが必要。
// ✅ 正しい
let x = 1 + 2;
let y = a == b;
// ❌ 間違い
let x = 1+2;
let y = a==b;§3.2 単項演算子。 単項演算子と被演算子の間にはスペースを入れない。
// ✅ 正しい
let x = -1;
let y = !flag;
let z = *ptr;
// ❌ 間違い
let x = - 1;
let y = ! flag;§3.3 低優先度演算子の改行。 式が行幅を超える場合、低優先度演算子は新しい行の先頭に置く。
// 行幅を超える場合
let result = first_value + second_value + third_value + fourth_value;
// フォーマット後
let result = first_value
+ second_value
+ third_value
+ fourth_value;§3.4 高優先度演算子の改行。 高優先度演算子は新しい行の先頭に置く。
// 行幅を超える場合
let result = first_value * second_value / third_value % fourth_value;
// フォーマット後
let result = first_value
* second_value
/ third_value
% fourth_value;§3.5 変数の参照
§3.5.1 変数名。 変数の参照は変数名をそのまま出力し、追加のスペースは入れない。
// ✅ 正しい
let x = my_variable;
let y = camelCaseName;
// ❌ 間違い
let x = my_variable ; // 余分なスペース
let y = "camelCaseName"; // 引用符は不要§6 コードブロック
§6.1 コードブロックの形式。 コードブロックは波括弧{}で囲み、開括弧の前にスペースを1つ入れる。
// ✅ 正しい
fn foo() {
let x = 1;
}
// ❌ 間違い
fn foo(){
let x = 1;
}
fn foo()
{
let x = 1;
}§6.2 単一行コードブロック。 コードブロックが1行のみで、总横幅が行幅を超えない場合、単一行形式可以使用。
// ✅ 単一行形式
fn foo() { 1 }
// ✅ 複数行形式
fn foo() {
let x = 1;
let y = 2;
x + y
}§6.3 空のコードブロック。 空のコードブロックは{}で表す。
// ✅ 正しい
fn foo() {}
// ❌ 間違い
fn foo() {
}