我正在尝试使用 gpui.rs 创建简单的 ui 程序。
下面是 Cargo.toml -
[package]
name = "gpui-first-look-duanne-bester"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
gpui = { git = "https://github.com/zed-industries/zed" }
assets = { git = "https://github.com/zed-industries/zed" }
theme = { git = "https://github.com/zed-industries/zed" }
settings = { git = "https://github.com/zed-industries/zed" }
ui = { git = "https://github.com/zed-industries/zed" }
下面是我的
main.rs
文件-
use gpui::*;
use assets::Assets;
use settings::{default_settings, SettingsStore};
use theme::{ThemeRegistry, ThemeSettings};
use seetings::Settings;
struct HelloWorld {
text: SharedString,
}
impl Render for HelloWorld {
fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
div()
.flex()
.bg(rgb(0x2e7d32))
.size_full()
.justify_center()
.items_center()
.text_xl()
.text_color(rgb(0xffffff))
.child(format!("Hello, {}!", &self.text))
}
}
fn main() {
App::new().run(|cx: &mut AppContext| {
let theme_name = "One Dark";
let mut store = SettingsStore::default();
store.set_default_settings(default_settings().as_ref(), cx)
.unwrap();
cx.set_global(store);
theme::init(themes_to_load: theme::LoadThemes::All(Box::new(Assets)), cx);
let theme_registry :&ThemeRegistry = cx.global::<ThemeRegistry>();
let mut theme_settings: ThemeSettings = ThemeSettings::get_global(cx).clone();
theme_settings.active_theme = theme_registry.get(&theme_name).unwrap();
ThemeSettings::override_global(theme_settings, cx);
cx.open_window(WindowOptions::default(), |cx| {
cx.new_view(|_cx| HelloWorld {
text: "World".into(),
})
});
});
}
当我这样做时
cargo run
我收到以下错误 -
货物运行 更新 git 存储库
https://github.com/zed-industries/zed
更新 crates.io 索引
更新 git 存储库
https://github.com/zed-industries/font-kit
更新 git 存储库
https://github.com/DioxusLabs/taffy
更新 git 存储库
https://github.com/kvark/blade
更新 git 存储库
https://github.com/zed-industries/bromberg_sl2
错误:无法为
选择版本。tree-sitter
...包裹需要
settings v0.1.0 (https://github.com/zed-industries/zed#0ce5cdc4)
...满足包
settings
的 git 依赖性gpui-first-look-duanne-bester v0.1.0 (/Users/rnatarajan/Documents/Coding/others/gpui-first-look-duanne-bester)
符合要求的版本
有:0.20.10、0.20.9、0.20.8、0.20.7、0.20.6、0.20.5、0.20.4、0.20.3、0.20.2、0.20.1 , 0.20.0^0.20
软件包
依赖于settings
,具有以下功能:tree-sitter
,但wasm
没有这些功能。tree-sitter
无法为
选择可以解决此冲突的版本tree-sitter
知道这里出了什么问题吗?我该如何修复这个错误? 我的项目在 github here.
这是一个不在您的代码中的错误。来自
https://github.com/zed-industries/zed的
Cargo.toml
当前内容包括:
[workspace.dependencies]
...
tree-sitter = { version = "0.20", features = ["wasm"] }
这是自相矛盾的,因为
wasm
功能直到不兼容的0.21版本才引入。这是无法编译的。那么,为什么这没有让大家失望呢?因为 Cargo.toml
还包含一个 patch ,它覆盖了此依赖项:
[patch.crates-io]
tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "4294e59279205f503eb14348dd5128bd5910c8fb" }
因此,在构建
zed
工作区时,会从特定的 Git 提交(确实声明了 tree-sitter
功能)中获取 wasm
源。但是,当您仅依赖于库而不是在特定工作区中构建/开发时,补丁将被忽略。
因此,出于您的目的,错误位于 zed
存储库中。如果他们希望支持以您尝试的方式使用他们的库,那么他们应该将
patch
替换为普通的 git
依赖项:[workspace.dependencies]
...
tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "4294e59279205f503eb14348dd5128bd5910c8fb", features = ["wasm"] }
我没有看到任何解释为什么他们不
这样做——没有评论,并且添加补丁的提交也没有解释。所以也许这只是一个疏忽,他们欢迎 PR 来简化它——或者可能有一个不明显的原因这是必要的。