@jqassistant/ts-lce
Version:
Tool to extract language concepts from a TypeScript codebase and export them to a JSON file.
53 lines (52 loc) • 3.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccessorPropertyTraverser = exports.PropertyTraverser = 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 PropertyTraverser extends traverser_1.Traverser {
static KEY_PROP = "key";
static INITIALIZER_PROP = "initializer";
static DECORATORS_PROP = "decorators";
static TYPE_ANNOTATION_PROP = "type-annotation";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.PropertyDefinition ||
node.type === utils_1.AST_NODE_TYPES.Property ||
node.type === utils_1.AST_NODE_TYPES.TSPropertySignature) {
(0, traverser_utils_1.runTraverserForNode)(node.key, { parentPropName: PropertyTraverser.KEY_PROP }, processingContext, processors, conceptMaps);
if (node.type === utils_1.AST_NODE_TYPES.PropertyDefinition || node.type === utils_1.AST_NODE_TYPES.TSPropertySignature) {
if (node.typeAnnotation)
(0, traverser_utils_1.runTraverserForNode)(node.typeAnnotation, { parentPropName: PropertyTraverser.TYPE_ANNOTATION_PROP }, processingContext, processors, conceptMaps);
}
if (node.type === utils_1.AST_NODE_TYPES.PropertyDefinition || node.type === utils_1.AST_NODE_TYPES.Property) {
if (node.value)
(0, traverser_utils_1.runTraverserForNode)(node.value, { parentPropName: PropertyTraverser.INITIALIZER_PROP }, processingContext, processors, conceptMaps);
if (node.type === utils_1.AST_NODE_TYPES.PropertyDefinition && node.decorators)
(0, traverser_utils_1.runTraverserForNodes)(node.decorators, { parentPropName: PropertyTraverser.DECORATORS_PROP }, processingContext, processors, conceptMaps);
}
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.PropertyTraverser = PropertyTraverser;
class AccessorPropertyTraverser extends traverser_1.Traverser {
static KEY_PROP = "key";
static INITIALIZER_PROP = "initializer";
static DECORATORS_PROP = "decorators";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.AccessorProperty || node.type === utils_1.AST_NODE_TYPES.TSAbstractAccessorProperty) {
(0, traverser_utils_1.runTraverserForNode)(node.key, { parentPropName: AccessorPropertyTraverser.KEY_PROP }, processingContext, processors, conceptMaps);
if (node.value)
(0, traverser_utils_1.runTraverserForNode)(node.value, { parentPropName: AccessorPropertyTraverser.INITIALIZER_PROP }, processingContext, processors, conceptMaps);
if (node.decorators)
(0, traverser_utils_1.runTraverserForNodes)(node.decorators, { parentPropName: AccessorPropertyTraverser.DECORATORS_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.AccessorPropertyTraverser = AccessorPropertyTraverser;