76 lines
2.1 KiB
Racket
76 lines
2.1 KiB
Racket
#lang racket/base
|
|
(require racket/match
|
|
racket/cmdline
|
|
syntax/modresolve
|
|
"check-requires.rkt")
|
|
|
|
#|
|
|
See comments in check-requires.rkt for what this analysis does and
|
|
how to interpret the results.
|
|
|
|
Example (from racket root directory):
|
|
|
|
racket -l macro-debugger/analysis/check-requires-script \
|
|
collects/syntax/*.rkt
|
|
|
|
|#
|
|
|
|
;; Configuration
|
|
|
|
;; show-keep? : (parameterof bool)
|
|
;; Show KEEP messages in output.
|
|
(define show-keep? (make-parameter #f))
|
|
|
|
;; show-bypass? : (parameterof bool)
|
|
;; Show BYPASS messages in output.
|
|
(define show-bypass? (make-parameter #f))
|
|
|
|
;; ========
|
|
|
|
(define (go mod)
|
|
(printf "~s:\n" mod)
|
|
(with-handlers ([exn:fail?
|
|
(lambda (exn)
|
|
(printf "ERROR in ~s\n" mod)
|
|
((error-display-handler) (exn-message exn) exn)
|
|
(newline))])
|
|
(let ([recs (check-requires mod)])
|
|
(for ([rec recs])
|
|
(match rec
|
|
[(list 'keep mpi phase comment)
|
|
(when (show-keep?)
|
|
(printf "KEEP ~a at ~a~a\n"
|
|
(mpi->key mpi) phase
|
|
(if comment (format " (~a)" comment) "")))]
|
|
[(list 'bypass mpi phase)
|
|
(when (show-bypass?)
|
|
(printf "BYPASS ~a at ~a\n" (mpi->key mpi) phase))]
|
|
[(list 'drop mpi phase)
|
|
(printf "DROP ~a at ~a\n" (mpi->key mpi) phase)]))))
|
|
(newline))
|
|
|
|
;; Command-line args are interpreted as files if the file exists,
|
|
;; module names otherwise.
|
|
|
|
(command-line
|
|
#:once-each
|
|
[("--show-keep")
|
|
"Show KEEP recommendations"
|
|
(show-keep? #t)]
|
|
[("--show-bypass")
|
|
"Show BYPASS recommendations"
|
|
(show-bypass? #t)]
|
|
[("--ignore-disappeared-use")
|
|
"Ignore 'disappeared-use syntax property"
|
|
(add-disappeared-uses? #f)]
|
|
#:args args
|
|
(for ([arg (in-list args)])
|
|
(cond [(file-exists? arg)
|
|
(go `(file ,arg))]
|
|
[else
|
|
(let* ([inport (open-input-string arg)]
|
|
[mod (read inport)])
|
|
(unless (eof-object? (peek-char inport))
|
|
(error "bad module name:" arg))
|
|
(go mod))])))
|