UNPKG

@jqassistant/ts-lce

Version:

Tool to extract language concepts from a TypeScript codebase and export them to a JSON file.

63 lines (62 loc) 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InterfaceHeritageTraverser = exports.InterfaceBodyTraverser = exports.InterfaceDeclarationTraverser = 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"); class InterfaceDeclarationTraverser extends traverser_1.Traverser { static TYPE_PARAMETERS_PROP = "type-parameters"; static EXTENDS_PROP = "extends"; static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.TSInterfaceDeclaration) { if (node.typeParameters) { (0, traverser_utils_1.runTraverserForNodes)(node.typeParameters.params, // TODO: remove direct hoisting { parentPropName: InterfaceDeclarationTraverser.TYPE_PARAMETERS_PROP, }, processingContext, processors, conceptMaps); } if (node.extends) { (0, traverser_utils_1.runTraverserForNodes)(node.extends, { parentPropName: InterfaceDeclarationTraverser.EXTENDS_PROP, }, processingContext, processors, conceptMaps); } (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: InterfaceDeclarationTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.InterfaceDeclarationTraverser = InterfaceDeclarationTraverser; class InterfaceBodyTraverser extends traverser_1.Traverser { static MEMBERS_PROP = "members"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.TSInterfaceBody) { (0, traverser_utils_1.runTraverserForNodes)(node.body, { parentPropName: InterfaceDeclarationTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.InterfaceBodyTraverser = InterfaceBodyTraverser; class InterfaceHeritageTraverser extends traverser_1.Traverser { static TYPE_PARAMETERS_PROP = "type-parameters"; static EXPRESSION_PROP = "expression"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.TSInterfaceHeritage) { if (node.typeArguments) { (0, traverser_utils_1.runTraverserForNodes)(node.typeArguments.params, { parentPropName: InterfaceHeritageTraverser.TYPE_PARAMETERS_PROP, }, processingContext, processors, conceptMaps); } (0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: InterfaceHeritageTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.InterfaceHeritageTraverser = InterfaceHeritageTraverser;