1#![doc = include_str!("readme.md")]
2use crate::HtmlLanguage;
3use core::range::Range;
4use oak_core::tree::RedNode;
5#[cfg(feature = "oak-highlight")]
7pub mod highlighter;
8
9#[cfg(feature = "lsp")]
10use {
11 futures::Future,
12 oak_hover::{Hover, HoverProvider},
13 oak_lsp::service::LanguageService,
14 oak_vfs::Vfs,
15};
16#[cfg(feature = "lsp")]
22pub struct HtmlHoverProvider;
23#[cfg(feature = "lsp")]
24impl HoverProvider<HtmlLanguage> for HtmlHoverProvider {
25 fn hover(&self, _node: &RedNode<HtmlLanguage>, _range: Range<usize>) -> Option<Hover> {
27 None
28 }
29}
30#[cfg(feature = "lsp")]
35pub struct HtmlLanguageService<V: Vfs> {
36 vfs: V,
37 workspace: oak_lsp::workspace::WorkspaceManager,
38 _hover_provider: HtmlHoverProvider,
39}
40#[cfg(feature = "lsp")]
41impl<V: Vfs> HtmlLanguageService<V> {
42 pub fn new(vfs: V) -> Self {
44 Self { vfs, workspace: oak_lsp::workspace::WorkspaceManager::default(), _hover_provider: HtmlHoverProvider }
45 }
46}
47#[cfg(feature = "lsp")]
48impl<V: Vfs + Send + Sync + 'static + oak_vfs::WritableVfs> LanguageService for HtmlLanguageService<V> {
49 type Lang = HtmlLanguage;
50 type Vfs = V;
51 fn vfs(&self) -> &Self::Vfs {
52 &self.vfs
53 }
54 fn workspace(&self) -> &oak_lsp::workspace::WorkspaceManager {
55 &self.workspace
56 }
57 fn get_root(&self, _uri: &str) -> impl Future<Output = Option<RedNode<'_, HtmlLanguage>>> + Send + '_ {
58 async move { None }
59 }
60 fn hover(&self, _uri: &str, _range: Range<usize>) -> impl Future<Output = Option<oak_lsp::Hover>> + Send + '_ {
61 async move { None }
62 }
63 fn completion(&self, _uri: &str, _offset: usize) -> impl Future<Output = Vec<oak_lsp::types::CompletionItem>> + Send + '_ {
64 async move { vec![] }
65 }
66}