diff --git a/lib/binding_web/package.json b/lib/binding_web/package.json index 8bb49e39..32161d93 100644 --- a/lib/binding_web/package.json +++ b/lib/binding_web/package.json @@ -3,6 +3,7 @@ "version": "0.15.3", "description": "Tree-sitter bindings for the web", "main": "tree-sitter.js", + "types": "tree-sitter-web.d.ts", "directories": { "test": "test" }, diff --git a/lib/binding_web/tree-sitter-web.d.ts b/lib/binding_web/tree-sitter-web.d.ts new file mode 100644 index 00000000..e2ec3a66 --- /dev/null +++ b/lib/binding_web/tree-sitter-web.d.ts @@ -0,0 +1,116 @@ +declare module 'web-tree-sitter' { + class Parser { + static init(): Promise; + parse(input: string | Parser.Input, previousTree?: Parser.Tree): Parser.Tree; + getLanguage(): any; + setLanguage(language: any): void; + getLogger(): Parser.Logger; + setLogger(logFunc: Parser.Logger): void; + } + + namespace Parser { + export type Point = { + row: number; + column: number; + }; + + export type Range = { + start: Point; + end: Point; + }; + + export type Edit = { + startIndex: number; + oldEndIndex: number; + newEndIndex: number; + startPosition: Point; + oldEndPosition: Point; + newEndPosition: Point; + }; + + export type Logger = ( + message: string, + params: {[param: string]: string}, + type: "parse" | "lex" + ) => void; + + export interface Input { + seek(index: number): void; + read(): any; + } + + export interface SyntaxNode { + tree: Tree; + type: string; + isNamed: boolean; + text: string; + startPosition: Point; + endPosition: Point; + startIndex: number; + endIndex: number; + parent: SyntaxNode | null; + children: Array; + namedChildren: Array; + childCount: number; + namedChildCount: number; + firstChild: SyntaxNode | null; + firstNamedChild: SyntaxNode | null; + lastChild: SyntaxNode | null; + lastNamedChild: SyntaxNode | null; + nextSibling: SyntaxNode | null; + nextNamedSibling: SyntaxNode | null; + previousSibling: SyntaxNode | null; + previousNamedSibling: SyntaxNode | null; + + hasChanges(): boolean; + hasError(): boolean; + equals(other: SyntaxNode): boolean; + isMissing(): boolean; + toString(): string; + child(index: number): SyntaxNode | null; + namedChild(index: number): SyntaxNode | null; + + descendantForIndex(index: number): SyntaxNode; + descendantForIndex(startIndex: number, endIndex: number): SyntaxNode; + namedDescendantForIndex(index: number): SyntaxNode; + namedDescendantForIndex(startIndex: number, endIndex: number): SyntaxNode; + descendantForPosition(position: Point): SyntaxNode; + descendantForPosition(startPosition: Point, endPosition: Point): SyntaxNode; + namedDescendantForPosition(position: Point): SyntaxNode; + namedDescendantForPosition(startPosition: Point, endPosition: Point): SyntaxNode; + + walk(): TreeCursor; + } + + export interface TreeCursor { + nodeType: string; + nodeText: string; + nodeIsNamed: boolean; + startPosition: Point; + endPosition: Point; + startIndex: number; + endIndex: number; + readonly currentNode: SyntaxNode + + reset(node: SyntaxNode): void + gotoParent(): boolean; + gotoFirstChild(): boolean; + gotoFirstChildForIndex(index: number): boolean; + gotoNextSibling(): boolean; + } + + export interface Tree { + readonly rootNode: SyntaxNode; + + edit(delta: Edit): Tree; + walk(): TreeCursor; + getChangedRanges(other: Tree): Range[]; + getEditedRange(other: Tree): Range; + } + namespace Language { + function load(url: string): Promise + } + } + + export = Parser +}