factor/extra/tools/crossref/crossref.factor

39 lines
1.1 KiB
Factor

! Copyright (C) 2005, 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays definitions assocs io kernel
math namespaces prettyprint sequences strings io.styles words
generic tools.completion quotations parser inspector
sorting hashtables vocabs ;
IN: tools.crossref
: synopsis-alist ( definitions -- alist )
[ dup synopsis swap ] { } map>assoc ;
: definitions. ( alist -- )
[ write-object nl ] assoc-each ;
: (method-usage) ( word generic -- methods )
tuck methods
[ second quot-uses key? ] curry* subset
0 <column>
swap [ 2array ] curry map ;
: method-usage ( word seq -- methods )
[ generic? ] subset [ (method-usage) ] curry* map concat ;
: compound-usage ( words -- seq )
[ generic? not ] subset ;
: smart-usage ( word -- definitions )
\ f or
dup usage dup compound-usage -rot method-usage append ;
: usage. ( word -- )
smart-usage synopsis-alist sort-keys definitions. ;
: words-matching ( str -- seq )
all-words [ dup word-name ] { } map>assoc completions ;
: apropos ( str -- )
words-matching synopsis-alist reverse definitions. ;