Мне нравится называть свои папки и файлы по соглашению о кебабе.
Недавно я изучал rust и немного узнал о модулях. В одном из примеров у меня есть файл с именем: distinct-powers.rs. Всякий раз, когда я делаю mod distinct-powers, чтобы поместить код в область видимости, я, очевидно, получаю синтаксическую ошибку, поскольку Rust не может обрабатывать кебаб-кейс. Ошибка: Syntax Error: expected BANGrust-analyzer, которая, я думаю, ни о чем нас не информирует, так как думает, что ошибка совершенно другая.
Есть ли способ обойти это ограничение Rust?

Если вы действительно хотите, вы можете разместить код модулей в произвольных именах файлов:
#[path = "distinct-powers.rs"]
mod distinct_powers;
Но, пожалуйста, не надо — одна из замечательных особенностей Rust заключается в том, что существует единый стандарт для макета проекта, который позволяет легко погрузиться в чужой код. Каждая настройка мешает кому-то найти код, который он ищет.
Есть пара мест, где разрешены дефисы, то есть в пакете Rust можно использовать имя kebab-case. Все они связаны с Cargo, системой сборки, а не с самим языком Rust.
Имя самого пакета (как указано в Cargo.toml) может быть kebab-case. Если пакет является библиотекой, Cargo автоматически преобразует это в snake_case для имени ящика библиотеки (именно так вы ссылаетесь на него в коде Rust в зависимых файлах). Это довольно часто делается.
Например, в этом URL-адресе документации, https://docs.rs/ordered-float/latest/ordered_float/, вы можете видеть, что имя пакета ordered-float и имя ящика (которое можно было бы переопределить, но не было) происходит от этого как ordered_float.
Имя двоичного файла, примера или тестовой цели может содержать дефисы. Это означает, что двоичные файлы, встроенные в target/, могут иметь имена в регистре кебаба — cargo run --bin distinct-powers допустимо.
Все эти имена могут использоваться автообнаружением грузовых целей и, таким образом, не считаются нестандартной компоновкой.
kebab-enthusiast/
Cargo.toml
src/
lib.rs
snake_module.rs
bin/
kebab-binary.rs
examples/
kebab-example.rs
tests/
kebab-test.rs
Спасибо за ваш ответ. У меня есть один нисходящий вопрос, если вы не возражаете. Программисты kebab-case просто не используют соглашение kebab-case в rust? Например, мне нравится это соглашение об именах, что делают люди, которым это соглашение нравится? Просто не использовать его в Rust?
@justbecause Довольно часто пакеты Rust (называемые ящиками) называют kebab-case именами (пример), и Cargo автоматически переводит их имена в snake_case для использования в языке. Но для организации модулей внутри пакета очень строгим соглашением является придерживаться точных стандартизированных мест, где файлы следуют за кодом, а не наоборот.
@justbecause я расширил свой ответ, чтобы охватить больше примеров.
Спасибо за ваш ответ еще раз. Я ценю его. Я постараюсь не использовать чехол для кебаба, чтобы соответствовать рекомендациям по защите от ржавчины.
Замените символ
-на_(подчеркивание).