javascript - VSCode 如果在省略大括号时缩进

标签 javascript typescript visual-studio-code indentation

在 VSCode 中,在编写 javascript/typescript 时,我经常编写不带花括号的 ifs。特别是对于提前退出。

foo() {
  ...
  if(...) 
     return;
  ...
  for(...) {
    ...
    if(...)
      continue;
    ...
  }
  ...
}

在 VSCode 中,return/continue/我放在新行上的任何内容都不会缩进。有什么设置吗?

我只有图标和 Chrome 扩展程序的调试器。

这是 VSCode 格式化它的方式:

enter image description here

事实证明,这并不是唯一发生的奇怪缩进!

这看起来不错:

enter image description here

但是,如果我将参数放在不同的行上。 (长变量名可能需要):

enter image description here

该函数的其余部分最终缩进,文件的其余部分也是如此。

我尝试重新安装 VSCode,但没有帮助。

有什么建议吗?

最佳答案

这不会回答您有关如何让 VS Code 执行您想要的操作的问题,但如果我可以提供一些建议:省略大括号可能很危险。它导致了 Apple SSL 实现中的一个重大安全漏洞:臭名昭著的 goto fail错误。

这是他们遇到麻烦的代码:

if ((err = SSLFreeBuffer(&hashCtx)) != 0)
    goto fail;
if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;

看到问题了吗?

大括号不是防止此类错误的完美保护措施,但它们确实有帮助。使用它们时,您不太可能遇到自己的 goto fail 错误。

一些开发人员,包括我自己,觉得在将 if 语句编写为单行代码时, 可以省略大括号。如果您只是简单地提前退出一个函数,这很好:

if( ... ) return;

goto fail 出现在单行上时,您不太可能产生错误。但是当你把它分成两行时,大括号是必需的:

if( ... ) {
    return;
}

或:

if( ... ) {
    console.log( 'debug message' );
    return;
}

让我们在没有花括号的情况下尝试一下。首先我们有:

if( ... )
    return;

不用担心,此代码按预期工作。现在让我们添加调试消息:

if( ... )
    console.log( 'debug message' );
    return;

糟糕!

由于您已经将左花括号与 if 语句放在同一行(我完全同意),因此只需多花一行来添加右花括号。要么让你的早期返回成为一行,要么使用花括号。这将避免您自己的最终 goto fail 错误的风险。

关于javascript - VSCode 如果在省略大括号时缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498740/

相关文章:

node.js - 如何使用 JSDoc 进行解构导入?

Javascript 创建具有 new 和不具有 new + 继承的对象

javascript - 在 vuejs 2 中独立时更新组件属性

javascript - 导入 ReactiveFormsModule 后 Angular 路由器停止工作

javascript - 用 Jest 模拟第 3 方库构造函数

macos - vscode 设置终端 gopath 以匹配 go.gopath

javascript - 如何在另一个声明文件中引用 lib.dom.d.ts 中的类型?

javascript - 对构造函数的引用

javascript - 将 SVG 图标导入 Svelte 应用程序的最佳方式

php - 当我在 Blade 类型页面中的 <?php ?> 之间编码时,如何使 VSCode 识别 php 片段?