0

我正在寻找可以采用这样的功能的 vscode 扩展;

const hello = () => {
    const name = () => {}
    const age = () => {}
    const height = () => {}
    const location = () => {}
}

并在函数中添加创建所有声明变量的对象:

const hello = () => {
    const name = () => {}
    const age = () => {}
    const height = () => {}
    const location = () => {}
    return { name, age, height, location }
}
4

1 回答 1

1

您可以使用代码段和键绑定来做到这一点。

在您的代码段文件中:

"return object": {
  "prefix": "_ro",
  "body": [
    "$TM_SELECTED_TEXT",

    // "\treturn { ${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b.*(\\n)*/$1, /g} }", 

    "${TM_CURRENT_LINE/^(\\s*).*$/$1/}return { ${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b[^\\}]*((\\}\\s)|(\\}))/$1${3:+, }/g} }",

  ],
  "description": "Return Object"
},

以及您选择的一些键绑定:

  {
    "key": "alt+b",
    "command": "editor.action.insertSnippet",
    "args": {
      "name": "return object"
    }
  },

该片段看起来很毛茸茸,但其中大部分都是微调,也许你可以不用。注释代码将产生:

return { name, age, height, location, },// 注意最后一个条目之后 的额外内容。

我将解释完整的转换:

"${TM_CURRENT_LINE/^(\\s*).*$/$1/}return { ${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b[^\\}]*((\\}\\s)|(\\}))/$1${3:+, }/g} }",

第一部分${TM_CURRENT_LINE/^(\\s*).*$/$1/}只是在选择的最后一行之前插入相同数量的空白以用于缩进。

这部分${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b[^\\}]*((\\}\\s)|(\\}))/将变量/函数名称、您的“姓名”、“年龄”等放入正则表达式的捕获组 1。

正则表达式101演示

[^\\}]*((\\}\\s)|(\\}))该正则表达式末尾的这部分用于确定是否有另一个行条目,如果有,则将 添加,到变量列表的末尾。因此,如果}\s最后有将进入捕获组 3。如果只有}在最后并且您的选择中没有其他以下行将是捕获组 4 并且没有捕获组 3。

这很重要,因为这${3:+, }是一个条件转换,它表示是否有第 3 组 - 最后一个条目不会有,因为选择中没有换行符 - 如果有第 3 组,则添加,. 所以完整的正则表达式转换会产生

return { name, age, height, location }

因此,为了使缩进和逗号正确,以及在 vscode 中必要的双重转义,有很多家务。实际的正则表达式非常简单。这是一个演示:

返回具有多个变量的对象


用法:只需确保完全选择您想要的代码范围 - 就像在演示中一样 - 例如,不要部分选择第一行或最后一行。

于 2019-11-19T17:23:22.360 回答