The System Browser tool allows integration of source code managers.
There is an example for integrating ASDF in
(lw:example-file "misc/asdf-integration.lisp")
The interface is described in some detail in the remainder of this section, but the example above is sufficient to allow you to use ASDF in the LispWorks IDE.
The interface comprises a function scm:add-system-namespace
which must be called, and a set of generic functions for which methods need to be defined.
scm:add-system-namespace
adds a namespace of "systems", which:
:load
and :compile
defined for them
LispWorks has its own built-in source code manager (lw:defsystem
, lw:compile-system
, lw:load-system
, lw:concatenate-system
and related functions). A widely-used source code manager is ASDF.
In the LispWorks IDE tools, a system name that contains a colon is interpreted as
To find the system LispWorks applies the finder specified in scm:add-system-namespace
to the string systemname. A system name without a colon is searched (using the finder) in all the known namespaces. Note that this means that a system name without a colon may match several systems in different namespaces.
In addition to the integration interface, there are new functions which look at the namespaces and systems.
The most important symbols in the integration interface are described in the remainder of this section. "module" means one of the objects that is returned by the finder in scm:add-system-namespace
or by the system-lister in scm:add-system-namespace
or by scm:module-children
. A "system" is a module for which scm:module-is-system-p
returns true.
add-system-namespace name &key finder system-lister name-lister
The function scm:add-system-namespace
tells LispWorks about another system namespace.
name must be a string. It is compared case-insensitively. The name must be different from "LW"
, which is the namespace for the LispWorks built-in lw:defsystem
systems.
finder must be supplied as a function or symbol which takes one argument, a string. If there is an exact match (case-insensitive) it returns a module object or a list of module objects. The finder needs to be error-free when called with a string.
system-lister must be a designator for a function which takes no argument, and returns a list of the known systems in the namespace.
name-lister is optional. If supplied, it must be a designator for a function which takes no argument and returns a list of the names of the systems in the namespace. If it is not supplied, the system uses system-lister and maps scm:module-name
on the result.
module module => name
The function scm:module-name
must be defined for any module. It takes a module and returns its name.
scm:module-is-system-p module => boolean
The generic function scm:module-is-system-p
returns true if the module is a "system". That is, it has children. The default method returns false.
scm:module-children module => list-of-modules
The generic function scm:module-children
returns the children of the module, if any. The default method returns nil
. This generic function is called only on "systems", that is after checking that scm:module-is-system-p
returned true.
LispWorks IDE User Guide (Windows version) - 13 Sep 2017