commit dcf745ce4a9365a4411b888f4fc1f537bd482a64
parent 78026f645672d48f5baa9b46be9e32b42213ae33
Author: Vincent St-Amour <stamourv@racket-lang.org>
Date: Tue, 31 May 2011 14:37:15 -0400
Add documentation for check-requires.
original commit: 2e3e6822f3d7d96b0ced0983425ae43d8a08268d
Diffstat:
1 file changed, 55 insertions(+), 0 deletions(-)
diff --git a/collects/macro-debugger/macro-debugger.scrbl b/collects/macro-debugger/macro-debugger.scrbl
@@ -313,3 +313,58 @@ The binding information of a syntax object may not be the same as
the binding structure of the program it represents. The binding
structure of a program is only determined after macro expansion is
complete.
+
+
+@section{Checking requires}
+@section-index["useless-requires"]
+
+@defmodule[macro-debugger/analysis/check-requires]
+
+@defproc[(check-requires [module-name module-path?])
+ (listof (list/c 'keep module-path-index? number? (or/c string? #f))
+ (list/c 'bypass module-path-index? number?)
+ (list/c 'drop module-path-index? number?))]{
+
+Estimate a module's useless requires.
+The procedure returns one element per (non-label) require in the
+following format:
+@itemlist[
+@item{
+ @racket['keep] @racket[module] at @racket[phase] @racket[(optional-comment)]
+ @itemlist[
+ @item{The require must be kept because bindings defined within it are used.}
+ @item{The optional comment indicates if the require must be kept
+ @itemlist[
+ @item{only because its bindings are re-exported}
+ @item{only because the whitelist DB says so}
+ ]}]}
+@item{
+ @racket['bypass] @racket[module] at @racket[phase]
+ @itemlist[
+ @item{The require is used, but only for bindings that could be more
+ directly obtained via another module. For example, @racket[racket]
+ can be bypassed in favor of some subset of @racket[racket/base],
+ @racket[racket/contract], etc.}]}
+@item{
+ @racket['drop] @racket[module] at @racket[phase]
+ @itemlist[
+ @item{The require appears to be unused. Unless it must be kept for side
+ effects or for bindings of a very unusual macro, it can be dropped
+ entirely.}]}]
+
+Examples:
+@racketblock[
+ (check-requires 'typed-scheme)
+ (check-requires 'unstable/markparam)
+ (check-requires 'macro-debugger/syntax-browser/widget)
+]
+}
+
+A scripting interface to @racket[macro-debugger/analysis/check-requires]
+usable from the command-line is available at
+@racket[macro-debugger/analysis/check-requires-script.rkt].
+
+Example (from racket root directory):
+
+@commandline{racket -l macro-debugger/analysis/check-requires-script \
+ collects/syntax/*.rkt}