mirror of
https://github.com/Myriad-Dreamin/tinymist.git
synced 2025-08-03 17:58:17 +00:00
fix: clean up the render actor a bit and fix the issue that editor_conn_sender
is not used (#1159)
This commit is contained in:
parent
0149663a6f
commit
9cf5f294e9
4 changed files with 48 additions and 55 deletions
|
@ -11,7 +11,7 @@ use crate::debug_loc::{InternQuery, SpanInterner};
|
|||
use crate::outline::Outline;
|
||||
use crate::{
|
||||
ChangeCursorPositionRequest, DocToSrcJumpInfo, EditorServer, MemoryFiles, MemoryFilesShort,
|
||||
SrcToDocJumpRequest,
|
||||
ResolveSourceLocRequest,
|
||||
};
|
||||
|
||||
use super::webview::WebviewActorRequest;
|
||||
|
@ -122,7 +122,7 @@ pub enum ControlPlaneMessage {
|
|||
#[serde(rename = "changeCursorPosition")]
|
||||
ChangeCursorPosition(ChangeCursorPositionRequest),
|
||||
#[serde(rename = "panelScrollTo")]
|
||||
SrcToDocJump(SrcToDocJumpRequest),
|
||||
ResolveSourceLoc(ResolveSourceLocRequest),
|
||||
#[serde(rename = "panelScrollByPosition")]
|
||||
PanelScrollByPosition(PanelScrollByPositionRequest),
|
||||
#[serde(rename = "sourceScrollBySpan")]
|
||||
|
@ -209,9 +209,9 @@ impl<T: EditorServer> EditorActor<T> {
|
|||
debug!("EditorActor: received message from editor: {:?}", cursor_info);
|
||||
self.renderer_sender.send(RenderActorRequest::ChangeCursorPosition(cursor_info)).unwrap();
|
||||
}
|
||||
ControlPlaneMessage::SrcToDocJump(jump_info) => {
|
||||
ControlPlaneMessage::ResolveSourceLoc(jump_info) => {
|
||||
debug!("EditorActor: received message from editor: {:?}", jump_info);
|
||||
self.renderer_sender.send(RenderActorRequest::SrcToDocJumpResolve(jump_info)).unwrap();
|
||||
self.renderer_sender.send(RenderActorRequest::ResolveSourceLoc(jump_info)).unwrap();
|
||||
}
|
||||
ControlPlaneMessage::PanelScrollByPosition(jump_info) => {
|
||||
debug!("EditorActor: received message from editor: {:?}", jump_info);
|
||||
|
@ -276,10 +276,9 @@ impl<T: EditorServer> EditorActor<T> {
|
|||
if let Some(span) = jump_info {
|
||||
let span_and_offset = span.into();
|
||||
self.renderer_sender
|
||||
.send(RenderActorRequest::DocToSrcJumpResolve((
|
||||
span_and_offset,
|
||||
span_and_offset,
|
||||
)))
|
||||
.send(RenderActorRequest::EditorResolveSpanRange(
|
||||
span_and_offset..span_and_offset,
|
||||
))
|
||||
.unwrap();
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use std::ops::Range;
|
||||
use std::sync::Arc;
|
||||
|
||||
use reflexo_typst::debug_loc::{
|
||||
|
@ -10,7 +11,7 @@ use tokio::sync::{broadcast, mpsc};
|
|||
use super::{editor::EditorActorRequest, webview::WebviewActorRequest};
|
||||
use crate::debug_loc::SpanInterner;
|
||||
use crate::outline::Outline;
|
||||
use crate::{ChangeCursorPositionRequest, CompileView, DocToSrcJumpInfo, SrcToDocJumpRequest};
|
||||
use crate::{ChangeCursorPositionRequest, CompileView, DocToSrcJumpInfo, ResolveSourceLocRequest};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ResolveSpanRequest(pub Vec<ElementPoint>);
|
||||
|
@ -19,9 +20,9 @@ pub struct ResolveSpanRequest(pub Vec<ElementPoint>);
|
|||
pub enum RenderActorRequest {
|
||||
RenderFullLatest,
|
||||
RenderIncremental,
|
||||
DocToSrcJumpResolve((SourceSpanOffset, SourceSpanOffset)),
|
||||
SrcToDocJumpResolve(SrcToDocJumpRequest),
|
||||
ResolveSpan(ResolveSpanRequest),
|
||||
EditorResolveSpanRange(Range<SourceSpanOffset>),
|
||||
WebviewResolveSpan(ResolveSpanRequest),
|
||||
ResolveSourceLoc(ResolveSourceLocRequest),
|
||||
ChangeCursorPosition(ChangeCursorPositionRequest),
|
||||
}
|
||||
|
||||
|
@ -30,9 +31,9 @@ impl RenderActorRequest {
|
|||
match self {
|
||||
Self::RenderFullLatest => true,
|
||||
Self::RenderIncremental => false,
|
||||
Self::ResolveSpan(_) => false,
|
||||
Self::DocToSrcJumpResolve(_) => false,
|
||||
Self::SrcToDocJumpResolve(_) => false,
|
||||
Self::EditorResolveSpanRange(_) => false,
|
||||
Self::WebviewResolveSpan(_) => false,
|
||||
Self::ResolveSourceLoc(_) => false,
|
||||
Self::ChangeCursorPosition(_) => false,
|
||||
}
|
||||
}
|
||||
|
@ -68,28 +69,17 @@ impl RenderActor {
|
|||
}
|
||||
|
||||
async fn process_message(&mut self, msg: RenderActorRequest) -> bool {
|
||||
log::trace!("RenderActor: received message: {:?}", msg);
|
||||
log::trace!("RenderActor: received message: {msg:?}");
|
||||
|
||||
let res = msg.is_full_render();
|
||||
|
||||
match msg {
|
||||
RenderActorRequest::DocToSrcJumpResolve(span_range) => {
|
||||
log::debug!("RenderActor: processing doc2src: {span_range:?}");
|
||||
RenderActorRequest::EditorResolveSpanRange(span_range) => {
|
||||
log::debug!("RenderActor: resolving EditorResolveSpanRange: {span_range:?}");
|
||||
|
||||
self.doc_to_src_jump_resolve(span_range);
|
||||
self.editor_resolve_span_range(span_range);
|
||||
}
|
||||
RenderActorRequest::ChangeCursorPosition(req) => {
|
||||
log::debug!("RenderActor: processing src2doc: {:?}", req);
|
||||
|
||||
self.change_cursor_position(req);
|
||||
}
|
||||
RenderActorRequest::SrcToDocJumpResolve(req) => {
|
||||
log::debug!("RenderActor: processing src2doc: {:?}", req);
|
||||
|
||||
self.src_to_doc_jump_resolve(req);
|
||||
}
|
||||
RenderActorRequest::ResolveSpan(ResolveSpanRequest(element_path)) => {
|
||||
log::info!("RenderActor: resolving span: {:?}", element_path);
|
||||
RenderActorRequest::WebviewResolveSpan(ResolveSpanRequest(element_path)) => {
|
||||
log::debug!("RenderActor: resolving WebviewResolveSpan: {element_path:?}");
|
||||
let spans = match self.renderer.resolve_span_by_element_path(&element_path) {
|
||||
Ok(spans) => spans,
|
||||
Err(err) => {
|
||||
|
@ -98,12 +88,22 @@ impl RenderActor {
|
|||
}
|
||||
};
|
||||
|
||||
log::info!("RenderActor: resolved span: {spans:?}");
|
||||
log::debug!("RenderActor: resolved WebviewResolveSpan: {spans:?}");
|
||||
// end position is used
|
||||
if let Some(spans) = spans {
|
||||
self.doc_to_src_jump_resolve(spans);
|
||||
self.resolve_span_range(spans.0..spans.1);
|
||||
}
|
||||
}
|
||||
RenderActorRequest::ResolveSourceLoc(req) => {
|
||||
log::debug!("RenderActor: resolving ResolveSourceLoc: {req:?}");
|
||||
|
||||
self.resolve_source_loc(req);
|
||||
}
|
||||
RenderActorRequest::ChangeCursorPosition(req) => {
|
||||
log::debug!("RenderActor: processing ChangeCursorPosition: {req:?}");
|
||||
|
||||
self.change_cursor_position(req);
|
||||
}
|
||||
RenderActorRequest::RenderFullLatest | RenderActorRequest::RenderIncremental => {}
|
||||
}
|
||||
|
||||
|
@ -159,15 +159,19 @@ impl RenderActor {
|
|||
self.view.read().clone()
|
||||
}
|
||||
|
||||
fn resolve_span_range(
|
||||
&self,
|
||||
span_range: (SourceSpanOffset, SourceSpanOffset),
|
||||
) -> Option<DocToSrcJumpInfo> {
|
||||
fn editor_resolve_span_range(&self, span_range: Range<SourceSpanOffset>) -> Option<()> {
|
||||
let req = EditorActorRequest::DocToSrcJump(self.resolve_span_range(span_range)?);
|
||||
let _ = self.editor_conn_sender.send(req);
|
||||
|
||||
Some(())
|
||||
}
|
||||
|
||||
fn resolve_span_range(&self, range: Range<SourceSpanOffset>) -> Option<DocToSrcJumpInfo> {
|
||||
let view = self.view()?;
|
||||
// Resolves FileLoC of start, end, and the element wide
|
||||
let st_res = view.resolve_span(span_range.0.span, Some(span_range.0.offset));
|
||||
let ed_res = view.resolve_span(span_range.1.span, Some(span_range.1.offset));
|
||||
let elem_res = view.resolve_span(span_range.1.span, None);
|
||||
let st_res = view.resolve_span(range.start.span, Some(range.start.offset));
|
||||
let ed_res = view.resolve_span(range.end.span, Some(range.end.offset));
|
||||
let elem_res = view.resolve_span(range.end.span, None);
|
||||
|
||||
// Combines the result of start and end
|
||||
let range_res = match (st_res, ed_res) {
|
||||
|
@ -229,16 +233,6 @@ impl RenderActor {
|
|||
}
|
||||
}
|
||||
|
||||
fn doc_to_src_jump_resolve(
|
||||
&self,
|
||||
span_range: (SourceSpanOffset, SourceSpanOffset),
|
||||
) -> Option<()> {
|
||||
let req = EditorActorRequest::DocToSrcJump(self.resolve_span_range(span_range)?);
|
||||
let _ = self.editor_conn_sender.send(req);
|
||||
|
||||
Some(())
|
||||
}
|
||||
|
||||
fn change_cursor_position(&mut self, req: ChangeCursorPositionRequest) -> Option<()> {
|
||||
let span = self
|
||||
.view()?
|
||||
|
@ -260,7 +254,7 @@ impl RenderActor {
|
|||
Some(())
|
||||
}
|
||||
|
||||
fn src_to_doc_jump_resolve(&self, req: SrcToDocJumpRequest) -> Option<()> {
|
||||
fn resolve_source_loc(&self, req: ResolveSourceLocRequest) -> Option<()> {
|
||||
// todo: change name to resolve resolve src position
|
||||
let info = self
|
||||
.view()?
|
||||
|
|
|
@ -155,7 +155,7 @@ impl<
|
|||
if let Ok(path) = path {
|
||||
let path: Vec<(u32, u32, String)> = path;
|
||||
let path = path.into_iter().map(ElementPoint::from).collect::<Vec<_>>();
|
||||
self.render_sender.send(RenderActorRequest::ResolveSpan(ResolveSpanRequest(path))).unwrap();
|
||||
self.render_sender.send(RenderActorRequest::WebviewResolveSpan(ResolveSpanRequest(path))).unwrap();
|
||||
};
|
||||
} else {
|
||||
let err = self.webview_websocket_conn.send(Message::Text(format!("error, received unknown message: {}", msg))).await;
|
||||
|
|
|
@ -328,7 +328,7 @@ pub struct ChangeCursorPositionRequest {
|
|||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
pub struct SrcToDocJumpRequest {
|
||||
pub struct ResolveSourceLocRequest {
|
||||
filepath: PathBuf,
|
||||
line: usize,
|
||||
/// fixme: character is 0-based, UTF-16 code unit.
|
||||
|
@ -336,7 +336,7 @@ pub struct SrcToDocJumpRequest {
|
|||
character: usize,
|
||||
}
|
||||
|
||||
impl SrcToDocJumpRequest {
|
||||
impl ResolveSourceLocRequest {
|
||||
pub fn to_byte_offset(&self, src: &typst::syntax::Source) -> Option<usize> {
|
||||
src.line_column_to_byte(self.line, self.character)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue