Skip to content

Правила форматирования структур данных


§8 Литералы

§8.1 Целочисленные литералы. Целочисленные литералы выводятся напрямую.

// ✅ Правильно
let x = 42;

§8.2 Литералы с плавающей точкой. Литералы с плавающей точкой должны содержать десятичную точку.

// ✅ Правильно
let x = 3.14;
let y = 42.0;  // Должна быть десятичная точка

// ❌ Неправильно
let y = 42;    // Целое число, а не с плавающей точкой

§8.3 Строковые литералы. По умолчанию используются двойные кавычки. Когда single_quote = true, используются одинарные кавычки.

// По умолчанию (двойные кавычки)
let s = "hello";

// single_quote = true
let s = 'hello';

§8.4 Булевы литералы. Булевы литералы используют нижний регистр.

// ✅ Правильно
let x = true;
let y = false;

// ❌ Неправильно
let x = True;
let y = FALSE;

§10 Списки и словари

§10.1 Формат списков. Списки заключаются в [], элементы разделяются запятыми.

// ✅ Правильно
let x = [1, 2, 3];

// ❌ Неправильно
let x = [1,2,3];

§10.2 Формат словарей. Словари заключаются в {}, пары ключ-значение используют формат key: value.

// ✅ Правильно
let x = {"a": 1, "b": 2};

// ❌ Неправильно
let x = {"a":1, "b":2};

§10.3 Генератор списков. Генератор списков использует формат [expr for var in iterable].

// ✅ Правильно
let x = [i * 2 for i in range(10)];

// С условием
let x = [i for i in range(10) if i > 5];

§11 Выражения Match

§11.1 Формат Match. Ключевое слово match отделяется от выражения пробелом.

// ✅ Правильно
match x { ... }

// ❌ Неправильно
match(x) { ... }

§11.2 Выравнивание Pattern. Несколько pattern должны быть выровнены с использованием пробелов для заполнения.

// ✅ Выровнено
match x {
    1    => "one",
    2    => "two",
    100  => "hundred",
    _    => "other",
}

§11.3 Перенос длинных Pattern. Когда pattern слишком длинный, pattern переносится, а => выравнивается с body.

// ✅ Перенос
match x {
    VeryLongPatternName { field1, field2 }
        => handle_case(field1, field2),
    _ => default_case(),
}

§11.4 Кортежи

§11.4.1 Формат кортежей. Кортежи заключаются в (), элементы разделяются запятыми.

// ✅ Правильно
let t = (1, "hello", true);
let t = (1,);  // Кортеж с одним элементом

// ❌ Неправильно
let t = (1, "hello", true);  // Пропущен пробел после запятой
let t = (1,"hello",true);  // Пропущен пробел после запятой

§11.4.2 Пустой кортеж. Пустой кортеж обозначается ().

// ✅ Правильно
let t = ();

§11.5 Индексация

§11.5.1 Формат индекса. Индексация использует формат expr[index].

// ✅ Правильно
let x = arr[0];
let y = matrix[i][j];

// ❌ Неправильно
let x = arr [0];  // Лишний пробел
let y = matrix[ i ][ j ];  // Лишние пробелы

§11.6 Доступ к полям

§11.6.1 Формат доступа к полям. Доступ к полям использует формат expr.field.

// ✅ Правильно
let x = obj.field;
let y = obj.method();

// ❌ Неправильно
let x = obj . field;  // Лишний пробел
let y = obj. field;  // Лишний пробел

§11.6.2 Цепочечный доступ к полям. Когда цепочечный доступ к полям превышает ширину строки, каждый вызов метода записывается на новой строке.

// При превышении ширины строки
let result = object.method1().method2().method3().method4();

// После форматирования
let result = object
    .method1()
    .method2()
    .method3()
    .method4();