fix broken-link reporting by `scribble'

original commit: 853e47f05e6feaaa4d29662d2b5a2042a2bea30a
This commit is contained in:
Matthew Flatt 2011-08-21 21:20:15 -06:00
parent dd22d7eedb
commit 5d67e0fe48
3 changed files with 51 additions and 9 deletions

View File

@ -236,9 +236,19 @@
(define/public (get-defined ci)
(hash-map (collect-info-ht ci) (lambda (k v) k)))
(define/public (get-undefined ri)
(define/public (get-external ri)
(hash-map (resolve-info-undef ri) (lambda (k v) k)))
(define/public (get-undefined ri)
(for/list ([(k v) (in-hash (resolve-info-undef ri))]
#:unless (or (eq? v 'found)
(and v
;; v is a search key; see if any key in the set was resolved:
(let ([ht (hash-ref (resolve-info-searches ri) v)])
(for/or ([k2 (in-hash-keys ht)])
(eq? 'found (hash-ref (resolve-info-undef ri) k2 #f)))))))
k))
(define/public (transfer-info ci src-ci)
(let ([in-ht (collect-info-ext-ht ci)])
(for ([(k v) (collect-info-ext-ht src-ci)])

View File

@ -39,13 +39,20 @@
#t)]))))
(define (resolve-get/ext? part ri key)
(resolve-get/ext?* part ri key #f))
(define (resolve-get/ext?* part ri key search-key)
(let-values ([(v ext?) (resolve-get/where part ri key)])
(when ext?
(hash-set! (resolve-info-undef ri) (tag-key key ri) #t))
(hash-set! (resolve-info-undef ri) (tag-key key ri)
(if v 'found search-key)))
(values v ext?)))
(define (resolve-get part ri key)
(let-values ([(v ext?) (resolve-get/ext? part ri key)])
(resolve-get* part ri key #f))
(define (resolve-get* part ri key search-key)
(let-values ([(v ext?) (resolve-get/ext?* part ri key search-key)])
v))
(define (resolve-get/tentative part ri key)
@ -61,14 +68,12 @@
search-key s-ht)
s-ht)))])
(hash-set! s-ht key #t))
(resolve-get part ri key))
(resolve-get* part ri key search-key))
(define (resolve-get-keys part ri key-pred)
(let ([l null])
(hash-for-each
(collected-info-info (part-collected-info part ri))
(lambda (k v) (when (key-pred k) (set! l (cons k l)))))
l))
(for/list ([k (in-hash-keys (collected-info-info (part-collected-info part ri)))]
#:when (key-pred k))
k))
(provide (struct-out collect-info)
(struct-out resolve-info))

View File

@ -187,6 +187,7 @@ object.}
Serializes the collected info in @racket[ri].}
@defmethod[(deserialize-info [v any/c]
[ci collect-info?]
[#:root root-path (or/c path-string? false/c) #f])
@ -199,6 +200,32 @@ recorded in @racket[ci] as relative to an instantiation-supplied
@racket[root-path] are deserialized as relative instead to the given
@racket[root-path].}
@defmethod[(get-defined [ci collect-info?]) (listof tag?)]{
Returns a list of tags that were defined within the documents
represented by @racket[ci].}
@defmethod[(get-external [ri resolve-info?]) (listof tag?)]{
Returns a list of tags that were referenced but not defined within the
documents represented by @racket[ri] (though possibly found in
cross-reference information transferred to @racket[ri] via
@racket[xref-transfer-info]).}
@defmethod[(get-undefined [ri resolve-info?]) (listof tag?)]{
Returns a list of tags that were referenced by the resolved documents
with no target found either in the resolved documents represented by
@racket[ri] or cross-reference information transferred to @racket[ri]
via @racket[xref-transfer-info].
If multiple tags were referenced via @racket[resolve-search] and a
target was found for any of the tags using the same dependency key,
then no tag in the set is included in the list of undefined tags.}
}
@; ----------------------------------------