65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP 代码分析器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.77/5 (14投票s)

2005年7月16日

4分钟阅读

viewsIcon

158761

downloadIcon

3634

一个简单的工具,用于查找 ASP 代码中未使用的子程序、函数和变量。

引言

该工具的目的是检查 ASP 项目/文件夹中未使用的代码元素。这些元素包括未使用的常量、全局变量、函数、子程序和局部变量。如果您对项目进行重大更改,或使用以前 ASP 项目的包含文件,并且想确保不部署不必要的代码,这将非常有用。

本文不会详细描述代码的工作原理,因为主要主题是如何摆脱未使用的元素,而代码实际上是用 C# 编写的。但是,它将让您了解该工具的运行方式及其局限性。

使用分析器

ASP 代码分析器非常易于使用。首先下载可执行文件,解压缩并运行 ASPCodeAnalyzer.exe。接下来,您可以浏览包含 ASP 项目的目录。点击“Go”按钮,分析器将开始工作。我想强调的是,分析器 **不会** 更改您的文件。它只会指向代码中存在未使用的代码元素的那些部分。

如果您在计算机上安装了 UltraEdit32,并且双击查找列表,该工具将自动启动 UltraEdit32 并打开相应代码行中的文件。如果您使用其他编辑器,可以使用“文件/选项”对话框来定义您的编辑器以及用于在给定行上打开指定文件的参数。

您的代码必须在语法上是正确的。否则,分析器将无法正常工作。

分析器的工作原理

第一遍

  • 首先,分析器列出给定目录及其所有子目录中的所有 .asp.inc 文件,并将它们放入一个队列。
  • 现在读取队列中的所有文件。如果分析器遇到 include 语句,它会将引用的文件添加到队列(如果尚未添加)。如果包含的文件在硬盘上不存在,分析器会在窗口底部的错误列表中写入一条消息。
  • 在读取文件的同时,它会剥离所有 HTML 代码、所有注释(包括 rem 注释)以及所有被双引号包围的文本。解析器足够智能,可以将两个连续的双引号视为一个单独的双引号。
  • 现在,当只剩下原始文件的代码时,分析器会创建一个内部“代码树”
    • constants
    • 全局变量
    • 全局代码
    • 子程序/函数
      • 局部变量
      • code
      • 方法
        • 局部变量
        • code

    分析器不测试代码中是否使用了类。它也无法测试类中的特定成员和方法是否被使用。但是,它会检查局部变量是否被使用。

  • 在构建代码树时,会测试子程序、函数和方法的局部变量的用法。这是通过测试变量名是否在代码块中使用来完成的。

第二遍

现在进入棘手的部分:查找未使用的全局变量和子程序/函数。

  • 首先,所有元素都被视为未使用。
  • 现在,所有文件将再次分组处理。一个组包含一个文件及其所有引用的文件。
  • 检查当前文件组的所有元素。如果元素名称在文件组的代码中的任何位置被使用,则该元素被视为已使用。

通过检查文件组而不是单个文件,可以测试包含文件在所有可能的上下文中的用法。

将元素与代码进行匹配

假设分析器想知道子程序 WriteTd 在代码块中是否被使用,那么以下语句会匹配

  call WriteTd( someVar)
  call WriteTd ( someVar)

以下语句不匹配,因为子程序的名称实际上只是整个标识符的一部分

   call WriteTd2( someVar)
   call MyWriteTd( someVar)

限制

请注意:由于其启发式性质,该算法可能无法找到代码中所有未使用的元素。从积极的方面来看,它找到的所有内容都应该是真正未使用的元素。

分析器无法检测到以下情况

  function test
    dim unusedVar
    unusedVar = 12
  end function

尽管变量 unusedVar 在技术上是无用的,因为它没有在任何地方用于处理,但分析器不会通知您。总的来说,分析器只会指出那些可以删除而不会破坏代码的代码块。

此外,如果您使用的局部变量会覆盖全局变量,则全局变量始终被视为已使用。

  dim unusedGlobal

  function test
    dim unusedGlobal ' Shadows the global variable

    unusedGlobal = 12
    Response.Write( unusedGlobal)
  end function

变量不应在多行中定义。在以下代码中

   dim a,b,c, _
       d,e,f

分析器只会将 abc 识别为变量。

结论

尽管存在这些缺点,ASP 代码分析器仍应让您对代码的整洁程度有一个很好的印象。

历史

  • 2005 年 7 月 17 日 - 初始发布。
  • 2006 年 7 月 23 日 - 调整代码以纠正 biggun 的误报。
  • 2006 年 12 月 6 日 - 添加了对 // 注释的处理。
© . All rights reserved.