@unisnips/ultisnips
Version:
Utilities for converting ultisnips in unisnips project
111 lines (110 loc) • 3.33 kB
TypeScript
import { OrNull, TokenNode } from '@unisnips/core';
import { TextPosition } from '../util/position';
import { Token, TabStopToken } from '../parse/tokenizer';
export declare type MarkerClass = new (opts: MarkerInitOpts) => Marker;
declare type MarkerInitOpts<T = Token> = {
parent: Marker;
token?: T;
start?: TextPosition;
end?: TextPosition;
tieBreaker?: TextPosition;
initialText?: string;
};
/**
* Represents any object in the text that has a span in any ways.
*/
export declare class Marker<T extends Token = Token> {
start: TextPosition;
end: TextPosition;
initialText: string;
tabStops: {
[key: number]: TabStop;
};
parent: OrNull<Marker>;
token: OrNull<T>;
/**
* useful in nested tabstops,
* e.g. '${11:good}', innerContentOffset should be '${12:'.length
*/
innerContentOffset: number;
protected children: Marker[];
protected tieBreaker: TextPosition;
constructor(opts: MarkerInitOpts<T>);
addChild(child: Marker): void;
/**
* will be serialized to TokenNode
*/
get markerType(): string;
getTokenNodeData(): {};
toTokenNode(): TokenNode<any>;
/** @abstract */
protected init(opts: MarkerInitOpts): void;
}
/**
* This base class represents any object in the text that can be changed by
* the user.
*/
declare class EditableMarker<T = Token> extends Marker {
get editableChildren(): Marker<Token>[];
}
declare class NoneditableMarker extends Marker {
}
export declare class Transform extends Marker {
protected regex: RegExp;
protected replace: any;
protected search: string;
protected options: string;
get markerType(): string;
getTokenNodeData(): Pick<any, "replace" | "search" | "options">;
initTransformation(opts: {
search: string;
options: string;
replace: string;
}): void;
protected transformText(text: string): string;
}
export declare class TransformableMarker<T = Token> extends EditableMarker<T> {
transform?: Transform;
search: string;
replace: string;
options: any;
getTokenNodeData(): any;
protected parseTransform(text: string): void;
}
export declare class TabStop<T = TabStopToken> extends TransformableMarker {
number: number;
get markerType(): string;
init(opts: MarkerInitOpts<TabStopToken>): void;
}
export declare class SnippetInstance extends EditableMarker {
visualContent: string;
get markerType(): string;
init(opts: MarkerInitOpts): void;
}
export declare class Mirror extends Marker {
protected tabStop: TabStop;
get markerType(): string;
init(opts: MarkerInitOpts): void;
}
export declare class UniSnipsVariable extends NoneditableMarker {
get name(): string;
}
/**
* A ${VISUAL} placeholder that will use the text that was last visually
* selected and insert it here.
*
* If there was no text visually selected, this will be the empty string.
*/
export declare class Visual extends TransformableMarker {
text: string;
/** QUESTION: may be related to vim's mode? */
mode: string;
init(opts: MarkerInitOpts): void;
get markerType(): string;
}
export declare class ScriptCode extends NoneditableMarker {
get code(): string;
get scriptType(): string;
get markerType(): string;
}
export {};