TypeScript 支持格式化程序中的列限制

kqlmhetl  于 6个月前  发布在  TypeScript
关注(0)|答案(7)|浏览(49)

当前,运行格式化程序(例如通过编译器API:https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API#pretty-printer-using-the-ls-formatter)会产生任意宽度的代码,对于嵌套、复杂的语句等。我们的风格指南要求最大列数,这意味着格式化程序应该接受一个配置来设置这个宽度。在长行的最高点处,应该添加换行符。

vnjpjtjt

vnjpjtjt1#

你能举一个你写的代码示例,它不超过你的最大列限制,直到格式化程序采取行动吗?

vuv7lop3

vuv7lop32#

格式化程序的行为试图尽可能地保持行。这看起来是个好主意,你能提供一些关于提案的详细信息吗,特别是在某些情况下ASI生效的情况下。

ippsafx7

ippsafx73#

实际上,它确实保留了输入中的行。在我的案例中,输入违反了风格指南,我想使用格式化程序来修复这个问题。
关于上下文的提醒:我正在使用Closure Compiler插入TypeScript语法,因此通常大多数行会变得更长。在糟糕的情况下,我们使用几种类型的联合,例如

goog.string.compareElements_ = function(left: string | number | boolean, right: string | number | boolean): number {

如果我们想要将Google JavaScript代码块转换为这种语法,我们需要能够对生成的结果进行样式设置。
我认为这也适用于IDE支持,例如,如果你执行一个内联某些代码的重构操作。

kognpnkq

kognpnkq4#

我同意这是一个很好的功能添加。问题是,你不能仅仅在标记之后添加一个新行,因为这可能不安全。例如,在返回关键字之后和其表达式之前。所以从一个粗略的观察来看,当格式化一个标记对时,如果行位置超过了最大允许值,我们从当前对开始向后走,并尝试找到一个安全地断开行的位置(假设存在),然后添加编辑。或者,我们可以在完成格式化和缩进后作为单独的步骤来做这件事,只断开比允许范围更长的行。
我们需要为这个获取一个更详细的提案。@vladima,有什么想法吗?

omvjsjqw

omvjsjqw5#

Wadler, 98(http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf) 有一个列宽感知的美观打印器动机点。

brtdzjyr

brtdzjyr6#

FYI we are also considering extending clang-format to properly format typescript code. It's already pretty close if you use JavaScript as the language. Dunno if it's useful as a reference for you.

$ brew install clang-format
$ git clone git@github.com:Microsoft/TypeScriptSamples.git
$ clang-format -style=google -assume-filename=foo.js TypeScriptSamples/greeter/greeter.ts
class Greeter {
  constructor(public greeting : string) {}
  greet() { return "<h1>" + this.greeting + "</h1>"; }
};
var greeter = new Greeter("Hello, world!");
var str = greeter.greet();
document.body.innerHTML = str;
qkf9rpyu

qkf9rpyu7#

对于这个项目,我们也欢迎使用TypeScript。

相关问题