我有3个项目的解决方案:
当我试图建立它时,我收到一个警告:
引用类型'AVSoft.ParsersBase.IParseRule'声称它在'c:\ Users\Tim\Dropbox\projects\Image Downloader\ParsersLibrary\bin\Debug\ParsersLibrary.dll'中定义,但无法找到
为什么VS试图AVSoft.ParsersBase.IParseRule在ParsersLibrary.dll中找到?ParsersLibraryTest引用了ParsersBase,它没有任何意义.
我必须以特定的方式修改大约1000个打字稿文件:为了我的应用程序的国际化,我需要将全部StringLiteral和JsxText令牌替换CallExpression为翻译功能。
我已经使用Roslyn在我们的C#代码库中完成了这样的任务,因此现在我正在尝试使用Typescript编译器API完成类似的任务。它与Roslyn API十分相似,但是它们之间有一个讨厌的区别。在Roslyn中,您有Trivia令牌的概念:这种令牌不会发出任何有趣的东西,但对于可读性而言是必不可少的。这些是空格,制表符,注释等。在Roslyn语法树中,您具有源文件中的所有琐事。当您以某种方式更改C#语法树并从该语法树发出源代码时,您将拥有所有相同的格式,注释,空格以及所有这些东西。
不幸的是,打字稿AST中没有任何琐事标记,因此当我使用这样的代码时,所有格式都会消失。
const result: ts.TransformationResult<ts.SourceFile> = ts.transform(
sourceFile, [ transformerFactory(visitorFunction) ]
);
const transformedSourceFile: ts.SourceFile = result.transformed[0];
const printer: ts.Printer = ts.createPrinter();
const generated: string = printer.printNode( ts.EmitHint.SourceFile, transformedSourceFile, sourceFile);Run Code Online (Sandbox Code Playgroud)
我有什么选择?
ts.Printer和的情况下进行转换ts.Transformation。我可以让所有文字在检测阶段进行处理,按照它们在文件中的降序排列,并使用substring或类似的方法替换它们。这是一件非常棘手的事情,我真的不想这样做,但是我对第一种选择的弊端不满意。所以我该怎么做?我还有其他选择吗?
compiler-construction abstract-syntax-tree automated-refactoring typescript