Version 1.42

The Importance
of Impatience
Credits Logo
The Squealer
The Squealer is surprisingly simple. It is run by a couple of Perl scripts that implement most of the features and delegate tag creation to ctags. We've tried to make the core Perl scripts modular, though this decision was only needed once reached a certain size. So inevitably it could do with some re-factoring.

Perl Scripts

Perl is our language of choice for The Squealer mainly because we can do the things we want to more quickly with Perl than other languages. That's the bottom line for us, though it does help that we both have been using it for plenty of years. The technical reasons why it fits are because of it's text-handling, regular expressions, i/o, speed, ease of deployment (compared with statically-typed languages like Java) and platform portability.
  • . This is the main Perl script that does most of the work. Almost all commands are channeled through it (as command-line options) and it implements all the searching, loading, grepping, tailing, history, code describing (for non-Java files). Try running it with -H -pause to see the full description of it's options, or even better have a read through the script itself.
  • . This script does all the CVS work. It either calls onto a batch file (cvsedit.bat and cvsunedit.bat for cvs edit and unedit respectively) or invokes the cvs command directly (for cvs diff, history and commit).
  • . This module is reponsible for all the Code Generation. It reads from the Windows Clipboard, generates its code then dumps its results to stdout (which is captured by your editor for unobtrusive code generation).
  • . This is the main Frisker module that handles Java code parsing to allow Code Checking and Code Describing (for Java). This script parses the Java source files and runs a rules file. One rules file exist for Code Checking (defaultrules.conf) and Java Code Describing (classDescriber.conf) respectively.


All of the important features in the Squealer are configurable, and many are easily modified directly in the Perl scripts if really necessary. However, we do try to ensure we allow configuration for most items to allow for easier upgrades with new Squealer releases. We aim to maintain backward compatibility with the config files so upgrades to new versions should be much easier once the initial setup is done.

  • squealer.conf
  • . Main configuration file. This controls most aspects of the Squealer's functionality.
  • ctag.cnf
  • . Ctags configuration. Defines line-based mechanism used by The Squealer and additional languages supported.
  • classDescriber.conf
  • . Frisker rules file to print out the methods in a Java class. This is the output for the Code Describer.
  • defaultrules.conf
  • . Frisker rules files to check code against simple rules like naming conventions, method length, complexity, etc.

Support Files

The support files maintained by The Squealer are configurable themselves (at least the names are - in squealer.conf), by default most live in the root directory of your main source tree.

  • squealerFiles.txt
  • . Auto-generated file dictionary (from -load or -loadfiles). One per project.
  • squealerHistory.txt
  • . Numbered history of commands. Each command invoked through the Squealer is added to your history file so you can view and re-run old commands. Added especially for the lazy ones.
  • squealerResults.txt
  • . Command result re-directed here if -tofile. This is especially useful if your editor (like Textpad) only support one Command Results window which gets overwritten everytime you run a tool.
  • tags
  • . Auto-generated tag dictionary (by ctags). One per project.
  • squealerStruts.txt
  • . Auto-generated Struts form/action dictionary. One per project.