2014-10-07 48 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

    相关问题