UNPKG

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