LiCoR library: query Smalltak programs using SOUL

About LiCoR

LiCoR is a library of SOUL predicates for reasoning over Smalltalk programs. By using the meta-programming facilities and first-class representation of programs offered by the Smalltalk environment, LiCoR quantifies directly over the live code that is present in a Smalltalk image. The library provides predicates that reify source-code entities (e.g., isClass/1), that query relations between these source-code entities (e.g., isMethodInClass:/2), or that derive high-level properties from the source code (e.g., isClassHierarchyOf:/2).

LiCoR offers a convenient mechanism to traverse the abstract syntax trees (AST) of Smalltalk programs by defining a domain-specific unification procedure over the objects representing Smalltalk ASTs. This unification procedure allows for example message nodes to unify with the functor RBMessageNode(?receiver, ?message, ?arguments).


Andy KellensCoen De RooverKim Mens and Johan Brichau


At the moment there exists no formal documentation of LiCoR. LiCoR however has been extensively used for various purposes, which are described in publications such as Enforcing structural regularities in software using IntensiVE and Co-evolving code and design using Intensional Views - A Case Study.

Installing LiCoR

The latest version of LiCoR can be installed by loading the bundle named 'Soul-LiCoR' from our DMP store in a fresh Smalltalk image.


The following bundles will be loaded automatically from the DMP store as well:

  • Soul the implementation of the SOUL program query language