2014-10-07 25 views
1

我很想知道Visual Studio(2010年以後)intellisense如何編譯錯誤。visual studio intellisense如何工作編譯器錯誤

我的意思是說,例如

  1. 在聲明和函數初始化任何變量,立即鋸齒形線有下一個變量名,當你將鼠標懸停它,它說,「變量已初始化,但未使用」。

  • 函數需要返回一定的價值,你不要在函數編寫任何return語句,立即曲折的線下自帶函數名它說,「所有的路徑不會返回」。
  • 這種情報如何實施?

    如果我想要如何添加我自己的規則?

    任何指導/鏈接將有所幫助?

    +0

    檢查Roslyn框架是否由Microsoft工作,它在Syntax樹上工作。 http://blogs.msdn.com/b/csharpfaq/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx – KuldipMCA 2014-10-07 11:51:26

    回答

    1

    Visual Studio採用不同的方式來表達這些類型的警告,它取決於您正在編輯的語言(C#vs C++ vs VB.NET等)採用了什麼技術。

    1. 語法驗證。你的源代碼有一個定義的語法。如果打開{,則語法定義知道文件中的某個位置必須有一個},因此這些簡單檢查純粹在源代碼結構上完成。
    2. 流程驗證。你提到了return語句和null值問題,這些有點棘手。一旦源文件結構正確,就可以對AST進行簡單的流分析,並確保結構中的每個分支都將生成一個return語句,或者確保變量在使用之前分配了一個值。

    然後有一個更高級的驗證類型可以發生,一個實際上需要在所有解析文件和/或它們的二進制表示的上下文中。 VB.NET例如僱用

    1. Background compilation。一旦語法和流程驗證成功,這個過程將實際上嘗試執行編譯步驟。它在後臺運行,並逐步嘗試更新已編譯的產品。如果遇到問題,會盡快將其標記出來。像Red-Gate .NET Demon這樣的工具可以在Visual Studio中爲其他語言添加類似的功能。就Intellisense/Editor而言,無論編譯器是否將任何內容寫入磁盤,或只是更新已編譯產品的內存表示形式,都無關緊要。

    然後有像Resharper和Code Rush這樣的工具在內存中表示代碼。 Visual Studio也構建了一個類似的模型,雖然在許多情況下不像這些IDE生產力工具那樣富有功能

    1. 高級代碼模型。與背景編譯不完全或不直接(有時代碼可能實際編譯,但狀態模型中的錯誤可能顯示來自這些工具的紅色小波),這些工具構建了代碼的內存模型,並且可以使用非常先進的流驗證在你的代碼上標記各種問題。 ResharperCode Rush都提供了一個SDK來擴展這些驗證。 Visual Studio編譯器和編輯器在某些時候會被替換爲Project Roslyn,它提供了一個類似的SDK。

    然後還有其的構建

    期間加入
  • 的MSBuild的信息。當您觸發構建時,可能會觸發大量自定義工具。例如,StyleCopcode Analysis提供了對正在編譯的代碼進行語言或二進制分析的工具。兩者都可以通過附加規則進行擴展。 MsBuild將在編輯器中顯示錯誤和警告,並且如果這些提供了文件名和行號,編輯器會愉快地在文本渲染中放置一個扭曲的字符。
  • Intellisense使用Visual Studio語言服務提供的數據以及VSPackages和MsBuild在編輯器中呈現文本。正如你所看到的,有多種方式可以收集這樣的結果。 Visual Studio編輯器爲文本提供了多個extensibility points which you can use to add your own smart tags and adornments

    此外,您還有許多提供類似功能的第三方工具。

    Visual Studio的ASP.NET MVC editors或Visual Studio的Python插件是洞察這些工作方式的絕佳資源。

    +0

    謝謝@ jessehouwing,快速回復,肯定會深入到建議的鏈接回答。 – atulya 2014-10-08 02:59:50