ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
51 lines (49 loc) • 2.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ts = require("typescript");
const errors = require("./../../errors");
const manipulation_1 = require("./../../manipulation");
const callBaseFill_1 = require("./../callBaseFill");
function QuestionTokenableNode(Base) {
return class extends Base {
hasQuestionToken() {
return this.compilerNode.questionToken != null;
}
getQuestionTokenNode() {
if (this.compilerNode.questionToken == null)
return undefined;
return this.global.compilerFactory.getNodeFromCompilerNode(this.compilerNode.questionToken, this.sourceFile);
}
getQuestionTokenNodeOrThrow() {
return errors.throwIfNullOrUndefined(this.getQuestionTokenNode(), "Expected to find a question token.");
}
setIsOptional(value) {
const questionTokenNode = this.getQuestionTokenNode();
const hasQuestionToken = questionTokenNode != null;
if (value === hasQuestionToken)
return this;
if (value) {
const colonNode = this.getFirstChildByKindOrThrow(ts.SyntaxKind.ColonToken);
manipulation_1.insertIntoParent({
insertPos: colonNode.getStart(),
childIndex: colonNode.getChildIndex(),
insertItemsCount: 1,
parent: this,
newText: "?"
});
}
else {
manipulation_1.removeChildren({ children: [questionTokenNode] });
}
return this;
}
fill(structure) {
callBaseFill_1.callBaseFill(Base.prototype, this, structure);
if (structure.hasQuestionToken != null)
this.setIsOptional(structure.hasQuestionToken);
return this;
}
};
}
exports.QuestionTokenableNode = QuestionTokenableNode;
//# sourceMappingURL=QuestionTokenableNode.js.map