UNPKG

langium

Version:

A language engineering tool for the Language Server Protocol

73 lines 3.85 kB
/****************************************************************************** * Copyright 2021 TypeFox GmbH * This program and the accompanying materials are made available under the * terms of the MIT License, which is available in the project root. ******************************************************************************/ import type { IToken } from '@chevrotain/types'; import type { Range } from 'vscode-languageserver-types'; import type { CstNode, LeafCstNode } from '../syntax-tree.js'; import type { DocumentSegment } from '../workspace/documents.js'; import type { Stream, TreeStream } from './stream.js'; /** * Create a stream of all CST nodes that are directly and indirectly contained in the given root node, * including the root node itself. */ export declare function streamCst(node: CstNode): TreeStream<CstNode>; /** * Create a stream of all leaf nodes that are directly and indirectly contained in the given root node. */ export declare function flattenCst(node: CstNode): Stream<LeafCstNode>; /** * Determines whether the specified cst node is a child of the specified parent node. */ export declare function isChildNode(child: CstNode, parent: CstNode): boolean; export declare function tokenToRange(token: IToken): Range; export declare function toDocumentSegment(node: CstNode): DocumentSegment; export declare function toDocumentSegment(node?: CstNode): DocumentSegment | undefined; export declare enum RangeComparison { Before = 0, After = 1, OverlapFront = 2, OverlapBack = 3, Inside = 4, Outside = 5 } export declare function compareRange(range: Range, to: Range): RangeComparison; export declare function inRange(range: Range, to: Range): boolean; export declare const DefaultNameRegexp: RegExp; /** * Performs `findLeafNodeAtOffset` with a minor difference: When encountering a character that matches the `nameRegexp` argument, * it will instead return the leaf node at the `offset - 1` position. * * For LSP services, users expect that the declaration of an element is available if the cursor is directly after the element. */ export declare function findDeclarationNodeAtOffset(cstNode: CstNode | undefined, offset: number, nameRegexp?: RegExp): LeafCstNode | undefined; export declare function findCommentNode(cstNode: CstNode | undefined, commentNames: string[]): CstNode | undefined; export declare function isCommentNode(cstNode: CstNode, commentNames: string[]): boolean; /** * Finds the leaf CST node at the specified 0-based string offset. * Note that the given offset will be within the range of the returned leaf node. * * If the offset does not point to a CST node (but just white space), this method will return `undefined`. * * @param node The CST node to search through. * @param offset The specified offset. * @returns The CST node at the specified offset. */ export declare function findLeafNodeAtOffset(node: CstNode, offset: number): LeafCstNode | undefined; /** * Finds the leaf CST node at the specified 0-based string offset. * If no CST node exists at the specified position, it will return the leaf node before it. * * If there is no leaf node before the specified offset, this method will return `undefined`. * * @param node The CST node to search through. * @param offset The specified offset. * @returns The CST node closest to the specified offset. */ export declare function findLeafNodeBeforeOffset(node: CstNode, offset: number): LeafCstNode | undefined; export declare function getPreviousNode(node: CstNode, hidden?: boolean): CstNode | undefined; export declare function getNextNode(node: CstNode, hidden?: boolean): CstNode | undefined; export declare function getStartlineNode(node: CstNode): CstNode; export declare function getInteriorNodes(start: CstNode, end: CstNode): CstNode[]; //# sourceMappingURL=cst-utils.d.ts.map