Базовые правила форматирования
§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 Формат блоков кода. Блоки кода заключаются в фигурные скобки {}, перед открывающей скобкой ставится пробел.
// ✅ Правильно
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() {
}