import { VSBuffer } from "@codingame/monaco-vscode-api/vscode/vs/base/common/buffer";
import { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
import { Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event";
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
import { Range as EditorRange } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range";
import * as languages from "@codingame/monaco-vscode-api/vscode/vs/editor/common/languages";
import { ILanguageService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/languages/language.service";
import { ILanguageConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/languages/languageConfigurationRegistry.service";
import { ITextModel } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/model";
import { ILanguageFeaturesService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/services/languageFeatures.service";
import { ExtensionIdentifier } from "@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions";
import { IUriIdentityService } from "@codingame/monaco-vscode-api/vscode/vs/platform/uriIdentity/common/uriIdentity.service";
import { IExtHostContext } from "../../services/extensions/common/extHostCustomers.js";
import { ExtHostLanguageFeaturesShape, ICodeActionProviderMetadataDto, IDocumentDropEditProviderMetadata, IDocumentFilterDto, IInlineCompletionChangeHintDto, IInlineCompletionModelInfoDto, IInlineCompletionProviderOptionDto, ILanguageConfigurationDto, IPasteEditProviderMetadataDto, ISignatureHelpProviderMetadataDto, MainThreadLanguageFeaturesShape } from "@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol";
import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
import { IInlineCompletionsUnificationService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/inlineCompletions/common/inlineCompletionsUnification.service";
export declare class MainThreadLanguageFeatures extends Disposable implements MainThreadLanguageFeaturesShape {
    private readonly _languageService;
    private readonly _languageConfigurationService;
    private readonly _languageFeaturesService;
    private readonly _uriIdentService;
    private readonly _instantiationService;
    private readonly _inlineCompletionsUnificationService;
    private readonly _proxy;
    private readonly _registrations;
    constructor(extHostContext: IExtHostContext, _languageService: ILanguageService, _languageConfigurationService: ILanguageConfigurationService, _languageFeaturesService: ILanguageFeaturesService, _uriIdentService: IUriIdentityService, _instantiationService: IInstantiationService, _inlineCompletionsUnificationService: IInlineCompletionsUnificationService);
    $unregister(handle: number): void;
    private static _reviveLocationDto;
    private static _reviveLocationLinkDto;
    private static _reviveWorkspaceSymbolDto;
    private static _reviveCodeActionDto;
    private static _reviveLinkDTO;
    private static _reviveCallHierarchyItemDto;
    private static _reviveTypeHierarchyItemDto;
    $registerDocumentSymbolProvider(handle: number, selector: IDocumentFilterDto[], displayName: string): void;
    $registerCodeLensSupport(handle: number, selector: IDocumentFilterDto[], eventHandle: number | undefined): void;
    $emitCodeLensEvent(eventHandle: number, event?: unknown): void;
    $registerDefinitionSupport(handle: number, selector: IDocumentFilterDto[]): void;
    $registerDeclarationSupport(handle: number, selector: IDocumentFilterDto[]): void;
    $registerImplementationSupport(handle: number, selector: IDocumentFilterDto[]): void;
    $registerTypeDefinitionSupport(handle: number, selector: IDocumentFilterDto[]): void;
    $registerHoverProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerEvaluatableExpressionProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerInlineValuesProvider(handle: number, selector: IDocumentFilterDto[], eventHandle: number | undefined): void;
    $emitInlineValuesEvent(eventHandle: number, event?: unknown): void;
    $registerDocumentHighlightProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerMultiDocumentHighlightProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerLinkedEditingRangeProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerReferenceSupport(handle: number, selector: IDocumentFilterDto[]): void;
    $registerCodeActionSupport(handle: number, selector: IDocumentFilterDto[], metadata: ICodeActionProviderMetadataDto, displayName: string, extensionId: string, supportsResolve: boolean): void;
    private readonly _pasteEditProviders;
    $registerPasteEditProvider(handle: number, selector: IDocumentFilterDto[], metadata: IPasteEditProviderMetadataDto): void;
    $resolvePasteFileData(handle: number, requestId: number, dataId: string): Promise<VSBuffer>;
    $registerDocumentFormattingSupport(handle: number, selector: IDocumentFilterDto[], extensionId: ExtensionIdentifier, displayName: string): void;
    $registerRangeFormattingSupport(handle: number, selector: IDocumentFilterDto[], extensionId: ExtensionIdentifier, displayName: string, supportsRanges: boolean): void;
    $registerOnTypeFormattingSupport(handle: number, selector: IDocumentFilterDto[], autoFormatTriggerCharacters: string[], extensionId: ExtensionIdentifier): void;
    $registerNavigateTypeSupport(handle: number, supportsResolve: boolean): void;
    $registerRenameSupport(handle: number, selector: IDocumentFilterDto[], supportResolveLocation: boolean): void;
    $registerNewSymbolNamesProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerDocumentSemanticTokensProvider(handle: number, selector: IDocumentFilterDto[], legend: languages.SemanticTokensLegend, eventHandle: number | undefined): void;
    $emitDocumentSemanticTokensEvent(eventHandle: number): void;
    $emitDocumentRangeSemanticTokensEvent(eventHandle: number): void;
    $registerDocumentRangeSemanticTokensProvider(handle: number, selector: IDocumentFilterDto[], legend: languages.SemanticTokensLegend, eventHandle: number | undefined): void;
    private static _inflateSuggestDto;
    $registerCompletionsProvider(handle: number, selector: IDocumentFilterDto[], triggerCharacters: string[], supportsResolveDetails: boolean, extensionId: ExtensionIdentifier): void;
    $registerInlineCompletionsSupport(handle: number, selector: IDocumentFilterDto[], supportsHandleEvents: boolean, extensionId: string, extensionVersion: string, groupId: string | undefined, yieldsToExtensionIds: string[], displayName: string | undefined, debounceDelayMs: number | undefined, excludesExtensionIds: string[], supportsOnDidChange: boolean, supportsSetModelId: boolean, initialModelInfo: IInlineCompletionModelInfoDto | undefined, supportsOnDidChangeModelInfo: boolean, supportsSetProviderOption: boolean, initialProviderOptions: readonly IInlineCompletionProviderOptionDto[] | undefined, supportsOnDidChangeProviderOptions: boolean): void;
    $emitInlineCompletionsChange(handle: number, changeHint: IInlineCompletionChangeHintDto | undefined): void;
    $emitInlineCompletionModelInfoChange(handle: number, data: IInlineCompletionModelInfoDto | undefined): void;
    $emitInlineCompletionProviderOptionsChange(handle: number, data: readonly IInlineCompletionProviderOptionDto[] | undefined): void;
    $registerSignatureHelpProvider(handle: number, selector: IDocumentFilterDto[], metadata: ISignatureHelpProviderMetadataDto): void;
    $registerInlayHintsProvider(handle: number, selector: IDocumentFilterDto[], supportsResolve: boolean, eventHandle: number | undefined, displayName: string | undefined): void;
    $emitInlayHintsEvent(eventHandle: number): void;
    $registerDocumentLinkProvider(handle: number, selector: IDocumentFilterDto[], supportsResolve: boolean): void;
    $registerDocumentColorProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerFoldingRangeProvider(handle: number, selector: IDocumentFilterDto[], extensionId: ExtensionIdentifier, eventHandle: number | undefined): void;
    $emitFoldingRangeEvent(eventHandle: number, event?: unknown): void;
    $registerSelectionRangeProvider(handle: number, selector: IDocumentFilterDto[]): void;
    $registerCallHierarchyProvider(handle: number, selector: IDocumentFilterDto[]): void;
    private static _reviveRegExp;
    private static _reviveIndentationRule;
    private static _reviveOnEnterRule;
    private static _reviveOnEnterRules;
    $setLanguageConfiguration(handle: number, languageId: string, _configuration: ILanguageConfigurationDto): void;
    $registerTypeHierarchyProvider(handle: number, selector: IDocumentFilterDto[]): void;
    private readonly _documentOnDropEditProviders;
    $registerDocumentOnDropEditProvider(handle: number, selector: IDocumentFilterDto[], metadata: IDocumentDropEditProviderMetadata): void;
    $resolveDocumentOnDropFileData(handle: number, requestId: number, dataId: string): Promise<VSBuffer>;
}
export declare class MainThreadDocumentSemanticTokensProvider implements languages.DocumentSemanticTokensProvider {
    private readonly _proxy;
    private readonly _handle;
    private readonly _legend;
    readonly onDidChange: Event<void> | undefined;
    constructor(_proxy: ExtHostLanguageFeaturesShape, _handle: number, _legend: languages.SemanticTokensLegend, onDidChange: Event<void> | undefined);
    releaseDocumentSemanticTokens(resultId: string | undefined): void;
    getLegend(): languages.SemanticTokensLegend;
    provideDocumentSemanticTokens(model: ITextModel, lastResultId: string | null, token: CancellationToken): Promise<languages.SemanticTokens | languages.SemanticTokensEdits | null>;
}
export declare class MainThreadDocumentRangeSemanticTokensProvider implements languages.DocumentRangeSemanticTokensProvider {
    private readonly _proxy;
    private readonly _handle;
    private readonly _legend;
    readonly onDidChange: Event<void> | undefined;
    constructor(_proxy: ExtHostLanguageFeaturesShape, _handle: number, _legend: languages.SemanticTokensLegend, onDidChange: Event<void> | undefined);
    getLegend(): languages.SemanticTokensLegend;
    provideDocumentRangeSemanticTokens(model: ITextModel, range: EditorRange, token: CancellationToken): Promise<languages.SemanticTokens | null>;
}
