;; modules.scm -- module metadata ;; Copyright (C) 2009 Jose Antonio Ortega Ruiz ;; Author: Jose Antonio Ortega Ruiz ;; Start date: Mon Mar 02, 2009 02:00 ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 3 of the License, or ;; (at your option) any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Comentary: ;; Utilities for accessing metadata about modules. ;;; Code: (define-module (geiser modules) #:export (symbol-module module-filename all-modules module-children module-location) #:use-module (geiser utils) #:use-module (ice-9 regex) #:use-module (ice-9 session) #:use-module (srfi srfi-1)) (define (symbol-module sym . all) (and sym (catch 'module-name (lambda () (apropos-fold (lambda (module name var init) (if (eq? name sym) (throw 'module-name (module-name module)) init)) #f (regexp-quote (symbol->string sym)) (if (or (null? all) (not (car all))) (apropos-fold-accessible (current-module)) apropos-fold-all))) (lambda (key . args) (and (eq? key 'module-name) (car args)))))) (define (module-location name) (make-location (module-filename name) #f)) (define module-filename (@@ (ice-9 session) module-filename)) (define (all-modules) (let ((roots ((@@ (ice-9 session) root-modules)))) (sort! (map (lambda (m) (format "~A" (module-name m))) (fold (lambda (m all) (append (all-child-modules m) all)) roots roots)) string