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