簡體   English   中英

Monaco 編輯器自定義令牌提供者行為

[英]Monaco editor custom token provider behaviour

我正在嘗試實現具有非常特定行為的標記器,例如,在以下情況下:

1:   Line 1
2:   Line 2
3:
4:   Line 4 
5:   Line 5
6:   Line 6
7:
8:
9:   Line 9

第 1 行的更改將導致第 1-3 行的重新標記化,第 5 行的更改將導致第 3-8 行的重新標記化,第 9 行的更改將導致第 7-9 行的重新標記化,等等...... . 這是因為給定行的標記化可能會根據在下一個空行之前發生的情況而有所不同。

所以基本上,我希望通過用空行分隔的塊來標記文本。

我有一個使用裝飾的模糊原型,但對於我的用例來說,沒有辦法使用裝飾或語義標記,主要是出於性能原因。 然而,摩納哥的setTokensProvider似乎只能逐行工作:編輯文檔中的一行將導致每個后續行都被重新標記,無法停止它,也無法重新標記之前的行。

目前是否有任何現實的方法可以做到這一點,即使它是 hacky 和/或涉及擺弄一些未公開的 API? vscode 的 textmate 語法能夠指定跨越多行的標記,所以我覺得我錯過了一些東西:/

聽起來您正在尋找DocumentSemanticTokensProvider 看看這篇博文

顧名思義,摩納哥的 DocumentSemanticTokensProvider 處理為整個輸入文檔提供語義。 Unlike a tokens provider, instead of providing a set of regular expressions to tokenize the document, a DocumentSemanticTokensProvider implementation is a callback function: When invoked, the function is provided with the overall model containing the code entered by the user, and it is the responsibility實現者返回必要的語義信息,需要完整的解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM