如何防止 ReSharper 在生成代码时为内置类型添加“@”符号?

Posted

技术标签:

【中文标题】如何防止 ReSharper 在生成代码时为内置类型添加“@”符号?【英文标题】:How do I prevent ReSharper from prefixing built in types with an '@' symbol when generating code? 【发布时间】:2015-09-09 16:22:04 【问题描述】:

我正在编写一个 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】:

如果您想使用关键字“字符串”,则不能使用引号。在模式中使用“字符串”(否则 ReSharper 将尝试转义“字符串”关键字以在标识符位置使用):

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 应该遵循代码样式,并在代码样式设置为使用关键字时自动将其替换为“字符串”,但我不确定它是否会起作用 =(

【讨论】:

谢谢。我没有对“字符串”进行硬编码,而是从导航代码树的IPredefinedTypeUsage 中获取。基本上我有一个插件,如果在实例上未定义方法,我想创建一个扩展方法,并且我想根据代码中的用法来锻炼该方法应该采用的返回类型,此时我没有我不认为有IDeclaredType

以上是关于如何防止 ReSharper 在生成代码时为内置类型添加“@”符号?的主要内容,如果未能解决你的问题,请参考以下文章

用于选定文本和远程代码生成的 Resharper API

如何防止 Resharper 大量缩进 lambda?

防止 Resharper StyleCop 代码清理创建区域

使用 Resharper 时如何防止源文件与构建模块时不同

如何防止 ReSharper 在我的 MSpec 字段之间插入空行?

如何防止 Resharper Javascript Intellisense 将 'function' 替换为 'Function'?