@jqassistant/ts-lce
Version:
Tool to extract language concepts from a TypeScript codebase and export them to a JSON file.
399 lines (398 loc) • 23.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.YieldExpressionTraverser = exports.UpdateExpressionTraverser = exports.UnaryExpressionTraverser = exports.TypeAssertionTraverser = exports.NonNullExpressionTraverser = exports.AsExpressionTraverser = exports.TemplateLiteralTraverser = exports.TaggedTemplateExpressionTraverser = exports.SequenceExpressionTraverser = exports.ObjectPatternTraverser = exports.ObjectExpressionTraverser = exports.NewExpressionTraverser = exports.MemberExpressionTraverser = exports.LogicalExpressionTraverser = exports.ImportExpressionTraverser = exports.IdentifierTraverser = exports.ConditionalExpressionTraverser = exports.ChainExpressionTraverser = exports.CallExpressionTraverser = exports.BinaryExpressionTraverser = exports.AwaitExpressionTraverser = exports.AssignmentExpressionTraverser = exports.ArrowFunctionExpressionTraverser = exports.ArrayPatternTraverser = exports.SpreadElementTraverser = exports.ArrayExpressionTraverser = 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 ArrayExpressionTraverser extends traverser_1.Traverser {
static ELEMENTS_PROP = "elements";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.ArrayExpression) {
(0, traverser_utils_1.runTraverserForNodes)(node.elements, { parentPropName: ArrayExpressionTraverser.ELEMENTS_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ArrayExpressionTraverser = ArrayExpressionTraverser;
class SpreadElementTraverser extends traverser_1.Traverser {
static ARGUMENT_PROP = "argument";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.SpreadElement) {
(0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: SpreadElementTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.SpreadElementTraverser = SpreadElementTraverser;
class ArrayPatternTraverser extends traverser_1.Traverser {
static DECORATORS_PROP = "decorators";
static ELEMENTS_PROP = "elements";
static TYPE_ANNOTATION_PROP = "type-annotation";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.ArrayPattern) {
if (node.decorators)
(0, traverser_utils_1.runTraverserForNodes)(node.decorators, { parentPropName: ArrayPatternTraverser.DECORATORS_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.elements, { parentPropName: ArrayPatternTraverser.ELEMENTS_PROP }, processingContext, processors, conceptMaps);
if (node.typeAnnotation)
(0, traverser_utils_1.runTraverserForNode)(node.typeAnnotation, { parentPropName: ArrayPatternTraverser.TYPE_ANNOTATION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ArrayPatternTraverser = ArrayPatternTraverser;
class ArrowFunctionExpressionTraverser 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.ArrowFunctionExpression) {
if (node.typeParameters)
(0, traverser_utils_1.runTraverserForNodes)(node.typeParameters.params, {
parentPropName: ArrowFunctionExpressionTraverser.TYPE_PARAMETERS_PROP,
}, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.params, { parentPropName: ArrowFunctionExpressionTraverser.PARAMETERS_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: ArrowFunctionExpressionTraverser.BODY_PROP }, processingContext, processors, conceptMaps);
if (node.returnType)
(0, traverser_utils_1.runTraverserForNode)(node.returnType, { parentPropName: ArrowFunctionExpressionTraverser.RETURN_TYPE_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ArrowFunctionExpressionTraverser = ArrowFunctionExpressionTraverser;
class AssignmentExpressionTraverser extends traverser_1.Traverser {
static LEFT_PROP = "left";
static RIGHT_PROP = "right";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.AssignmentExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.left, { parentPropName: AssignmentExpressionTraverser.LEFT_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.right, { parentPropName: AssignmentExpressionTraverser.RIGHT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.AssignmentExpressionTraverser = AssignmentExpressionTraverser;
class AwaitExpressionTraverser extends traverser_1.Traverser {
static ARGUMENT_PROP = "argument";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.AwaitExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: AwaitExpressionTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.AwaitExpressionTraverser = AwaitExpressionTraverser;
class BinaryExpressionTraverser extends traverser_1.Traverser {
static LEFT_PROP = "left";
static RIGHT_PROP = "right";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.BinaryExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.left, { parentPropName: BinaryExpressionTraverser.LEFT_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.right, { parentPropName: BinaryExpressionTraverser.RIGHT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.BinaryExpressionTraverser = BinaryExpressionTraverser;
class CallExpressionTraverser extends traverser_1.Traverser {
static TYPE_PARAMETERS_PROP = "type-parameters";
static ARGUMENTS_PROP = "arguments";
static CALLEE_PROP = "callee";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.CallExpression) {
if (node.typeArguments)
(0, traverser_utils_1.runTraverserForNode)(node.typeArguments, {
parentPropName: CallExpressionTraverser.TYPE_PARAMETERS_PROP,
}, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.arguments, { parentPropName: CallExpressionTraverser.ARGUMENTS_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.callee, { parentPropName: CallExpressionTraverser.CALLEE_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.CallExpressionTraverser = CallExpressionTraverser;
class ChainExpressionTraverser extends traverser_1.Traverser {
static EXPRESSION_PROP = "expression";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.ChainExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: ChainExpressionTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ChainExpressionTraverser = ChainExpressionTraverser;
class ConditionalExpressionTraverser extends traverser_1.Traverser {
static TEST_PROP = "test";
static CONSEQUENT_PROP = "consequent";
static ALTERNATE_PROP = "alternate";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.ConditionalExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.test, { parentPropName: ConditionalExpressionTraverser.TEST_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.consequent, {
parentPropName: ConditionalExpressionTraverser.CONSEQUENT_PROP,
}, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.alternate, {
parentPropName: ConditionalExpressionTraverser.ALTERNATE_PROP,
}, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ConditionalExpressionTraverser = ConditionalExpressionTraverser;
class IdentifierTraverser extends traverser_1.Traverser {
static DECORATORS_PROP = "decorators";
static TYPE_ANNOTATIONS_PROP = "type-annotations";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.Identifier) {
if (node.decorators)
(0, traverser_utils_1.runTraverserForNodes)(node.decorators, { parentPropName: IdentifierTraverser.DECORATORS_PROP }, processingContext, processors, conceptMaps);
if (node.typeAnnotation)
(0, traverser_utils_1.runTraverserForNode)(node.typeAnnotation, { parentPropName: IdentifierTraverser.TYPE_ANNOTATIONS_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.IdentifierTraverser = IdentifierTraverser;
class ImportExpressionTraverser extends traverser_1.Traverser {
static OPTIONS_PROP = "options";
static SOURCE_PROP = "source";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.ImportExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.source, { parentPropName: ImportExpressionTraverser.SOURCE_PROP }, processingContext, processors, conceptMaps);
if (node.options)
(0, traverser_utils_1.runTraverserForNode)(node.options, {
parentPropName: ImportExpressionTraverser.OPTIONS_PROP,
}, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ImportExpressionTraverser = ImportExpressionTraverser;
class LogicalExpressionTraverser extends traverser_1.Traverser {
static LEFT_PROP = "left";
static RIGHT_PROP = "right";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.LogicalExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.left, { parentPropName: LogicalExpressionTraverser.LEFT_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.right, { parentPropName: LogicalExpressionTraverser.RIGHT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.LogicalExpressionTraverser = LogicalExpressionTraverser;
class MemberExpressionTraverser extends traverser_1.Traverser {
static OBJECT_PROP = "object";
static PROPERTY_PROP = "property";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.MemberExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.object, { parentPropName: MemberExpressionTraverser.OBJECT_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.property, { parentPropName: MemberExpressionTraverser.PROPERTY_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.MemberExpressionTraverser = MemberExpressionTraverser;
class NewExpressionTraverser extends traverser_1.Traverser {
static TYPE_PARAMETERS_PROP = "type-parameters";
static ARGUMENTS_PROP = "arguments";
static CALLEE_PROP = "callee";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.NewExpression) {
if (node.typeArguments)
(0, traverser_utils_1.runTraverserForNode)(node.typeArguments, {
parentPropName: NewExpressionTraverser.TYPE_PARAMETERS_PROP,
}, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.arguments, { parentPropName: NewExpressionTraverser.ARGUMENTS_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.callee, { parentPropName: NewExpressionTraverser.CALLEE_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.NewExpressionTraverser = NewExpressionTraverser;
class ObjectExpressionTraverser extends traverser_1.Traverser {
static PROPERTIES_PROP = "properties";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.ObjectExpression) {
(0, traverser_utils_1.runTraverserForNodes)(node.properties, { parentPropName: ObjectExpressionTraverser.PROPERTIES_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ObjectExpressionTraverser = ObjectExpressionTraverser;
class ObjectPatternTraverser extends traverser_1.Traverser {
static DECORATORS_PROP = "decorators";
static PROPERTIES_PROP = "properties";
static TYPE_ANNOTATION_PROP = "type-annotation";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.ObjectPattern) {
if (node.decorators)
(0, traverser_utils_1.runTraverserForNodes)(node.decorators, { parentPropName: ObjectPatternTraverser.DECORATORS_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.properties, { parentPropName: ObjectPatternTraverser.PROPERTIES_PROP }, processingContext, processors, conceptMaps);
if (node.typeAnnotation)
(0, traverser_utils_1.runTraverserForNode)(node.typeAnnotation, { parentPropName: ObjectPatternTraverser.TYPE_ANNOTATION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.ObjectPatternTraverser = ObjectPatternTraverser;
class SequenceExpressionTraverser extends traverser_1.Traverser {
static EXPRESSIONS_PROP = "expressions";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.SequenceExpression) {
(0, traverser_utils_1.runTraverserForNodes)(node.expressions, {
parentPropName: SequenceExpressionTraverser.EXPRESSIONS_PROP,
}, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.SequenceExpressionTraverser = SequenceExpressionTraverser;
class TaggedTemplateExpressionTraverser extends traverser_1.Traverser {
static QUASI_PROP = "quasi";
static TAG_PROP = "tag";
static TYPE_PARAMETER_PROP = "type-parameters";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.TaggedTemplateExpression) {
if (node.typeArguments)
(0, traverser_utils_1.runTraverserForNodes)(node.typeArguments.params, {
parentPropName: TaggedTemplateExpressionTraverser.TYPE_PARAMETER_PROP,
}, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.tag, { parentPropName: TaggedTemplateExpressionTraverser.TAG_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.quasi, {
parentPropName: TaggedTemplateExpressionTraverser.QUASI_PROP,
}, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.TaggedTemplateExpressionTraverser = TaggedTemplateExpressionTraverser;
class TemplateLiteralTraverser extends traverser_1.Traverser {
static QUASIS_PROP = "quasis";
static EXPRESSIONS_PROP = "expressions";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.TemplateLiteral) {
(0, traverser_utils_1.runTraverserForNodes)(node.quasis, { parentPropName: TemplateLiteralTraverser.QUASIS_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNodes)(node.expressions, { parentPropName: TemplateLiteralTraverser.EXPRESSIONS_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.TemplateLiteralTraverser = TemplateLiteralTraverser;
class AsExpressionTraverser extends traverser_1.Traverser {
static EXPRESSION_PROP = "expression";
static TYPE_ANNOTATION_PROP = "type-annotation";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.TSAsExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: AsExpressionTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.typeAnnotation, { parentPropName: AsExpressionTraverser.TYPE_ANNOTATION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.AsExpressionTraverser = AsExpressionTraverser;
class NonNullExpressionTraverser extends traverser_1.Traverser {
static EXPRESSION_PROP = "expression";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.TSNonNullExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: NonNullExpressionTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.NonNullExpressionTraverser = NonNullExpressionTraverser;
class TypeAssertionTraverser extends traverser_1.Traverser {
static EXPRESSION_PROP = "expression";
static TYPE_ANNOTATION_PROP = "type-annotation";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.TSTypeAssertion) {
(0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: TypeAssertionTraverser.EXPRESSION_PROP }, processingContext, processors, conceptMaps);
(0, traverser_utils_1.runTraverserForNode)(node.typeAnnotation, { parentPropName: TypeAssertionTraverser.TYPE_ANNOTATION_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.TypeAssertionTraverser = TypeAssertionTraverser;
class UnaryExpressionTraverser extends traverser_1.Traverser {
static ARGUMENT_PROP = "argument";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.UnaryExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: UnaryExpressionTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.UnaryExpressionTraverser = UnaryExpressionTraverser;
class UpdateExpressionTraverser extends traverser_1.Traverser {
static ARGUMENT_PROP = "argument";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.UpdateExpression) {
(0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: UpdateExpressionTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.UpdateExpressionTraverser = UpdateExpressionTraverser;
class YieldExpressionTraverser extends traverser_1.Traverser {
static ARGUMENT_PROP = "argument";
traverseChildren(processingContext, processors) {
const { node } = processingContext;
const conceptMaps = [];
if (node.type === utils_1.AST_NODE_TYPES.YieldExpression) {
if (node.argument)
(0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: YieldExpressionTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps);
}
return (0, concept_1.mergeConceptMaps)(...conceptMaps);
}
}
exports.YieldExpressionTraverser = YieldExpressionTraverser;