Click here to Skip to main content
15,879,535 members
Articles / Web Development / IIS
Article

ASP Code Analyzer

Rate me:
Please Sign up or sign in to vote.
4.77/5 (16 votes)
6 Dec 20064 min read 154.1K   3.6K   79   24
A simple tool to find unused subs, functions and variables in your ASP code.

Image 1

Introduction

The goal of this tool is to check an ASP project/folder for unused code elements. These elements include unused constants, global variables, functions, subs, and local variables. This comes in very handy if you undertake large changes in a project, or use include files from previous ASP projects and want to be sure, that you do not deploy unnecessary code.

This article will not describe in detail how the code works, since the main topic is how to get rid of unused elements, and the code is actually written in C#. It will, however, give you an understanding of how the tool operates and what its limitations are.

Using the analyzer

The ASP Code Analyzer is very easy to use. First download the executable, unzip it and run ASPCodeAnalyzer.exe. Next you can browse for the directory that contains your ASP project. Hit the 'Go' button and the analyzer will do its work. I would like to stress on the point that the analyzer will not change your files. It will merely point to the portions in your code where there are unused code elements.

If you have UltraEdit32 installed in your machine and if you double click on the findings list, the tool will automatically start UltraEdit32 and open the file on the corresponding code line. If you use a different editor, you can use the File/Options dialog to define your editor and the parameters used to open a specified file on a given line.

Your code has to be syntactically correct. Otherwise the analyzer will not work properly.

How the analyzer operates

Pass one

  • First the analyzer lists all the .asp and .inc files in the given directory and all its sub directories and puts them in a queue.
  • Now all the files in the queue are read. If the analyzer encounters include statements, it adds the referenced file to the queue if it's not already in it. If the included file does not exist on the hard disk, the analyzer writes a message to the error list at the bottom of the window.
  • While reading a file it strips all the HTML Code, all comments (including rem comments) and all texts that are surrounded by double quotes. The parser is smart enough to treat two consecutive double quotes as one single double quote.
  • Now that only the code is left of the original file, the analyzer creates an internal "code tree":
    • constants
    • global variables
    • global code
    • subs/functions
      • local variables
      • code
    • classes
      • methods
        • local variables
        • code

    The analyzer does not test whether classes are used in the code. Nor is it able to test whether specific members and methods of a class are used. It does however check, if local variables are used.

  • The local variables of subs, functions and methods are tested for usage while building the code tree. This is done by testing if the variable name is used in the code block.

Pass two

Now for the tricky part: Finding unused global variables and subs/functions.

  • First, all elements are considered unused.
  • Now all the files are processed again in groups. A group consists of a file plus all referenced files.
  • All elements of the current file group are examined. If the name of an element is used anywhere in the code of the file group, that element is considered used.

By examining file groups instead of files, an include file is tested in all possible contexts.

Matching the elements against the code

Let's say the analyzer wants to know if the sub WriteTd is used in a code block, then the following statements are matched:

VBScript
call WriteTd( someVar)
call WriteTd ( someVar)

The following statements do not match, since the sub's name is actually just a part of the whole identifier:

VBScript
call WriteTd2( someVar)
call MyWriteTd( someVar)

Limitations

Be warned: Due to it's heuristic nature, the algorithm is probably not able to find all the unused elements in your code. On the positive side all its findings should really be unused elements.

The analyzer is unable to detected the following:

VBScript
function test
  dim unusedVar
  unusedVar = 12
end function

Although the variable unusedVar is technically useless, since it is not used for processing anywhere, the analyzer will not notify you. Generally speaking, the analyzer will only point out those code blocks that you can delete without breaking the code.

Also, if you use local variables that shadow global variables the global variables are always considered used.

VBScript
dim unusedGlobal

function test
  dim unusedGlobal ' Shadows the global variable
  unusedGlobal = 12
  Response.Write( unusedGlobal)
end function

Variables should not be defined in more than one line. In the following code:

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

the analyzer will only identify a, b and c as variables.

Conclusion

Despite its shortcomings the ASP Code Analyzer should give you a good impression on how clean your code actually is.

History

  • July 17th, 2005 - Initial release.
  • July 23rd, 2006 - Adjusted code to correct biggun's false positive.
  • December 6th, 2006 - Added handling of // comments.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Switzerland Switzerland
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionThanks fschudel for this wonderful tool Pin
pg_embedded8-May-13 18:46
pg_embedded8-May-13 18:46 
AnswerRe: Thanks fschudel for this wonderful tool Pin
fschudel8-May-13 22:06
fschudel8-May-13 22:06 
Generalgood tools Pin
Member 110714717-Jun-10 21:04
Member 110714717-Jun-10 21:04 
GeneralOption to only list local variables Pin
Edelcom24-Jan-10 22:06
Edelcom24-Jan-10 22:06 
GeneralRe: Option to only list local variables Pin
fschudel25-Jan-10 1:38
fschudel25-Jan-10 1:38 
GeneralRe: Option to only list local variables Pin
Edelcom25-Jan-10 2:40
Edelcom25-Jan-10 2:40 
GeneralEnforcing CodingStandards Pin
Vasudevan Deepak Kumar6-Dec-06 7:14
Vasudevan Deepak Kumar6-Dec-06 7:14 
GeneralRe: Enforcing CodingStandards Pin
fschudel6-Dec-06 20:54
fschudel6-Dec-06 20:54 
GeneralRelated Tool Pin
Vasudevan Deepak Kumar6-Dec-06 7:13
Vasudevan Deepak Kumar6-Dec-06 7:13 
GeneralError Pin
valamas_salmat5-Dec-06 18:26
valamas_salmat5-Dec-06 18:26 
GeneralRe: Error Pin
fschudel5-Dec-06 20:32
fschudel5-Dec-06 20:32 
GeneralVirtual Folders (IIS) vs FileSystem base approach Pin
toebens4-Dec-06 5:25
toebens4-Dec-06 5:25 
GeneralRe: Virtual Folders (IIS) vs FileSystem base approach Pin
fschudel4-Dec-06 8:17
fschudel4-Dec-06 8:17 
Generalthanks. Pin
JorgeCastro20068-Aug-06 11:22
JorgeCastro20068-Aug-06 11:22 
GeneralCheck unused CONST Pin
tkdmaster25-Jul-06 4:58
tkdmaster25-Jul-06 4:58 
GeneralRe: Check unused CONST Pin
fschudel28-Jul-06 21:35
fschudel28-Jul-06 21:35 
QuestionFalse positive [modified] Pin
biggun13-Jul-06 14:15
biggun13-Jul-06 14:15 
AnswerRe: False positive Pin
fschudel15-Jul-06 7:06
fschudel15-Jul-06 7:06 
GeneralRe: False positive Pin
biggun19-Jul-06 1:41
biggun19-Jul-06 1:41 
GeneralRe: False positive Pin
Misael Monterroca17-Nov-16 5:37
Misael Monterroca17-Nov-16 5:37 
GeneralRe: False positive Pin
Member 109644356-Apr-17 14:21
Member 109644356-Apr-17 14:21 
GeneralThanks! Pin
wk63312-Jul-06 13:19
wk63312-Jul-06 13:19 
GeneralInteresting tool Pin
Don Miguel28-Jul-05 21:31
Don Miguel28-Jul-05 21:31 
GeneralRe: Interesting tool Pin
Havoxx3-Aug-05 5:55
Havoxx3-Aug-05 5:55 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.