Пользуетесь ли вы rustfmt?

  • пользуюсь без конфига
  • пользуюсь с конфигом
  • вообще не пользуюсь

0 голосов

К ответившим “пользуюсь с конфигом” просьба, если возможно, показать конфиг.

К ответившим “вообще не пользуюсь” просьба рассказать почему именно.

Использую такой конфиг:

merge_imports = true

Несколько ответов из телеграма:

Rostyslav Shevtsiv: IntelliJ Rust использует rustfmt при Ctrl+Alt+L? Насколько помню, вроде бы, нет, вот поэтому и не пользуюсь.

Sergey (Have been caught for Greater Good): не пользуюсь, просто привычка; хотя может стоит поставить merge_imports

Tux: я приверженец табов

Bogdan:
хз как им пользоваться, и как его заюзать вообще. Типо кажыдй раз руками дергаить? или в гит хуки настроить?
Штка какая-то не очень очевидная. Для человека написавашено на расте строчек 200 кода, пока-что :slight_smile:
кстати говоря, юзаю формтаер идейки

У меня везде вот так.

reorder_imports = false
reorder_modules = false
tab_spaces = 4
hard_tabs = false
# try! -> ?
use_try_shorthand = true
### Ustable features
unstable_features = true
reorder_impl_items = true
indent_style = "Block"
trailing_comma = "Vertical"
match_block_trailing_comma = false
blank_lines_upper_bound = 2
space_after_colon = true
struct_field_align_threshold = 0 # выравнивание варов
enum_discrim_align_threshold = 0 # выравнивание варов
fn_args_density = "Compressed" # "Compressed", <"Tall">, "Vertical"
format_strings = true
force_multiline_blocks = true # Force multiline closure and match arm bodies to be wrapped in a block
normalize_comments = true # single /* */ -> //
overflow_delimited_expr = true # &[, vec![ -> same line (ups)

Мой конфиг

max_width = 120
format_doc_comments = true
normalize_comments = true
normalize_doc_attributes = true
format_strings = true
format_macro_matchers = true
format_macro_bodies = true
empty_item_single_line = true
struct_lit_single_line = true
wrap_comments = true
reorder_imports = true
reorder_modules = true
remove_nested_parens = true
combine_control_expr = true
merge_derives = true
unstable_features = true
error_on_line_overflow = true
error_on_unformatted = true
edition = "2018"

Запилил себе пустую репу-шаблон для проектов.

Конфиг:

fn_args_density = "Tall"
fn_single_line = false
format_strings = true
format_macro_matchers = true

merge_imports = true
reorder_impl_items = true
use_field_init_shorthand = true

blank_lines_upper_bound = 2
max_width = 90

match_block_trailing_comma = true
1 лайк

Юзаю автоформат Идеи. Фиг знает на чём он основан.

1 лайк

В плагине Rust для IntelliJ можно включить rustfmt на Ctrl-Alt-L.

Удивило что так много людей со своими конфигами. Зачем? :slight_smile:

Потому что не всех устраивает дефолтный стиль форматирования. У нас целые голосования за каждый пункт конфига были.

Я скорее про детали, что не всех устраивает это понятно.

Типа выключили это потому что у нас в проекте вот это.

Телеграмовская версия опроса выглядела так (хз какое тут пересечение участников с опросом на форуме):


Еще несколько нарезок за компанию с мнениями из тг:

diabolo: пользуюсь, кинул на форуме свой стандартный конфиг
Kitsu: зачем реодеры выключать?
diabolo: у меня свое понимание того в каком порядке должны быть импорты, и когда их насильно сортируют и мержат — это не есть гуд. я их делаю по смыслу и приоритету (для меня), а не по алфавиту
Berkus Decker: потом смысл съезжает, а после 2 лет разработки командой из 5 человек никто уже не знает какой был изначальный смысл этого порядка. когда один пишешь, это пофиг, а реордеринг импортов для команд полезней
diabolo: это имхо уже оффтоп. Всё зависит от внутренней политики, в каждой команде она своя, и импорты по смыслу полезнее, чем сортированные по алфавиту.

