Как предотвратить использование ReSharper префиксов встроенных типов с символом "@" при генерации кода?
Я пишу плагин ReSharper, и я хочу сделать это:
CSharpElementFactory factory = CSharpElementFactory.GetInstance(treeNode.GetPsiModule());
factory.CreateTypeMemberDeclaration(
"public static $0 $1 (this $2 $4) { }",
"string",
someMethodName,
someArgumentType,
SomeArgumentName);
который я хочу вывести код:
public static string SomeMethodName(this SomeArgumentType someArgumentName) { }
но это на самом деле выводит это:
public static @string SomeMethodName(this SomeArgumentType someArgumentName) { }
кажется, делать это с int
(и я предполагаю, что другие встроенные типы или ключевые слова).
Как я могу предотвратить это и выводить правильный код?
1 ответ
Если вы хотите использовать ключевое слово "строка", вы не можете использовать кавычки для него. Используйте 'string' в шаблоне (иначе ReSharper попытается экранировать ключевое слово 'string' для использования в позиции идентификатора):
public static string $0 (this $1 $2){}
Если вы хотите использовать 'System.String', вы можете явно связать '$0' с IDeclaredType для строки:
IPsiModule module;
factory.CreateTypeMemberDeclaration("public static $0 $1 (this $2 $4){}",module.GetPredefinedType().String,someMethodName, someArgumentType,SomeArgumentName);
ReSharper должен следовать стилю кода в этом случае и автоматически заменять его на "строку", когда стиль кода настроен на использование ключевых слов, но я не уверен, что он будет работать =(