ts-simple-ast
Version:
TypeScript compiler wrapper for static analysis and code manipulation.
49 lines (48 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var typescript_1 = require("../../typescript");
function printNode(node, sourceFileOrOptions, secondOverloadOptions) {
var isFirstOverload = sourceFileOrOptions == null || sourceFileOrOptions.kind !== typescript_1.SyntaxKind.SourceFile;
var options = getOptions();
var sourceFile = getSourceFile();
var printer = typescript_1.ts.createPrinter({
newLine: options.newLineKind == null ? typescript_1.NewLineKind.LineFeed : options.newLineKind,
removeComments: options.removeComments || false
});
if (sourceFile == null)
return printer.printFile(node);
else
return printer.printNode(options.emitHint == null ? typescript_1.EmitHint.Unspecified : options.emitHint, node, sourceFile);
function getSourceFile() {
if (isFirstOverload) {
if (node.kind === typescript_1.SyntaxKind.SourceFile)
return undefined;
var topParent = getNodeSourceFile();
if (topParent == null) {
// create a result file (see https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API)
var scriptKind = getScriptKind();
return typescript_1.ts.createSourceFile("print." + getFileExt(scriptKind), "", typescript_1.ScriptTarget.Latest, false, scriptKind);
}
return topParent;
}
return sourceFileOrOptions;
function getScriptKind() {
return options.scriptKind == null ? typescript_1.ScriptKind.TSX : options.scriptKind;
}
function getFileExt(scriptKind) {
if (scriptKind === typescript_1.ScriptKind.JSX || scriptKind === typescript_1.ScriptKind.TSX)
return "tsx";
return "ts";
}
}
function getNodeSourceFile() {
var topNode = node.parent;
while (topNode != null && topNode.parent != null)
topNode = topNode.parent;
return topNode;
}
function getOptions() {
return (isFirstOverload ? sourceFileOrOptions : secondOverloadOptions) || {};
}
}
exports.printNode = printNode;