import type { CodeToTokensOptions, GrammarState, HighlighterCore, HighlighterGeneric, ThemedToken } from 'shiki'; export type ShikiStreamTokenizerOptions = CodeToTokensOptions & { highlighter: HighlighterCore | HighlighterGeneric; }; export interface ShikiStreamTokenizerEnqueueResult { /** * 要撤回的行数 */ recall: number; /** * 稳定行 */ stable: ThemedToken[][]; /** * 不稳定行 */ unstable: ThemedToken[][]; } /** * 修改自 shiki-stream 的 tokenizer。 * * 和 shiki-stream 实现的不同: * - tokenizer 会拆分代码块为两个 subtrunk,第一个 subtrunk 可以包含多行。 * - 这个实现可以避免 chunk 过大时引入额外开销。 */ export declare class ShikiStreamTokenizer { readonly options: ShikiStreamTokenizerOptions; linesUnstable: ThemedToken[][]; lastUnstableCodeChunk: string; lastStableGrammarState: GrammarState | undefined; constructor(options: ShikiStreamTokenizerOptions); /** * 使用 tokenizer 处理一个代码片段。 */ enqueue(chunk: string): Promise; close(): { stable: ThemedToken[][]; }; clear(): void; } /** * 将代码字符串 chunk 按行分割为至多两个 subtrunks * @param chunk 代码字符串 * @returns subtrunks 数组 */ export declare function splitToSubTrunks(chunk: string): string[];