1 ! (c)2009 Joe Groff bsd license
2 USING: accessors arrays assocs combinators.short-circuit
3 compiler.units debugger init io
4 io.streams.null kernel namespaces prettyprint sequences
5 source-files.errors summary tools.crossref
6 tools.crossref.private tools.errors words ;
9 SYMBOL: +deprecation-note+
10 SYMBOL: deprecation-notes
12 deprecation-notes [ H{ } clone ] initialize
14 TUPLE: deprecation-note < source-file-error ;
16 M: deprecation-note error-type drop +deprecation-note+ ;
18 TUPLE: deprecated-usages asset usages ;
20 : :deprecations ( -- )
21 deprecation-notes get-global values errors. ;
24 { type +deprecation-note+ }
25 { word ":deprecations" }
26 { plural "deprecated word usages" }
27 { icon "vocab:ui/tools/error-list/icons/deprecation-note.tiff" }
28 { quot [ deprecation-notes get values ] }
29 { forget-quot [ deprecation-notes get delete-at ] }
32 : <deprecation-note> ( error word -- deprecation-note )
33 \ deprecation-note <definition-error> ;
35 : deprecation-note ( word usages -- )
36 [ deprecated-usages boa ]
37 [ drop <deprecation-note> ]
38 [ drop deprecation-notes get-global set-at ] 2tri ;
40 : clear-deprecation-note ( word -- )
41 deprecation-notes get-global delete-at ;
43 : check-deprecations ( usage -- )
45 dup { [ "forgotten" word-prop ] [ deprecated? ] } 1||
46 [ clear-deprecation-note ] [
47 dup def>> uses [ deprecated? ] filter
48 [ clear-deprecation-note ] [ >array deprecation-note ] if-empty
52 M: deprecated-usages summary
53 drop "Deprecated words used" ;
55 M: deprecated-usages error.
56 "The definition of " write
58 " uses these deprecated words:" write nl
59 usages>> [ " " write pprint nl ] each ;
61 SINGLETON: deprecation-observer
63 : initialize-deprecation-notes ( -- )
65 get-crossref [ drop deprecated? ] assoc-filter
66 values [ keys [ check-deprecations ] each ] each
69 M: deprecation-observer definitions-changed
70 drop keys [ word? ] filter
71 dup [ deprecated? ] filter empty?
72 [ [ check-deprecations ] each ]
73 [ drop initialize-deprecation-notes ] if ;
75 [ \ deprecation-observer add-definition-observer ]
76 "tools.deprecation" add-startup-hook
78 initialize-deprecation-notes