11个版本 (5个重大更新)

0.6.2 2024年8月8日
0.5.0 2024年8月5日
0.4.0 2024年7月31日
0.1.0 2023年12月4日

#471 in 开发工具

Download history 347/week @ 2024-06-30 159/week @ 2024-07-07 8/week @ 2024-07-14 252/week @ 2024-07-28 453/week @ 2024-08-04 20/week @ 2024-08-11

每月725次下载

MIT 许可证

640KB
13K SLoC

html-languageservice

该项目是使用rust重写的vscode-html-languageservice,同时具有原始项目所有功能,并具有更高的性能。

该项目是实现HTML语言服务所需功能的集合。

功能

  • 自定义数据提供者
  • 解析HTML文档
  • 扫描器
  • 完成 - 激活completion功能
  • 悬停 - 激活hover功能
  • 格式化 - 激活formatter功能
  • 查找文档高亮 - 激活highlight功能
  • 查找文档链接 - 激活links功能
  • 查找文档符号 - 激活symbols功能
  • 获取折叠范围 - 激活folding功能
  • 获取选择范围 - 激活selection_range功能
  • 引用完成 - 激活completion功能
  • 标签完成 - 激活completion功能
  • 重命名 - 激活rename功能
  • 查找匹配的标签位置 - 激活matching_tag_position功能
  • 查找链接编辑范围 - 激活linked_editing功能

用法

与数据相关的hovercomplete需要在创建HTMLLanguageService结构之前,其他函数与数据无关,但用作其关联函数,可以直接调用。

请确保在Cargo.toml上激活了html-languageservicecrate的所有功能。

html-languageservice = { version = "0.6.1", features = ["full"] }

您也可以在Cargo.toml上仅激活您需要的部分功能。

html-languageservice = { version = "0.6.1", features = ["completion", "hover"] }

其次,您需要准备:documentposition

然后,将 document 解析为 html_document,你需要使用 HTMLDataManager,标签、属性和属性值数据都存储在 HTMLDataManager 中。

最后,调用一个函数或方法来获取结果。

示例

use std::sync::Arc;

use html_languageservice::{
    services::html_completion::DefaultDocumentContext, LanguageService, LanguageServiceOptions,
};
use lsp_textdocument::FullTextDocument;
use lsp_types::Position;

#[tokio::main]
async fn main() {
    // prepare
    let document = FullTextDocument::new("html".to_string(), 1, "<div></div>".to_string());
    let position = Position::new(0, 1);
    // init
    let data_manager = HTMLDataManager::new(true, None);
    let html_document = HTMLLanguageService::parse_html_document(&document, &data_manager);
    let ls = HTMLLanguageService::new(HTMLLanguageServiceOptions::default());
    // hover
    let hover = ls
        .do_hover(&document, &position, &html_document, None, &data_manager)
        .await;
    assert!(hover.is_some());
    // complete
    let document_context = DefaultDocumentContext;
    let completion_list = ls
        .do_complete(
            &document,
            &position,
            &html_document,
            document_context,
            None,
            &data_manager,
        )
        .await;
    assert!(completion_list.items.len() > 0);
}

依赖项

~7-15MB
~202K SLoC