为C#契约类创建Resharper命名样式

时间:2016-01-02 13:05:25

标签: c# resharper code-contracts

使用Microsoft的代码合约在接口上编写代码合约时,会创建一个包含所有合同的抽象合同类:

using System.Diagnostics.Contracts;

[ContractClass(typeof(ICollectionContract<>))]
public interface ICollection<T> {
    // Interface methods
}

[ContractClassFor(typeof(ICollection<>))]
abstract class ICollectionContract<T> : ICollection<T> {
    // Interface contracts
}

Microsoft约定将合约类命名为与接口相同,但后缀为Contract,例如ICollectionContract<T>。 但是,Resharper不是命名的粉丝 - 部分原因是抽象类的I前缀。

有没有办法创建一个命名样式,告诉Resharper合同类(用ContractClassFor注释的那些)必须与接口名称相同但后缀为Contract

1 个答案:

答案 0 :(得分:1)

这不是你可以配置ReSharper开箱即用的东西,你必须创建一个自定义插件。

您必须创建ElementProblemAnalyzer<IInterfaceDeclaration>,然后检查它是否包含[ContractClass]属性,然后确保其名称正确。您还可以创建QuickFix建议以重命名界面。

良好的开端类似于AsyncSuffix plugin - 它有一个很好的实现,可以分析缺少Async后缀的异步方法,并提供添加它。查看针对您自己的插件的想法的实现。