import { Lexer } from 'greyscript-core';
import { Token } from 'miniscript-core';
import type { SemanticTokensBuilder, SemanticTokensLegend } from 'vscode-languageserver';
import { IActiveDocument } from '../types';
export type SemanticToken = {
    line: number;
    char: number;
    length: number;
    tokenType: number;
    tokenModifiers?: number;
};
export declare enum SemanticTokenType {
    Keyword = 0,
    String = 1,
    Number = 2,
    Variable = 3,
    Property = 4,
    Function = 5,
    Parameter = 6,
    Operator = 7,
    Comment = 8,
    Constant = 9,
    Punctuator = 10
}
export declare enum SemanticTokenModifier {
    Declaration = 0,
    Definition = 1,
    Readonly = 2,
    Static = 3,
    Deprecated = 4,
    Abstract = 5,
    Async = 6,
    Modification = 7,
    Documentation = 8,
    DefaultLibrary = 9
}
export declare const semanticTokensLegend: SemanticTokensLegend;
export declare class TokenHandler {
    token: Token | null;
    previousToken: Token | null;
    private _lexer;
    private _builder;
    constructor(lexer: Lexer, builder: SemanticTokensBuilder);
    private next;
    private isType;
    private consume;
    private consumeMany;
    private processMultilineToken;
    private processFunction;
    private processPathSegment;
    private processFeatureEnvarExpression;
    private processFeatureInjectExpression;
    private processFeatureImportStatement;
    private processFeatureIncludeStatement;
    private processNativeImportCodeStatement;
    private processKeyword;
    private processStringLiteral;
    private processNumericLiteral;
    private processBooleanLiteral;
    private processNilLiteral;
    private processIdentifier;
    private processPunctuator;
    private processComment;
    private process;
    digest(): void;
}
export declare function buildTokens(builder: SemanticTokensBuilder, document: IActiveDocument): SemanticTokensBuilder;
