2014-01-10 82 views
2

我發現我一直在與ReSharper的完整聲明(Ctrl + Shift + Enter)行爲作鬥爭,我不知道是否有方法來定製它。改變ReSharper「完成聲明」的行爲

會發生什麼事,我會編輯一些代碼,例如:

var a = 0; 
var b = 1; 

然後,我想它添加到它:

var a = 0; 
using (var frob = new Thingy()) 
{ 
    a = frob.Foo(); 
} 
var b = 1; 

如果我不使用「使用「活模板,只需輸入它,我打字thingy後打完成聲明,並且Resharper將copmlete到此:

var a = 0; 
using (var frob = new Thingy()) 
    var b = 1; 

所以,我想知道,有沒有辦法告訴它總是創建新的大括號,而不是嘗試將下一行插入到要添加的任何語句中?

這是使用ReSharper 8.1。自從版本4開始,我一直在使用它,這感覺像是一個新問題,所以他們可能已經改變了默認行爲。

更新: 鑑於托馬斯韋勒的回答,@Resharper在Twitter上的回覆,我做了一些更多的調查。

這裏似乎有差異。如果你看一下文檔爲Complete Statement它明確規定:

有了完整的陳述,而不是這個棘手的過程中,你只 必須按Ctrl + Shift + Enter鍵,和ReSharper的自動 插入一個右括號, 以及兩個括號,並把在那裏你可以編寫方法體 以類似的方式進行的 插入符號右移,完整的陳述是已知的 下列語言結構的工作:

[...]狀態nts:如果使用, 鎖定,繼續,斷開和返回語句,則切換,;案例和默認 條款;將單行語句轉換爲塊語句。

在測試中,我注意到if語句的行爲與預期的一樣(它添加了大括號並將克拉放置在一個新行內)。 switchchecked也是如此。

另一方面,while,usingfixed的行爲與我上面的示例中一樣,它共同選擇要使用的下一行代碼而不是新塊。

這似乎相當不一致。文檔應該更新,或者所有語句類型的行爲都應該是相同的。

因此,它似乎比SO問題更適合作爲錯誤報告。如果任何人有興趣將其投入使用,請撥打link to the bug。 :)

+0

我可以確認它也發生在7.1。 –

+0

其次,如果R#行爲不一致,那麼它更像是一個錯誤。 –

+1

至於文檔,我認爲是我寫了那篇文檔,我可能對完整語句的適用範圍過於樂觀(或者從第4版開始可能沒有注意到迴歸,哪種類型的語句可以達到級別使用Complete語句和'using')。無論如何,Rob,非常感謝你的報告。由於目前尚未積極開發完整聲明,因此很可能要求等待很長時間才能實施。顯然,更新參考文檔是更容易遵循的途徑。 – gorohoroh

回答

3

您沒有按照預期使用R#的'Complete Statement'功能,因此該工具無法準確找出您想要實現的功能。

只要模板在IntelliSense中可用,請使用Live模板完成using聲明,然後它將爲您提供括號。 Live模板將引導您通過在相應的部分依次突出顯示/設置光標(不用擔心,您不需要觸摸鼠標)來鍵入聲明的各個部分。

或者,Live模板始終可通過Live模板資源管理器訪問和編輯(Live模板類似於'普通'代碼模板)。但我不會推薦預定義的,除非你有充足的理由這麼做。

+0

在這種情況下使用Complete語句完全是多餘的。 – gorohoroh

+0

我不知道你的意思是什麼...... –

+0

我的意思是[完整聲明](http://www.jetbrains.com/resharper/webhelp/Coding_Assistance__Complete_Statement.html)不適用於這種情況,它是純粹的實時模板如你所描述的部署。 – gorohoroh