【发布时间】:2018-12-23 12:55:47
【问题描述】:
我编写了一个 VS Code 扩展,它使用 TypeScrpt AST API 来组织类成员。我的问题是,在运行 ts.transform(...) 并将转换后的语法树转换回文本之后,所有空行都丢失了,从而导致生成的源代码格式不正确。如何防止 AST API 删除空行?
我正在使用的代码示例:
let sourceFile: ts.SourceFile;
let sourceCode: string;
sourceCode = editor.document.getText();
sourceFile = ts.createSourceFile(editor.document.fileName, sourceCode, ts.ScriptTarget.Latest, false, ts.ScriptKind.TS);
transformation = ts.transform(sourceFile, [organizeTransformer]);
sourceCode = transformation.transformed[0].getFullText();
【问题讨论】:
-
欢迎来到“保真”打印 AST 的问题。如果 typescript 引擎的输出逻辑没有准备好保留源格式,那么你会得到这种行为。 (它会保留 cmets 吗?)见 stackoverflow.com/a/5834775/120163
-
是的,cmets 还在。就是这样。我真的不明白为什么有些琐事会被保留,而另一些则不会。
-
这是解析为 AST 的副作用;它必须记录足够的琐事以使原始文本几乎可以完美地复制,包括垂直空白。 (在实践中,[几乎]没有人关心你是否复制水平空白的内容,除非你的制表符设置不是通用标准)。
标签: typescript visual-studio-code abstract-syntax-tree vscode-extensions