Фрагмент VSCODE для создания нового класса С# с объявлением пространства имен
Теперь мы можем создать только новые file
или folder
. И очень раздражает писать пространства имен каждый раз, когда вы создаете декларацию класса.
Но возможно ли создать новый файл класса С# с автоматическим созданием соответствующих пространств имен внутри? Или, может быть, какой-то фрагмент?
Ответы
Ответ 1
Это в настоящее время невозможно. У вас нет возможности получить текущее имя файла, каталог или другую информацию в файле объявления фрагмента кода Visual Studio.
Вы можете создать фрагмент, который позволит вам ввести пространство имен и имя класса. Но я думаю, это тебе не очень поможет. Тем не менее это будет выглядеть так:
"Namespace and class": {
"prefix": "namespaceAndClass",
"body": [
"namespace $1",
"{",
" class $2",
" {",
"",
" }",
"}"
],
"description": "Create a namespace block with a class"
}
Если вам действительно нужен фрагмент, который заполняет правильное пространство имен и имя класса на основе пути к файлу, вы можете взглянуть на проект OmniSharp. Это может дать вам представление о том, как улучшить расширение csharp-o, чтобы предоставить правильные данные в качестве подсказки из плагина. Но я думаю, что это гораздо более сложная задача, чем ввод пространства имен и классов самостоятельно.
Ответ 2
Это расширение предоставляет кнопку контекстного меню для добавления нового класса, который будет автоматически заполнять пространство имен.
Код Visual Studio немного изменился с момента последнего ответа. Теперь он предоставляет переменную TM_DIRECTORY
во фрагментах, но это абсолютный путь. Я отправил запрос на улучшение, чтобы указать относительный путь, который можно преобразовать в пространство имен. Но, честно говоря, я думаю, что вышеупомянутое расширение удовлетворяет мои потребности (и контекстное меню является плюсом)
Ответ 3
Умеренно грязное решение с текущей переменной и системой регулярных выражений vscode выглядит следующим образом:
Предполагая, что у вас есть все ваши проекты в /your/projects/directory/
Итак, проект № 1 находится в /your/projects/directory/Project1/
И проект № 2 находится в /your/projects/directory/Project2/
и т.п.
Следующий фрагмент создаст реализацию пространства имен для всех подкаталогов:
Linux/MacOS
"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}",
"{",
"}"
]
}
Windows
"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
); для неудачных групп точка не вставлена, а подстатья пуста
Наслаждаться :)