Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio code 从所有选定变量创建对象的扩展_Visual Studio Code_Vscode Snippets - Fatal编程技术网

Visual studio code 从所有选定变量创建对象的扩展

Visual studio code 从所有选定变量创建对象的扩展,visual-studio-code,vscode-snippets,Visual Studio Code,Vscode Snippets,我正在寻找一个vscode扩展,可以采取这样的功能 const hello = () => { const name = () => {} const age = () => {} const height = () => {} const location = () => {} } 并在函数中添加并创建所有declare变量的对象: const hello = () => { const name = () =>

我正在寻找一个vscode扩展,可以采取这样的功能

const hello = () => {
    const name = () => {}
    const age = () => {}
    const height = () => {}
    const location = () => {}
}
并在函数中添加并创建所有declare变量的对象:

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

您可以通过一个代码段和一个键绑定来实现这一点

在代码段文件中:

"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"
    }
  },
这段代码看起来有点毛茸茸的,但大部分都是微调的,也许你可以不用。注释后的代码将产生:

返回{name,age,height,location,}
//注意最后一个条目后面的额外

我将解释完整的转换:

“${TM\u CURRENT\u LINE/^(\\s*).$/$1/}返回{${TM\u SELECTED\u TEXT/\\s*const\\s+(.*)\\b[^\\}]*((\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

第一部分
${TM_CURRENT_LINE/^(\\s*).$/$1/}
仅插入与所选内容最后一行之前相同数量的空白,用于缩进

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

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

这一点很重要,因为
${3:+,}
是一种条件转换,表示是否有组3-最后一个条目不会有组3,因为它后面没有换行符-如果有组3,则添加
。因此,完整的正则表达式转换将产生

返回{姓名、年龄、身高、位置}

因此,为了正确使用缩进和逗号,需要进行大量的内务处理,并且在vscode中需要进行必要的双重转义。实际的正则表达式非常简单。下面是一个演示:



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

这真的很酷。它对大多数函数都不起作用:
constuserreadbyid=(id:number)=>userFindOne({id})
。不,这与问题中的示例不同,例如,我在正则表达式中使用了no
const
。我可以看看是否可以为这个新用例修改它。将
const
设置为可选…可能就足够了。请编辑您的问题,以包括此新示例的精确格式和所需结果的精确格式。谢谢