2016-01-02 26 views
2

當寫上使用微軟的代碼契約接口代碼合同,一個創建一個包含所有合同的抽象合同類:創建ReSharper的命名風格爲C#合同類

using System.Diagnostics.Contracts; 

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

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

微軟的慣例是名合同類別與界面相同,但後綴爲Contract,例如ICollectionContract<T>。 但是,Resharper不是命名的粉絲 - 部分原因是抽象類的I前綴。

有沒有一種方法可以創建一個命名風格,告訴Resharper合同類(使用ContractClassFor註解的那些)必須與接口名稱相同,但後綴爲Contract

回答

1

這不是你可以配置ReSharper來開箱即用的事情,你必須創建一個自定義插件。

您必須創建一個ElementProblemAnalyzer<IInterfaceDeclaration>,然後檢查它是否包含[ContractClass]屬性,然後確保它具有正確的名稱。您也可以創建一個QuickFix建議來重新命名界面。

一個好的開始將類似於AsyncSuffix plugin - 它有一個很好的實現分析一個缺失的Async後綴的異步方法,提供添加它。看看你自己的插件的想法實現。