Savely Krasovsky: планирую тоже за раст засесть, пока только чат почитываю, но тут не могу сказать преимущество го в этом смысле, единый стиль и никакой возни)
uuttff8 у раста тоже единый стайл внезапно вместе с растфмт
Savely Krasovsky: она вместе с поставкой раста идет? если да, сорри, не знал. ну и тут выше упоминают конфиг, то есть в рамках форматтера всё равно есть варианты кодестайла, если я правильно понимаю
Savely Krasovsky: я не для холиваров пришел, если что, сорри) понимаю что вопрос дискуссионный, но подход го мне тут симпатизиует больше: из коробки без возможности конфигурации
Судзумия Харухи (admin): Ну, конфиг это здоровое желание взрослого человека. Иногда растфмт работает не так как хочется кому-то
Savely Krasovsky:
конфиг и возможность настройки это повод холиварить по поводу кодестайла, в зрелой го-среде разработчиков я ни разу не слышал даже намека на холивар табы-пробелы и прочее веселье
ты приходишь в любую компанию и кодестайл у всех одинаковый, нет никакого корпоративного конфига для гофмт)
в общем я считаю это нормальный трейдофф
Судзумия Харухи (admin): В расте нет ООП. Но я понял, что он имеет ввиду
Savely Krasovsky: у вас тут всяко возможностей в разы больше, чем у го, мы тут страдаем выдавая структуры за классы

^ Кстати, разделяю мнение Savely Krasovsky и всеми конечностями за тиранию единого стиля.
Немного расстроен, что растфмт так легко разрешает себя конфигурировать, но затрудняюсь сказать, насколько бы реально отсутствие такой возможности могло бы стать аргументом против адаптации языка.

А как сейчас - фмт с конфигом в проекте, все равно, конечно, лучше, чем вообще никакого фмт.


@suhr ты тоже идеевское форматирование используешь?

вообще не пользуюсь. Он некрасиво форматит, а настраивать его лень. Настраивать форматер - это что-то похожее на настраивание цветов.

Не боишься осложнений при командной работе?

Я не “совсем не так” формачу, а “немножко не так”. Уже не помню, в чем разница, но вцелом то же самое, что и rustfmt. Помню, что 30 символов на строку (или сколько там) мне на хватало, и еще что-то.

А какие осложнения могут быть? Если надо будет - это все можно переформатить.

Использую (без конфига), потому что растовский плагин для ST3 использует. Некоторый минус с натяжкой: он срабатывает при Ctrl+S, поэтому если раньше опечатки отлавливал rustc при билде, то теперь на них “давится” форматтер при сэйве, и это неприятно, потому что приходится отвлекаться и идти исправлять, что немного сбивает с мысли. Потому что по геймерской(?) привычке сохраняюсь я часто. Мне было бы предпочтительнее закодить кусок кода, а потом после попытки билда сразу исправлять и семантические ошибки, и синтаксические.

@suhr ты тоже идеевское форматирование используешь?

Нет, но возможно следовало бы. rustfmt не могу использовать — он не поддерживает простейших вещей и вообще портит форматирование.

3 лайка

А у тебя насколько часто такие штуки в коде появляются, что бы выборочное нашлепывание #[rustfmt::skip] не сглаживало вопрос?

Меня в целом умолчательный стиль устраивает, но что-то последнее время сильно раздражаться стал на то, что:

Ev::new(event::BeginTurn { player_id })
    .actor_ids(actor_ids)
    .build()

но

Ev::new(event::EndTurn {
    player_id: player_id,
})
.actor_ids(actor_ids)
.build()

Как-то прям сильно непоследовательно, что отступы пропадают.


UPD: Вроде, это даже противоречит описанию из принятого руководства же:

If the length of the last line of the first element plus its indentation is less than or equal to the indentation of the second line (and there is space), then combine the first and second lines, e.g.,

x.baz?
    .qux()

let foo = x
    .baz?
    .qux();

foo(
    expr1,
    expr2,
).baz?
    .qux();

^ нашел задачу про битые отступы методов после структурных литералов …и она p-low? О.о
Авось мой пример убедит поднять приоритет, по мне так прям сильный косяк