Улучшения опыта разработчика на Leptos
Есть пара вещей, которые можно сделать, чтобы улучшить ваш процесс разработки веб-сайтов и приложения на Leptos. Возможно, вам стоит потратить несколько минут и настроить окружение, чтобы оптимизировать процесс разработки, особенно если хотите программировать попутно с примерами из этой книги.
1) Настройте console_error_panic_hook
По-умолчанию паники, которые происходят во время выполнения вашего WASM кода в браузере просто выбросят ошибку в браузере
с неинформативным сообщением вроде Unreachable executed и трассировкой стека, указывающей на WASM бинарник.
console_error_panic_hook даёт настоящую трассировку стека Rust с номерами строк в Rust коде.
Настроить это очень просто:
- Выполните
cargo add console_error_panic_hookв своём проекте - В функции main добавьте вызов
console_error_panic_hook::set_once();
Если это не понятно, вот пример.
Теперь сообщения о паниках в консоле браузере будут намного лучше!
2) Автоподстановка в редакторе внутри #[component] и #[server]
Из-за природы макросов (они могут разворачивать что угодно из чего угодно, но только если ввода вполне корректен в тот момент) rust-analyzer'у может быть сложно делать должную автоподстановку и другую поддержку.
При проблемах с использований этих макросов в вашем редакторе, можно настроить rust-analyzer так, чтобы он
игнорировал определенные процедурные макросы. Особенно для макроса #[server], который добавляет аннотации к телам функций,
но в действительно ничего не трансформирует в теле функции, это может быть очень полезно.
Начиная с версии Leptos 0.5.3, поддержка rust-analyzer была добавлена для #[component], но при проблемах
можно добавить #[component] в игнор лист (см. ниже).
Учтите что это будет означать, что rust-analyzer ничего не будет знать о свойствах вашего компонента, что может породить
собственный набор ошибок или предупреждений в IDE>
VSCode settings.json:
"rust-analyzer.procMacro.ignored": {
"leptos_macro": [
// optional:
// "component",
"server"
],
}
VSCode с cargo-leptos settings.json:
"rust-analyzer.procMacro.ignored": {
"leptos_macro": [
// optional:
// "component",
"server"
],
},
// if code that is cfg-gated for the `ssr` feature is shown as inactive,
// you may want to tell rust-analyzer to enable the `ssr` feature by default
//
// you can also use `rust-analyzer.cargo.allFeatures` to enable all features
"rust-analyzer.cargo.features": ["ssr"]
neovim с lspconfig:
require('lspconfig').rust_analyzer.setup {
-- Other Configs ...
settings = {
["rust-analyzer"] = {
-- Other Settings ...
procMacro = {
ignored = {
leptos_macro = {
-- optional: --
-- "component",
"server",
},
},
},
},
}
}
Helix, в .helix/languages.toml:
[[language]]
name = "rust"
[language-server.rust-analyzer]
config = { procMacro = { ignored = { leptos_macro = [
# Optional:
# "component",
"server"
] } } }
Zed, в settings.json:
{
-- Other Settings ...
"lsp": {
"rust-analyzer": {
"procMacro": {
"ignored": [
// optional:
// "component",
"server"
]
}
}
}
}
SublimeText 3, LSP-rust-analyzer.sublime-settings в Goto Anything... меню:
// Settings in here override those in "LSP-rust-analyzer/LSP-rust-analyzer.sublime-settings"
{
"rust-analyzer.procMacro.ignored": {
"leptos_macro": [
// optional:
// "component",
"server"
],
},
}
3) Настройка leptosfmt с rust-analyzer (необязательно)
leptosfmt это форматер для Leptos макроса view! (внутри которого обычно пишется UI код).
Поскольку макрос view! включает 'RSX' (как JSX) стиль написания UI, cargo-fmt сложнее авто-форматировать код внутри макроса view!. leptosfmt это крейт, который решает проблемы с форматированием и поддерживает чистоту и красоту UI кода в стиле RSX.
leptosfmt может быть установлен и использован через командную строку или из редактора кода:
Для начала установите его командой cargo install leptosfmt.
Если хотите использовать настройки по-умолчанию из командной строки, просто запустите leptosfmt ./**/*.rs из корня вашего проекта, чтобы отформатировать все Rust файлы используя leptosfmt.
Если хотите настроить ваш редактор для работы с leptosfmt или хотите кастомизировать настройки leptosfmt, пожалуйста обратитесь к инструкциям доступным в leptosfmt github repo's README.md.
Только учтите, что для наилучших результатов рекомендуется настраивать работу редактора c leptosfmt на уровне workspace.