A simple CPU rendered GUI IDE experience.
remove poll_r
bendn 5 weeks ago
parent 6a1603d · commit 1723ed6
-rw-r--r--src/edi.rs178
-rw-r--r--src/lsp/rq.rs15
-rw-r--r--src/main.rs2
3 files changed, 74 insertions, 121 deletions
diff --git a/src/edi.rs b/src/edi.rs
index cdfacb2..e5c37bf 100644
--- a/src/edi.rs
+++ b/src/edi.rs
@@ -416,7 +416,7 @@ impl Editor {
std::fs::write(self.origin.as_ref().unwrap(), &t).unwrap();
self.mtime = Self::modify(self.origin.as_deref());
}
- pub fn poll(&mut self, w: Option<&Arc<dyn Window>>) {
+ pub fn poll(&mut self) {
let Some((l, ..)) = self.lsp else { return };
for rq in l.req_rx.try_iter() {
match rq {
@@ -427,130 +427,98 @@ impl Editor {
rq => log::debug!("discarding request {rq:?}"),
}
}
- let r = &l.runtime;
self.requests.inlay.poll(|x, p| {
x.ok().or(p.1).inspect(|x| {
self.text.set_inlay(x);
})
});
- self.requests.document_highlights.poll_r(|x, _| x.ok(), r, w);
- self.requests.diag.poll_r(|x, _| x.ok().flatten(), r, w);
+ self.requests.document_highlights.poll(|x, _| x.ok());
+ self.requests.diag.poll(|x, _| x.ok().flatten());
if let CompletionState::Complete(rq) = &mut self.requests.complete
{
- rq.poll_r(
- |f, (c, _)| {
- f.ok().flatten().map(|x| Complete {
- r: x,
- start: c,
- selection: 0,
- vo: 0,
- })
- },
- r,
- w,
- );
+ rq.poll(|f, (c, _)| {
+ f.ok().flatten().map(|x| Complete {
+ r: x,
+ start: c,
+ selection: 0,
+ vo: 0,
+ })
+ });
};
match &mut self.state {
State::Symbols(x) => {
- x.poll_r(
- |x, (_, p)| {
- let Some(p) = p else { unreachable!() };
- x.ok().flatten().map(|r| sym::Symbols {
- data: (r, p.data.1, p.data.2),
- selection: 0,
- vo: 0,
- ..p
- })
- },
- r,
- w,
- );
+ x.poll(|x, (_, p)| {
+ let Some(p) = p else { unreachable!() };
+ x.ok().flatten().map(|r| sym::Symbols {
+ data: (r, p.data.1, p.data.2),
+ selection: 0,
+ vo: 0,
+ ..p
+ })
+ });
}
State::CodeAction(x) => {
- if x.poll_r(
- |x, _| {
- let lems: Vec<CodeAction> = x
- .ok()??
- .into_iter()
- .map(|x| match x {
- CodeActionOrCommand::CodeAction(x) => x,
- _ => panic!("alas we dont like these"),
- })
- .collect();
- if lems.is_empty() {
- self.bar.last_action =
- "no code actions available".into();
- None
- } else {
- self.bar.last_action =
- format!("{} code actions", lems.len());
- Some(act::CodeActions::new(lems))
- }
- },
- r,
- w,
- ) && x.result.is_none()
+ if x.poll(|x, _| {
+ let lems: Vec<CodeAction> = x
+ .ok()??
+ .into_iter()
+ .map(|x| match x {
+ CodeActionOrCommand::CodeAction(x) => x,
+ _ => panic!("alas we dont like these"),
+ })
+ .collect();
+ if lems.is_empty() {
+ self.bar.last_action =
+ "no code actions available".into();
+ None
+ } else {
+ self.bar.last_action =
+ format!("{} code actions", lems.len());
+ Some(act::CodeActions::new(lems))
+ }
+ }) && x.result.is_none()
{
self.state = State::Default;
}
}
State::Runnables(x) => {
- x.poll_r(
- |x, ((), old)| {
- Some(Runnables {
- data: x.ok()?,
- ..old.unwrap_or_default()
- })
- },
- r,
- w,
- );
+ x.poll(|x, ((), old)| {
+ Some(Runnables {
+ data: x.ok()?,
+ ..old.unwrap_or_default()
+ })
+ });
}
_ => {}
}
- self.requests.def.poll_r(
- |x, _| {
- x.ok().flatten().and_then(|x| match &x {
- GotoDefinitionResponse::Link([x, ..]) =>
- Some(x.clone()),
- _ => None,
- })
- },
- r,
- w,
- );
- self.requests.semantic_tokens.poll_r(
- |x, _| x.ok().inspect(|x| self.text.set_toks(&x)),
- &l.runtime,
- w,
- );
- self.requests.sig_help.poll_r(
- |x, ((), y)| {
- x.ok().flatten().map(|x| {
- if let Some((old_sig, vo, max)) = y
- && &sig::active(&old_sig) == &sig::active(&x)
- {
- (x, vo, max)
- } else {
- (x, 0, None)
- }
- })
- },
- r,
- w,
- );
- self.requests.hovering.poll_r(|x, _| x.ok().flatten(), r, w);
- self.requests.git_diff.poll_r(|x, _| x.ok(), r, w);
- self.requests.document_symbols.poll_r(
- |x, _| {
- x.ok().flatten().map(|x| match x {
- DocumentSymbolResponse::Flat(_) => None,
- DocumentSymbolResponse::Nested(x) => Some(x),
- })
- },
- r,
- w,
- );
+ self.requests.def.poll(|x, _| {
+ x.ok().flatten().and_then(|x| match &x {
+ GotoDefinitionResponse::Link([x, ..]) => Some(x.clone()),
+ _ => None,
+ })
+ });
+ self.requests
+ .semantic_tokens
+ .poll(|x, _| x.ok().inspect(|x| self.text.set_toks(&x)));
+ self.requests.sig_help.poll(|x, ((), y)| {
+ x.ok().flatten().map(|x| {
+ if let Some((old_sig, vo, max)) = y
+ && &sig::active(&old_sig) == &sig::active(&x)
+ {
+ (x, vo, max)
+ } else {
+ (x, 0, None)
+ }
+ })
+ });
+ self.requests.hovering.poll(|x, _| x.ok().flatten());
+ self.requests.git_diff.poll(|x, _| x.ok());
+ self.requests.document_symbols.poll(|x, _| {
+ x.ok().flatten().map(|x| match x {
+ DocumentSymbolResponse::Flat(_) => None,
+ DocumentSymbolResponse::Nested(x) => Some(x),
+ })
+ });
}
#[implicit_fn]
pub fn cursor_moved(
diff --git a/src/lsp/rq.rs b/src/lsp/rq.rs
index 97ed4c5..eb3ec7e 100644
--- a/src/lsp/rq.rs
+++ b/src/lsp/rq.rs
@@ -1,7 +1,6 @@
use std::backtrace::Backtrace;
use std::fmt::Debug;
use std::marker::PhantomData;
-use std::sync::Arc;
use crossbeam::channel::SendError;
use lsp_server::{Message, Response as Re};
@@ -11,7 +10,6 @@ use serde::{Deserialize, Serialize};
use tokio::sync::oneshot;
use tokio::task;
use tokio_util::task::AbortOnDropHandle;
-use winit::window::Window;
#[derive(Serialize, Deserialize)]
pub enum RequestError<X> {
@@ -155,17 +153,4 @@ impl<T, R, D, E> Rq<T, R, D, E> {
false
}
}
-
- pub fn poll_r(
- &mut self,
- f: impl FnOnce(Result<R, E>, (D, Option<T>)) -> Option<T>,
- _runtime: &tokio::runtime::Runtime,
- _w: Option<&Arc<dyn Window>>,
- ) -> bool {
- self.poll(|x, y| {
- f(x, y).inspect(|_| {
- // w.map(|x| x.request_redraw());
- })
- })
- }
}
diff --git a/src/main.rs b/src/main.rs
index 1827980..b2f1e4a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -222,7 +222,7 @@ pub(crate) fn entry(event_loop: EventLoop) {
window.request_redraw();
}
// let before = ed.state.name();
- ed.poll(Some(window));
+ ed.poll();
// println!("{before} -> poll -> {}", ed.state.name());
// let before = ed.state.name();
// let ev = format!("{event:?}");