! Copyright (C) 2005, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: words assocs definitions io io.pathnames io.styles kernel
-prettyprint sorting see sets sequences arrays hashtables help
-help.crossref help.topics help.markup quotations accessors
-source-files namespaces graphs vocabs generic generic.single
-threads compiler.units init combinators.smart ;
+USING: accessors arrays assocs combinators.smart compiler.units
+generic generic.single graphs hash-sets.identity hashtables help
+help.crossref help.markup help.topics init io io.pathnames
+io.styles kernel namespaces quotations see sequences sets
+sorting source-files threads vocabs words ;
IN: tools.crossref
SYMBOL: crossref
SYMBOL: visited
-GENERIC# quot-uses 1 ( obj assoc -- )
+GENERIC# quot-uses 1 ( obj set -- )
M: object quot-uses 2drop ;
-M: word quot-uses over crossref? [ conjoin ] [ 2drop ] if ;
+M: word quot-uses over crossref? [ adjoin ] [ 2drop ] if ;
-: seq-uses ( seq assoc -- )
- over visited get member-eq? [ 2drop ] [
- over visited get push
+: seq-uses ( seq set -- )
+ over visited get ?adjoin [
[ quot-uses ] curry each
- ] if ;
+ ] [ 2drop ] if ; inline
-: assoc-uses ( assoc' assoc -- )
- over visited get member-eq? [ 2drop ] [
- over visited get push
+: assoc-uses ( assoc' set -- )
+ over visited get ?adjoin [
[ quot-uses ] curry [ bi@ ] curry assoc-each
- ] if ;
+ ] [ 2drop ] if ; inline
M: array quot-uses seq-uses ;
M: wrapper quot-uses [ wrapped>> ] dip quot-uses ;
-M: callable uses ( quot -- assoc )
- V{ } clone visited [
- H{ } clone [ quot-uses ] keep keys
+M: callable uses ( quot -- seq )
+ IHS{ } clone visited [
+ HS{ } clone [ quot-uses ] keep members
] with-variable ;
M: word uses def>> uses ;
M: pathname uses string>> source-file top-level-form>> [ uses ] [ { } ] if* ;
! To make UI browser happy
-M: vocab uses drop f ;
+M: object uses drop f ;
: crossref-def ( defspec -- )
dup uses crossref get-global add-vertex ;
: defs-to-crossref ( -- seq )
[
all-words
- [ [ generic? not ] filter ]
+ [ [ generic? ] reject ]
[ [ subwords ] map concat ] bi
all-articles [ >link ] map
GENERIC: smart-usage ( defspec -- seq )
-M: object smart-usage usage [ irrelevant? not ] filter ;
+M: object smart-usage usage [ irrelevant? ] reject ;
M: method smart-usage "method-generic" word-prop smart-usage ;
[ "No usages." print ] [ sorted-definitions. ] if-empty ;
: vocab-xref ( vocab quot: ( defspec -- seq ) -- vocabs )
- [ [ vocab-name ] [ words [ generic? not ] filter ] bi ] dip map
+ [ [ vocab-name ] [ words [ generic? ] reject ] bi ] dip map
[
[ [ word? ] [ generic? not ] bi and ] filter [
dup method?