@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
JavaScript
;
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;