@jqassistant/ts-lce
Version:
Tool to extract language concepts from a TypeScript codebase and export them to a JSON file.
37 lines (36 loc) • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FunctionTraverser = void 0;
const utils_1 = require("@typescript-eslint/utils");
const concept_1 = require("../concept");
const traverser_1 = require("../traverser");
const traverser_utils_1 = require("../utils/traverser.utils");
/**
* Traversal of function declarations and expressions.
*
* Note: see also combined use with method declarations in `MethodTraverser`
*/
class FunctionTraverser extends traverser_1.Traverser {
static TYPE_PARAMETERS_PROP = "type-parameters";
static PARAMETERS_PROP = "parameters";
static BODY_PROP = "body";
static RETURN_TYPE_PROP = "return-type";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.FunctionDeclaration ||
node.type === utils_1.AST_NODE_TYPES.FunctionExpression ||
node.type === utils_1.AST_NODE_TYPES.TSDeclareFunction ||
node.type === utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression) {
if (node.typeParameters)
(0, traverser_utils_1.runTraverserForNode)(node.typeParameters, { parentPropName: FunctionTraverser.TYPE_PARAMETERS_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.params, { parentPropName: FunctionTraverser.PARAMETERS_PROP }, processingContext, processors, conceptMaps);
if (node.body)
(0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: FunctionTraverser.BODY_PROP }, processingContext, processors, conceptMaps);
if (node.returnType)
(0, traverser_utils_1.runTraverserForNode)(node.returnType, { parentPropName: FunctionTraverser.RETURN_TYPE_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.FunctionTraverser = FunctionTraverser;