Skip to content

Основные правила форматирования ​


§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 Стратегия переноса строк. Когда строка превышает максимальную ширину, необходимо выполнить перенос в подходящем месте. Приоритет позиций переноса:

  1. После операторов низкого приоритета (+, -, or, and, =)
  2. Список аргументов функции
  3. Элементы списка/словаря
  4. После операторов высокого приоритета (*, /, %, ==, !=)

§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() {
}