Finding Racket Paths
This package provides an API and raco command that consolidates support for finding paths significant to Racket.
1 API for Finding Racket Paths
| (require whereis) | package: whereis | 
The procedures provided by whereis return local filesystem paths corresponding to Racket modules, collections, packages, etc.
See also raco whereis: Finding Racket Paths.
procedure
(whereis-module modpath) → path?
modpath : (or/c module-path? module-path-index?) 
The example results are for a development build of racket in /home/me/dev. Your results will differ.
> (whereis-module 'racket/list) #<path:/home/me/dev/racket/racket/collects/racket/list.rkt>
> (whereis-module 'racket/draw) #<path:/home/me/dev/racket/racket/share/pkgs/draw-lib/racket/draw.rkt>
> (whereis-module '(submod racket reader)) ; same as racket #<path:/home/me/dev/racket/racket/collects/racket/main.rkt>
If modpath cannot be resolved or resolves to a nonexistant file, an exception is raised. If modpath refers to a submodule, the path of the enclosing top-level module is returned.
procedure
(whereis-collection collection) → (listof path?)
collection : collection-name? 
> (whereis-collection "json") 
'(#<path:/home/me/dev/racket/racket/collects/json>
#<path:/home/me/dev/racket/pkgs/racket-doc/json>)
> (whereis-collection "racket/gui") 
'(#<path:/home/me/dev/racket/racket/collects/racket/gui>
#<path:/home/me/dev/racket/racket/share/pkgs/gui-lib/racket/gui>)
> (whereis-collection "drracket") 
'(#<path:/home/me/dev/racket/racket/share/pkgs/drracket/drracket>
#<path:/home/me/dev/racket/racket/share/pkgs/drracket-tool-lib/drracket>
#<path:/home/me/dev/racket/racket/share/pkgs/drracket-plugin-lib/drracket>)
In contrast to collection-path, this procedure returns returns all directories associated with collection.
If no directories are found for collection, an exception is raised.
procedure
(whereis-pkg pkg) → path?
pkg : string? 
Like (pkg-directory pkg), but simplifies the result path.
> (whereis-pkg "base") #<path:/home/me/dev/racket/pkgs/base>
> (whereis-pkg "pict-lib") #<path:/home/me/dev/racket/racket/share/pkgs/pict-lib>
If pkg is not installed, an exception is raised.
procedure
(whereis-raco command) → path?
command : string? 
> (whereis-raco "exe") #<path:/home/me/dev/racket/pkgs/compiler-lib/compiler/commands/exe.rkt>
> (whereis-raco "whereis") #<path:/home/me/dev/racket/pkgs/compiler-lib/compiler/commands/whereis.rkt>
An error is reported if the given raco command is not registered. If the command is implemented by a submodule, the path of the enclosing top-level module is returned.
- 'home-dir, 'pref-dir, 'pref-file, 'temp-dir, 'init-dir, 'init-file, 'addon-dir, 'doc-dir, 'desk-dir, 'sys-dir — - Equivalent to (find-system-path name). - Example: (whereis-system 'temp-dir). 
- 'exec-file, 'config-dir, 'host-config-dir, 'collects-dir, 'host-collects-dir — - Like (find-system-path name), but relative paths are converted into absolute paths by interpreting them with respect to the path of the racket executable. - Example: (whereis-system 'config-dir). 
- the name of a procedure from setup/dirs that returns a path or list of paths. - Example: (whereis-system 'get-config-dir). 
If name is unknown or if the implementation returns #f, an exception is raised.
procedure
(whereis-binding id [phase]) → path?
id : identifier? phase : (or/c exact-integer? #f) = (syntax-local-phase-level) 
> (whereis-binding #'lambda) #<path:/home/me/dev/racket/racket/collects/racket/private/kw.rkt>
> (whereis-binding #'in-list) #<path:/home/me/dev/racket/racket/collects/racket/private/for.rkt>
Note that this procedure does not see through contract-out. That is, contract-out defines and exports an auxiliary macro to perform contract checking, and this procedure reports the definition site of the macro (the site where contract-out is used) instead of the definition site of the binding being protected.
If id does not refer to a module export at phase phase, or if the binding was defined by a built-in module (such as '#%kernel), an error is reported. If id is defined in a submodule, the path of the enclosing top-level module is returned.
procedure
(whereis-binding/symbol providing-mod name) → path?
providing-mod : module-path? name : symbol? 
> (whereis-binding/symbol 'racket 'define) #<path:/home/me/dev/racket/racket/collects/racket/private/kw.rkt>
> (whereis-binding/symbol 'racket 'in-list) #<path:/home/me/dev/racket/racket/collects/racket/private/for.rkt>
If providing-mod does not have an export named name, or if the binding was defined by a built-in module (such as '#%kernel), an error is reported. If id is defined in a submodule, the path of the enclosing top-level module is returned.
2 raco whereis: Finding Racket Paths
The raco whereis command prints the local filesystem path corresponding to Racket modules, collections, packages, etc.
Command-line flags:
- -m ‹module-path› or --module ‹module-path› — - Prints the path containing the declaration of the given module. The ‹module-path› argument must contain exactly one readable S-expression, otherwise an error is reported. Examples:- raco whereis -m racket/list 
- raco whereis -m racket/draw 
- raco whereis -m '(submod racket reader)' — - same as raco whereis -m racket 
 - An error is reported if ‹module-path› cannot be resolved or if it “resolves” to a nonexistant file. If ‹module-path› refers to a submodule, the path of the enclosing top-level module is printed. 
- -c ‹collection› or --collect ‹collection› — - Prints the directory paths corresponding to the given collection. Note that a collection may have multiple directories, depending on collection roots and installed packages. Examples:- raco whereis -c json 
- raco whereis -c racket/gui 
- raco whereis -c drracket 
 - An error is reported if ‹collection› is invalid (see collection-name?) or if no directories are found. 
- -p ‹package› or --pkg ‹package› — - Prints the path of the directory containing ‹package›, which must be installed in some scope. Examples:- raco whereis -p base 
- raco whereis -p pict-lib 
 - If ‹package› is not installed, an error is reported. 
- -r ‹command› or --raco ‹command› — - Prints the path of the module implementing the given raco command. Examples:- raco whereis -r exe 
- raco whereis -r whereis 
 - An error is reported if the given raco command is not registered. If ‹command› is implemented by a submodule, the path of the enclosing top-level module is printed. 
- -s ‹name› or --system ‹name› — - Prints the path or paths corresponding to the given system location. The following location names are supported:- home-dir, pref-dir, pref-file, temp-dir, init-dir, init-file, addon-dir, doc-dir, desk-dir, sys-dir — - Same as (find-system-path name). - Example: raco whereis -s temp-dir 
- exec-file, config-dir, host-config-dir, collects-dir, host-collects-dir — - Like (find-system-path name), but relative paths are converted into absolute paths by interpreting them with respect to the path of the racket executable. - Example: raco whereis -s config-dir. 
- the name of a procedure from setup/dirs that returns a path or list of paths. - Example: raco whereis -s find-config-dir. 
 - If ‹name› is unknown or if the corresponding procedure returns #f, an error is reported. 
- --all-system-paths — - Prints all supported “system” locations (that is, valid arguments to --system) and their values. If a location’s corresponding procedure returns #f, instead of printing an error message like --system, the location is printed without any values. 
- -b ‹providing-module› ‹name› or --binding ‹providing-module› ‹name› — - Prints the path of the module that defines the binding exported by ‹providing-module› as ‹name›. Note that the defined name might be different due to renamings. Examples:- raco whereis -b racket define 
- raco whereis -b racket in-list 
 - Note that whereis does not see through contract-out. That is, contract-out defines and exports an auxiliary macro to perform contract checking, and whereis reports the definition site of the macro (the site where contract-out is used) instead of the definition site of the binding being protected. - If ‹name› is not provided by ‹providing-module›, or if the binding was defined by a built-in module (such as '#%kernel), an error is reported. If ‹name› is defined in a submodule, the path of the enclosing top-level module is printed.