@jqassistant/ts-lce
Version:
Tool to extract language concepts from a TypeScript codebase and export them to a JSON file.
104 lines (103 loc) • 5.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JSXExpressionContainerTraverser = exports.JSXSpreadChildTraverser = exports.JSXSpreadAttributeTraverser = exports.JSXAttributeTraverser = exports.JSXFragmentTraverser = exports.JSXOpeningElementTraverser = exports.JSXElementTraverser = 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 JSXElementTraverser extends traverser_1.Traverser {
static CHILDREN_PROP = "children";
static OPENING_ELEMENT_PROP = "opening-element";
static CLOSING_ELEMENT_PROP = "closing-element";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.JSXElement) {
(0, traverser_utils_1.runTraverserForNode)(node.openingElement, { parentPropName: JSXElementTraverser.OPENING_ELEMENT_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.children, { parentPropName: JSXElementTraverser.CHILDREN_PROP }, processingContext, processors, conceptMaps);
if (node.closingElement) {
(0, traverser_utils_1.runTraverserForNode)(node.closingElement, { parentPropName: JSXElementTraverser.CLOSING_ELEMENT_PROP }, processingContext, processors, conceptMaps);
}
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.JSXElementTraverser = JSXElementTraverser;
class JSXOpeningElementTraverser extends traverser_1.Traverser {
static TYPE_PARAMETERS_PROP = "type-parameters";
static ATTRIBUTES_PROP = "attributes";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.JSXOpeningElement) {
if (node.typeArguments) {
(0, traverser_utils_1.runTraverserForNodes)(node.typeArguments?.params, { parentPropName: JSXOpeningElementTraverser.TYPE_PARAMETERS_PROP }, processingContext, processors, conceptMaps);
}
(0, traverser_utils_1.runTraverserForNodes)(node.attributes, { parentPropName: JSXOpeningElementTraverser.ATTRIBUTES_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.JSXOpeningElementTraverser = JSXOpeningElementTraverser;
class JSXFragmentTraverser extends traverser_1.Traverser {
static CHILDREN_PROP = "children";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.JSXFragment) {
(0, traverser_utils_1.runTraverserForNodes)(node.children, { parentPropName: JSXFragmentTraverser.CHILDREN_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.JSXFragmentTraverser = JSXFragmentTraverser;
class JSXAttributeTraverser extends traverser_1.Traverser {
static VALUE_PROP = "value";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.JSXAttribute) {
if (node.value) {
(0, traverser_utils_1.runTraverserForNode)(node.value, { parentPropName: JSXAttributeTraverser.VALUE_PROP }, processingContext, processors, conceptMaps);
}
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.JSXAttributeTraverser = JSXAttributeTraverser;
class JSXSpreadAttributeTraverser extends traverser_1.Traverser {
static ARGUMENT_PROP = "argument";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.JSXSpreadAttribute) {
(0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: JSXSpreadAttributeTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.JSXSpreadAttributeTraverser = JSXSpreadAttributeTraverser;
class JSXSpreadChildTraverser extends traverser_1.Traverser {
static EXPRESSION_PROP = "expression";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.JSXSpreadChild) {
(0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: JSXSpreadChildTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.JSXSpreadChildTraverser = JSXSpreadChildTraverser;
class JSXExpressionContainerTraverser extends traverser_1.Traverser {
static EXPRESSION_PROP = "expression";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.JSXExpressionContainer) {
(0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: JSXExpressionContainerTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.JSXExpressionContainerTraverser = JSXExpressionContainerTraverser;