Основные правила форматирования
§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 Стратегия переноса строк. Когда строка превышает максимальную ширину, необходимо выполнить перенос в подходящем месте. Приоритет позиций переноса:
- После операторов низкого приоритета (
+,-,or,and,=) - Список аргументов функции
- Элементы списка/словаря
- После операторов высокого приоритета (
*,/,%,==,!=)
§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 Формат блока кода. Блок кода заключается в фигурные скобки {}, перед открывающей скобкой ставится пробел.
// ✅ 正确
fn foo() {
let x = 1;
}
// ❌ 错误
fn foo(){
let x = 1;
}
fn foo()
{
let x = 1;
}§6.2 Однострочный блок кода. Когда блок кода содержит только одну строку и его общая длина не превышает ширину строки, можно использовать однострочный формат.
// ✅ 单行格式
fn foo() { 1 }
// ✅ 多行格式
fn foo() {
let x = 1;
let y = 2;
x + y
}§6.3 Пустой блок кода. Пустой блок кода обозначается как {}.
// ✅ 正确
fn foo() {}
// ❌ 错误
fn foo() {
}