SmallLint is a famous code critics tool for Smalltalk that checks for over 60 common types of code smell and possible bugs. I’ve added a couple of rules that are targeted at Seaside applications:

  • Avoid unnecessary #with:
    Sending #with: is only required if attributes are specified.
  • Extract callback code to separate method
    For clarity rendering code and callback code should not be mixed, extract the contents of the callback block to a separate method.
  • Unnecessary block passed to brush
    Sending a block as argument to #with: is only needed when nesting brushes.
  • #with: has to be last message in cascade
    Sending #with: triggers serialization of the brush attributes, any attribute being specified afterwards has no effect.
  • #call:/#answer: while rendering
    #call: and #answer: should only be used from callback code, not within the rendering code.
  • Changes state while rendering
    Application state should not be changed in the rendering code, use a callback to change state.
  • Does not send super to hook method
    Always send super when overriding hook methods like #updateRoot:, #updateUrl:, #initialRequest:, ...
  • Sends deprecated message
    Deprecated methods will all be removed with the next version of Seaside.

To try these rules on your own code, load the package Slime from It takes a while to load the first time, as the tool builds up some caches on valid brush names. As a prerequisite the Refactoring Engine is required.

The rules are not bulletproof and by no means complete. It could well be that you encounter false positives or that it misses some serious problems, but it should give you an idea where your code might need some refactoring. If anybody has particular ideas on what could be checked additionally, I am glad to include more rules.

Posted by Lukas Renggli at 18 December 2007, 7:32 pm with tags seaside, refactoring link


Slime is also the Lisp IDE for Emacs… is this version for removing jellyfishes and kelp from the seaside beach ?

Posted by Damien Pollet at 18 December 2007, 7:54 pm link

Hmm, Slime also found some positive matches in Seaside itself. Some of them are fixed in upstream.

Posted by Philippe Marschall at 18 December 2007, 10:26 pm link

@Damien: I wasn’t aware of the name clash. Indeed, the goal is to get rid of kelp.

@Philippe: Great. I already fixed some issues in Pier and Magritte too. There are a couple of hits in Scriptaculous as well.

Posted by Lukas Renggli at 19 December 2007, 9:35 am link