Улучшения опыта разработчика на 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.