/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import * as ts from 'typescript'; /** * Return the node that most tightly encompasses the specified `position`. * @param node The starting node to start the top-down search. * @param position The target position within the `node`. */ export function findTightestNode(node: ts.Node, position: number): ts.Node|undefined { if (node.getStart() <= position && position < node.getEnd()) { return node.forEachChild(c => findTightestNode(c, position)) ?? node; } return undefined; } export function getParentClassDeclaration(startNode: ts.Node): ts.ClassDeclaration|undefined { while (startNode) { if (ts.isClassDeclaration(startNode)) { return startNode; } startNode = startNode.parent; } return undefined; }