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
7pub struct TexLanguageService {
9 vfs: MemoryVfs,
10 workspace: WorkspaceManager,
11}
12
13impl TexLanguageService {
14 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 None
38 }
39 }
40}