import type { EndOfLine, TextDocument, TextLine, Uri } from 'vscode';
import { UriComponents } from '../../../util/vs/base/common/uri';
import { Position, Range } from '../../../util/common/test/shims/vscodeTypesShim';
import { PositionOffsetTransformer } from './positionOffsetTransformer';
export interface ITextDocumentSnapshotJSON {
    readonly uri: UriComponents;
    readonly _text: string;
    readonly languageId: string;
    readonly version: number;
    readonly eol: EndOfLine;
}
export declare function isTextDocumentSnapshotJSON(thing: any): thing is ITextDocumentSnapshotJSON;
export declare class TextDocumentSnapshot {
    _textDocumentSnapshot: undefined;
    static create(doc: TextDocument): TextDocumentSnapshot;
    static fromNewText(text: string, doc: TextDocument): TextDocumentSnapshot;
    static fromJSON(doc: TextDocument, json: ITextDocumentSnapshotJSON): TextDocumentSnapshot;
    readonly document: TextDocument;
    readonly uri: Uri;
    readonly _text: string;
    readonly languageId: string;
    readonly version: number;
    readonly eol: EndOfLine;
    private _transformer;
    get transformer(): PositionOffsetTransformer;
    get fileName(): string;
    get isUntitled(): boolean;
    get lineCount(): number;
    private _lines;
    get lines(): readonly string[];
    private constructor();
    lineAt(line: number): TextLine;
    lineAt(position: Position): TextLine;
    offsetAt(position: Position): number;
    positionAt(offset: number): Position;
    getText(range?: Range): string;
    private _getTextInRange;
    getWordRangeAtPosition(_position: Position): Range | undefined;
    validateRange(range: Range): Range;
    validatePosition(position: Position): Position;
    toJSON(): ITextDocumentSnapshotJSON;
}
export declare class SnapshotDocumentLine implements TextLine {
    private readonly _line;
    private readonly _text;
    private readonly _isLastLine;
    constructor(line: number, text: string, isLastLine: boolean);
    get lineNumber(): number;
    get text(): string;
    get range(): Range;
    get rangeIncludingLineBreak(): Range;
    get firstNonWhitespaceCharacterIndex(): number;
    get isEmptyOrWhitespace(): boolean;
}
//# sourceMappingURL=textDocumentSnapshot.d.ts.map