Skip to main content

oak_tex/lsp/
mod.rs

1use crate::language::TexLanguage;
2use futures::Future;
3use oak_core::tree::RedNode;
4use oak_lsp::{service::LanguageService, workspace::WorkspaceManager};
5use oak_vfs::{MemoryVfs, Vfs};
6
7/// TeX 语言服务
8pub struct TexLanguageService {
9    vfs: MemoryVfs,
10    workspace: WorkspaceManager,
11}
12
13impl TexLanguageService {
14    /// 创建新的 TeX 语言服务
15    pub fn new(vfs: MemoryVfs) -> Self {
16        Self { vfs, workspace: WorkspaceManager::default() }
17    }
18}
19
20impl LanguageService for TexLanguageService {
21    type Lang = TexLanguage;
22    type Vfs = MemoryVfs;
23
24    fn vfs(&self) -> &Self::Vfs {
25        &self.vfs
26    }
27
28    fn workspace(&self) -> &WorkspaceManager {
29        &self.workspace
30    }
31
32    fn get_root(&self, uri: &str) -> impl Future<Output = Option<RedNode<'_, TexLanguage>>> + Send + '_ {
33        let source = self.vfs().get_source(uri);
34        async move {
35            let _source = source?;
36            // TODO: 实现真正的解析逻辑
37            None
38        }
39    }
40}