improve some error messages with accurate caller names

pull/127/head
Matthew Butterick 8 years ago
parent d6e7e4ff8f
commit f81da2ac6e

@ -16,17 +16,17 @@
(define+provide define-meta identity) ;; stub so it will be picked up for docs (define+provide define-meta identity) ;; stub so it will be picked up for docs
(define+provide/contract (select* key value-source) (define+provide/contract (select* key value-source [caller 'select*])
(coerce/symbol? (or/c is-meta-value? is-doc-value? pagenode? pathish?) . -> . (or/c #f txexpr-elements?)) ((coerce/symbol? (or/c is-meta-value? is-doc-value? pagenode? pathish?)) (symbol?) . ->* . (or/c #f txexpr-elements?))
(define metas-result (and (not (is-doc-value? value-source)) (select-from-metas key value-source))) (define metas-result (and (not (is-doc-value? value-source)) (select-from-metas key value-source caller)))
(define doc-result (and (not (is-meta-value? value-source)) (select-from-doc key value-source))) (define doc-result (and (not (is-meta-value? value-source)) (select-from-doc key value-source caller)))
(define result (filter not-false? (apply append (map ->list (list metas-result doc-result))))) (define result (filter not-false? (apply append (map ->list (list metas-result doc-result)))))
(and (pair? result) result)) (and (pair? result) result))
(define+provide/contract (select key value-source) (define+provide/contract (select key value-source)
(coerce/symbol? (or/c is-meta-value? is-doc-value? pagenode? pathish?) . -> . (or/c #f txexpr-element?)) (coerce/symbol? (or/c is-meta-value? is-doc-value? pagenode? pathish?) . -> . (or/c #f txexpr-element?))
(define result (select* key value-source)) (define result (select* key value-source 'select))
(and (pair? result) (car result))) (and (pair? result) (car result)))
@ -51,13 +51,13 @@
(check-false (select 'absent-key doc)))) (check-false (select 'absent-key doc))))
(define+provide/contract (select-from-metas key metas-source) (define+provide/contract (select-from-metas key metas-source [caller 'select-from-metas])
;; output contract is a single txexpr-element ;; output contract is a single txexpr-element
;; because metas is a hash, and a hash has only one value for a key. ;; because metas is a hash, and a hash has only one value for a key.
(coerce/symbol? (or/c is-meta-value? pagenode? pathish?) . -> . (or/c #f txexpr-element?)) ((coerce/symbol? (or/c is-meta-value? pagenode? pathish?)) (symbol?) . ->* . (or/c #f txexpr-element?))
(define metas (if (is-meta-value? metas-source) (define metas (if (is-meta-value? metas-source)
metas-source metas-source
(get-metas metas-source))) (get-metas metas-source caller)))
(and (hash-has-key? metas key) (hash-ref metas key))) (and (hash-has-key? metas key) (hash-ref metas key)))
(module-test-external (module-test-external
@ -66,13 +66,13 @@
(check-false (select-from-metas 'absent-key metas)))) (check-false (select-from-metas 'absent-key metas))))
(define+provide/contract (select-from-doc key doc-source) (define+provide/contract (select-from-doc key doc-source [caller 'select-from-doc])
;; output contract is a list of elements ;; output contract is a list of elements
;; because doc is a txexpr, and a txexpr can have multiple values for a key ;; because doc is a txexpr, and a txexpr can have multiple values for a key
(coerce/symbol? (or/c is-doc-value? pagenode? pathish?) . -> . (or/c #f txexpr-elements?)) ((coerce/symbol? (or/c is-doc-value? pagenode? pathish?)) (symbol?) . ->* . (or/c #f txexpr-elements?))
(define doc (if (is-doc-value? doc-source) (define doc (if (is-doc-value? doc-source)
doc-source doc-source
(get-doc doc-source))) (get-doc doc-source caller)))
(define result (se-path*/list (list key) doc)) (define result (se-path*/list (list key) doc))
(and (pair? result) result)) (and (pair? result) result))
@ -89,18 +89,19 @@
(build-path (current-project-root) (symbol->string pagenode-or-path)) (build-path (current-project-root) (symbol->string pagenode-or-path))
pagenode-or-path))]) pagenode-or-path))])
(unless path (unless path
(error (format "~a no source found for '~a' in directory ~a" caller path (current-directory)))) ;; use `pagenode-or-path` in error message because at this point `path` is #f
(error (format "~a: no source found for '~a' in directory ~a" caller pagenode-or-path (current-directory))))
path)) path))
(define+provide/contract (get-metas pagenode-or-path) (define+provide/contract (get-metas pagenode-or-path [caller 'get-metas])
((or/c pagenode? pathish?) . -> . is-meta-value?) (((or/c pagenode? pathish?)) (symbol?) . ->* . is-meta-value?)
(cached-metas (convert+validate-path pagenode-or-path 'get-metas))) (cached-metas (convert+validate-path pagenode-or-path caller)))
(define+provide/contract (get-doc pagenode-or-path) (define+provide/contract (get-doc pagenode-or-path [caller 'get-doc])
((or/c pagenode? pathish?) . -> . (or/c is-doc-value? string?)) (((or/c pagenode? pathish?)) (symbol?) . ->* . (or/c is-doc-value? string?))
(cached-doc (convert+validate-path pagenode-or-path 'get-doc))) (cached-doc (convert+validate-path pagenode-or-path caller)))
;; This `@` definition is here to provide a hook for the docs. ;; This `@` definition is here to provide a hook for the docs.

@ -1 +1 @@
1467148772 1468003549

Loading…
Cancel
Save