2020-10-21 14:01:10 -04:00
|
|
|
/**
|
|
|
|
* @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;
|
2020-12-16 14:13:34 -05:00
|
|
|
}
|