UNPKG

@jqassistant/ts-lce

Version:

Tool to extract language concepts from a TypeScript codebase and export them to a JSON file.

231 lines (230 loc) 13.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WithStatementTraverser = exports.WhileStatementTraverser = exports.TryStatementTraverser = exports.ThrowStatementTraverser = exports.SwitchCaseTraverser = exports.SwitchStatementTraverser = exports.ReturnStatementTraverser = exports.LabeledStatementTraverser = exports.IfStatementTraverser = exports.ForStatementTraverser = exports.ForOfStatementTraverser = exports.ForInStatementTraverser = exports.ExpressionStatementTraverser = exports.DoWhileStatementTraverser = exports.BlockStatementTraverser = 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 BlockStatementTraverser extends traverser_1.Traverser { static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.BlockStatement) { (0, traverser_utils_1.runTraverserForNodes)(node.body, { parentPropName: BlockStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.BlockStatementTraverser = BlockStatementTraverser; class DoWhileStatementTraverser extends traverser_1.Traverser { static TEST_PROP = "test"; static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.DoWhileStatement) { (0, traverser_utils_1.runTraverserForNode)(node.test, { parentPropName: DoWhileStatementTraverser.TEST_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: DoWhileStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.DoWhileStatementTraverser = DoWhileStatementTraverser; class ExpressionStatementTraverser extends traverser_1.Traverser { static EXPRESSION_PROP = "expression"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.ExpressionStatement) { (0, traverser_utils_1.runTraverserForNode)(node.expression, { parentPropName: ExpressionStatementTraverser.EXPRESSION_PROP, }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.ExpressionStatementTraverser = ExpressionStatementTraverser; class ForInStatementTraverser extends traverser_1.Traverser { static LEFT_PROP = "left"; static RIGHT_PROP = "right"; static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.ForInStatement) { (0, traverser_utils_1.runTraverserForNode)(node.left, { parentPropName: ForInStatementTraverser.LEFT_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.right, { parentPropName: ForInStatementTraverser.RIGHT_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: ForInStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.ForInStatementTraverser = ForInStatementTraverser; class ForOfStatementTraverser extends traverser_1.Traverser { static LEFT_PROP = "left"; static RIGHT_PROP = "right"; static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.ForOfStatement) { (0, traverser_utils_1.runTraverserForNode)(node.left, { parentPropName: ForOfStatementTraverser.LEFT_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.right, { parentPropName: ForOfStatementTraverser.RIGHT_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: ForOfStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.ForOfStatementTraverser = ForOfStatementTraverser; class ForStatementTraverser extends traverser_1.Traverser { static INIT_PROP = "init"; static TEST_PROP = "test"; static UPDATE_PROP = "update"; static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.ForStatement) { if (node.init) (0, traverser_utils_1.runTraverserForNode)(node.init, { parentPropName: ForStatementTraverser.INIT_PROP }, processingContext, processors, conceptMaps); if (node.test) (0, traverser_utils_1.runTraverserForNode)(node.test, { parentPropName: ForStatementTraverser.TEST_PROP }, processingContext, processors, conceptMaps); if (node.update) (0, traverser_utils_1.runTraverserForNode)(node.update, { parentPropName: ForStatementTraverser.UPDATE_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: ForStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.ForStatementTraverser = ForStatementTraverser; class IfStatementTraverser 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.IfStatement) { (0, traverser_utils_1.runTraverserForNode)(node.test, { parentPropName: IfStatementTraverser.TEST_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.consequent, { parentPropName: IfStatementTraverser.CONSEQUENT_PROP }, processingContext, processors, conceptMaps); if (node.alternate) (0, traverser_utils_1.runTraverserForNode)(node.alternate, { parentPropName: IfStatementTraverser.ALTERNATE_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.IfStatementTraverser = IfStatementTraverser; class LabeledStatementTraverser extends traverser_1.Traverser { static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.LabeledStatement) { (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: LabeledStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.LabeledStatementTraverser = LabeledStatementTraverser; class ReturnStatementTraverser extends traverser_1.Traverser { static ARGUMENT_PROP = "argument"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.ReturnStatement) { if (node.argument) (0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: ReturnStatementTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.ReturnStatementTraverser = ReturnStatementTraverser; class SwitchStatementTraverser extends traverser_1.Traverser { static DISCRIMINANT_PROP = "discriminant"; static CASES_PROP = "cases"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.SwitchStatement) { (0, traverser_utils_1.runTraverserForNode)(node.discriminant, { parentPropName: SwitchStatementTraverser.DISCRIMINANT_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNodes)(node.cases, { parentPropName: SwitchStatementTraverser.CASES_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.SwitchStatementTraverser = SwitchStatementTraverser; class SwitchCaseTraverser extends traverser_1.Traverser { static TEST_PROP = "test"; static CONSEQUENT_PROP = "consequent"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.SwitchCase) { if (node.test) (0, traverser_utils_1.runTraverserForNode)(node.test, { parentPropName: SwitchCaseTraverser.TEST_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNodes)(node.consequent, { parentPropName: SwitchCaseTraverser.CONSEQUENT_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.SwitchCaseTraverser = SwitchCaseTraverser; class ThrowStatementTraverser extends traverser_1.Traverser { static ARGUMENT_PROP = "argument"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.ThrowStatement) { if (node.argument) (0, traverser_utils_1.runTraverserForNode)(node.argument, { parentPropName: ThrowStatementTraverser.ARGUMENT_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.ThrowStatementTraverser = ThrowStatementTraverser; class TryStatementTraverser extends traverser_1.Traverser { static BLOCK_PROP = "block"; static HANDLER_PROP = "handler"; static FINALIZER_PROP = "finalizer"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.TryStatement) { (0, traverser_utils_1.runTraverserForNode)(node.block, { parentPropName: TryStatementTraverser.BLOCK_PROP }, processingContext, processors, conceptMaps); if (node.handler) (0, traverser_utils_1.runTraverserForNode)(node.handler.body, { parentPropName: TryStatementTraverser.HANDLER_PROP }, processingContext, processors, conceptMaps); if (node.finalizer) (0, traverser_utils_1.runTraverserForNode)(node.finalizer, { parentPropName: TryStatementTraverser.FINALIZER_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.TryStatementTraverser = TryStatementTraverser; class WhileStatementTraverser extends traverser_1.Traverser { static TEST_PROP = "test"; static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.WhileStatement) { (0, traverser_utils_1.runTraverserForNode)(node.test, { parentPropName: WhileStatementTraverser.TEST_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: WhileStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.WhileStatementTraverser = WhileStatementTraverser; class WithStatementTraverser extends traverser_1.Traverser { static OBJECT_PROP = "object"; static BODY_PROP = "body"; traverseChildren(processingContext, processors) { const { node } = processingContext; const conceptMaps = []; if (node.type === utils_1.AST_NODE_TYPES.WithStatement) { (0, traverser_utils_1.runTraverserForNode)(node.object, { parentPropName: WithStatementTraverser.OBJECT_PROP }, processingContext, processors, conceptMaps); (0, traverser_utils_1.runTraverserForNode)(node.body, { parentPropName: WithStatementTraverser.BODY_PROP }, processingContext, processors, conceptMaps); } return (0, concept_1.mergeConceptMaps)(...conceptMaps); } } exports.WithStatementTraverser = WithStatementTraverser;