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 squealer.pl reached
a certain size. So inevitably it could do with some re-factoring.
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.
- squealer.pl. 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.
- sorceror.pl. This script does all the CVS work. It either calls
onto a batch file (
cvs edit and unedit respectively) or invokes the cvs command directly (for
cvs diff, history and commit).
- codegen.pm. 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).
- frisk.pl. 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 (
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.
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
-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
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.