visual studio intellisense如何适用于编译器错误

时间:2014-10-07 11:13:51

标签: visual-studio-2010 intellisense

我很想知道visual studio(2010年前后)intellisense如何处理编译器错误。

我的意思是说,例如

  1. 当您声明并初始化函数中的任何变量时,Zig-zag行会立即变为可变名称,当您将鼠标悬停在它上面时,它会显示“变量已初始化但未使用”。
    1. 函数需要返回一些值而你不在函数中写任何return语句,在函数名称下面立即出现一条曲折线,它说“所有路径都没有返回”。
    2. 如何实施这种情报?

      如果我愿意,我如何添加自己的规则?

      任何指导/链接都会有帮助吗?

1 个答案:

答案 0 :(得分:1)

Visual Studio采用不同的方式来表示这些类型的警告,它取决于您正在编辑的语言(C#vs C ++ vs VB.NET等)采用何种技术。

  1. 语法验证。您的源代码已定义语法。如果你打开一个{,语法定义就知道文件中必须有一个},因此这些简单的检查完全是在源代码结构上完成的。
  2. 流程验证。您提到了return语句和null值问题,这些问题有点棘手。一旦源文件在结构上正确,就可以在AST上进行简单的流分析,并确保结构中的每个分支都会产生一个return语句,或者一个变量在使用之前已赋值。 / LI>

    然后有一种更高级的验证类型,一种实际上接受所有已解析文件和/或其二进制表示的上下文。例如VB.NET使用

    1. Background compilation。只要语法和流验证成功,这个过程就会尝试执行编译步骤。它在后台运行,并将逐步尝试更新已编译的产品。如果它遇到问题,它会尽快标记它们。像Red-Gate .NET Demon这样的工具在Visual Studio中为其他语言添加了类似的功能。就Intellisense / Editor而言,编译器是否实际将任何内容写入磁盘,或仅更新已编译产品的内存表示并不重要。
    2. 然后有像Resharper和Code Rush这样的工具构建代码的内存表示。 Visual Studio也构建了一个类似的模型,但在很多情况下并不像这些IDE生产力工具那样功能丰富

      1. 高级代码模型。不像后台编译那样完整或直接(有时代码可能实际编译,但状态模型中的错误可能会显示来自这些工具的红色曲线),这些工具构建了代码的内存模型,并且可以采用非常先进的流程验证在您的代码上标记各种问题。 ResharperCode Rush都提供了一个SDK来扩展这些验证。 Visual Studio编译器和编辑器在某些时候将替换为Project Roslyn,它提供类似的SDK。
      2. 然后是在构建期间添加的信息

        1. MSBUILD。触发构建时,可以触发大量自定义工具。例如,StyleCopcode Analysis提供了对正在编译的代码进行语言或二进制分析的工具。两者都可以通过附加规则进行扩展。 MsBuild将在编辑器中显示错误和警告,如果这些提供了文件名和行号,编辑器将很乐意在文本呈现中添加一个波浪形。
        2. 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插件是了解这些工作原理的绝佳来源。