【发布时间】:2015-11-02 19:47:59
【问题描述】:
目前我们只能创建新的file 或folder。而且每次创建类声明都要写命名空间很烦人。
但是是否可以创建新的 C# 类文件,其中包含自动生成的适当命名空间?或者那里有一些sn-p?
【问题讨论】:
标签: c# visual-studio-code
目前我们只能创建新的file 或folder。而且每次创建类声明都要写命名空间很烦人。
但是是否可以创建新的 C# 类文件,其中包含自动生成的适当命名空间?或者那里有一些sn-p?
【问题讨论】:
标签: c# visual-studio-code
我发现了这些提供创建 C# 类功能的扩展:
【讨论】:
This extension 提供了一个上下文菜单按钮来添加一个新类,该类将自动填充命名空间。
自上次回答以来,Visual Studio Code 发生了一些变化。它现在在 sn-ps 中提供变量TM_DIRECTORY,但这是一个绝对路径。我已提交 an enhancement request 以提供可以转换为命名空间的相对路径。但老实说,我认为上述扩展满足了我的需求(上下文菜单是一个加号)
【讨论】:
使用 vscode 的当前变量和正则表达式系统的中度脏解决方案如下:
假设您的所有项目都在 /your/projects/directory/
所以项目 #1 位于 /your/projects/directory/Project1/
项目 #2 位于 /your/projects/directory/Project2/
等等
下面的 sn-p 将为所有子目录创建一个命名空间实现:
"Namespace declaration":
{
"prefix": "name",
"description": "Creates a new namespace declaration.",
"body":
[
"namespace ${TM_DIRECTORY/^\\/your\\/projects\\/directory(\\/([^\\/]+))(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?/$2${3:+.}$4${5:+.}$6${7:+.}$8${9:+.}$10${11:+.}$12${13:+.}$14${15:+.}$16${17:+.}$18${19:+.}$20/gi}",
"{",
"}"
]
}
"Namespace declaration":
{
"prefix": "name",
"description": "Creates a new namespace declaration.",
"body":
[
"namespace ${TM_DIRECTORY/^c:\\\\your\\\\projects\\\\directory(\\\\([^\\\\]+))(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?/$2${3:+.}$4${5:+.}$6${7:+.}$8${9:+.}$10${11:+.}$12${13:+.}$14${15:+.}$16${17:+.}$18${19:+.}$20/gi}",
"{",
"}"
]
}
(\\/([^\\/]+)),而所有其他九个都是可选的(\\/([^\\/]+))?). (${3:+.}) 和该组的子匹配 ($4);对于不成功的组,不插入点并且子匹配为空享受:)
【讨论】:
目前这是不可能的。您无法在 Visual Studio Code 的 sn-p 声明文件中检索当前文件名、目录或其他信息。
您可以创建一个允许您输入命名空间和类名的 sn-p。但我想这对你没有多大帮助。尽管如此,它看起来像这样:
"Namespace and class": {
"prefix": "namespaceAndClass",
"body": [
"namespace $1",
"{",
" class $2",
" {",
"",
" }",
"}"
],
"description": "Create a namespace block with a class"
}
如果您真的想要一个根据文件路径填充正确命名空间和类名的 sn-p,您可以查看 OmniSharp project。这可以让您了解如何改进 csharp-o 扩展,以便从插件中提供正确的数据作为建议。 但我认为这是一项比你自己输入命名空间和类要大得多的任务。
【讨论】:
使用这个,首先它集中在命名空间的末尾添加任何额外的部分。然后它集中在类中。
"Namespace and Class": {
"prefix": "nc",
"body": [
"namespace $WORKSPACE_NAME$1\n{\n\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t$2\n\t}\n}"
],
"description": "Generates namespace and class name"
}
【讨论】:
发现此线程正在寻找相同的答案。
我没有找到任何现有的 sn-p 建议来生成正确的命名空间。
经过反复试验,我使用“variables”和“placeholder transformation”得到的最接近的是:
"Namespace and Class": {
"prefix": "nclass",
"body": [
"namespace ${RELATIVE_FILEPATH/[\\\\]|\\w+\\.cs$/./g}$1",
"{",
"\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t$0\n\t}",
"}"
],
"description": "Generates namespace and class name"
}
这将从工作空间中的文件夹结构生成命名空间,并使用文件名生成类名。
然而,这有一个问题,因为它会在命名空间的末尾留下两个尾随 ..。
但是光标会停在那里,因此可以使用Ctrl + Backspace 快速删除它们,然后再次使用tab 跳转到类的主体内。
【讨论】: