Did you know ... Search Documentation:
Pack diagnostics -- prolog/diagnostics.pl
PublicShow source

This module provides a simple and extensible diagnostics interface based on prolog_colourise_stream/3 from library(prolog_colour).

Diagnostics can be ran on multiple source files from the command line like so:

$ swipl -q                                \
    --on-error=status                     \
    -g "use_module(library(diagnostics))" \
    -t halt                               \
    -- path/to/source/file.pl [path/to/other/file.pl ...]

There is also support for diagnosing Prolog source code originating from stdin, by providing "-" as the first command line argument, followed by a path to a Prolog source file that will be regarded as the "current file" during the analysis for resolving relative paths in source files:

$ swipl -q                                \
    --on-error=status                     \
    -g "use_module(library(diagnostics))" \
    -t halt                               \
    -- - path/to/source/file.pl
 diagnose(+Path) is semidet
Diagnose and report issues in the Prolog source file located at Path.

Detected issues are reported via print_message/2, and can be intercepted via message_hook/3.

 diagnosis_hook(+Item, -Kind, -Message) is semidet[multifile]
Multifile hook, undefined by default. This hook can be used to extend the diagnosis mechanism with user defined diagnostics.

Item is a term describing a source fragment to be diagnosed, it follows the same format as the first argument of ColourItem in prolog_colourise_stream/3.

If this predicate succeeds, Kind must be unified with a message kind term that will be used as the first argument of print_message/2, while Message must be unified with a pair Format-Args where Format is a format string that will be formatted using Args. If this predicate fails, the default diagnosis logic will be used to diagnose Item.