| 
									
										
										
										
											2008-06-28 03:36:20 -04:00
										 |  |  | ! Copyright (C) 2006, 2008 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2008-09-01 05:15:01 -04:00
										 |  |  | USING: fry accessors sequences parser kernel help help.markup | 
					
						
							| 
									
										
										
										
											2008-09-10 21:07:00 -04:00
										 |  |  | help.topics words strings classes tools.vocabs namespaces make | 
					
						
							|  |  |  | io io.streams.string prettyprint definitions arrays vectors | 
					
						
							| 
									
										
										
										
											2008-08-15 00:35:35 -04:00
										 |  |  | combinators combinators.short-circuit splitting debugger | 
					
						
							|  |  |  | hashtables sorting effects vocabs vocabs.loader assocs editors | 
					
						
							|  |  |  | continuations classes.predicate macros math sets eval ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: help.lint | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : check-example ( element -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-26 03:01:43 -04:00
										 |  |  |     rest [ | 
					
						
							| 
									
										
										
										
											2008-05-07 02:38:34 -04:00
										 |  |  |         but-last "\n" join 1vector
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         [ | 
					
						
							|  |  |  |             use [ clone ] change
 | 
					
						
							|  |  |  |             [ eval>string ] with-datastack
 | 
					
						
							|  |  |  |         ] with-scope peek "\n" ?tail drop
 | 
					
						
							|  |  |  |     ] keep
 | 
					
						
							|  |  |  |     peek assert= ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : check-examples ( word element -- )
 | 
					
						
							|  |  |  |     nip \ $example swap elements [ check-example ] each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : extract-values ( element -- seq )
 | 
					
						
							|  |  |  |     \ $values swap elements dup empty? [ | 
					
						
							| 
									
										
										
										
											2008-04-26 03:01:43 -04:00
										 |  |  |         first rest [ first ] map prune natural-sort | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] unless ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : effect-values ( word -- seq )
 | 
					
						
							| 
									
										
										
										
											2008-06-28 03:36:20 -04:00
										 |  |  |     stack-effect | 
					
						
							|  |  |  |     [ in>> ] [ out>> ] bi append
 | 
					
						
							| 
									
										
										
										
											2008-07-20 02:13:53 -04:00
										 |  |  |     [ dup pair? [ first ] when effect>string ] map
 | 
					
						
							| 
									
										
										
										
											2008-06-28 03:36:20 -04:00
										 |  |  |     prune natural-sort ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | : contains-funky-elements? ( element -- ? )
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         $shuffle | 
					
						
							|  |  |  |         $values-x/y | 
					
						
							|  |  |  |         $predicate | 
					
						
							|  |  |  |         $class-description | 
					
						
							|  |  |  |         $error-description | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:40 -04:00
										 |  |  |     } swap '[ _ elements empty? not ] contains? ;
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : check-values ( word element -- )
 | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-08-15 00:35:35 -04:00
										 |  |  |         [ drop "declared-effect" word-prop not ] | 
					
						
							|  |  |  |         [ nip contains-funky-elements? ] | 
					
						
							|  |  |  |         [ drop macro? ] | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  |         [ | 
					
						
							| 
									
										
										
										
											2008-06-11 03:58:38 -04:00
										 |  |  |             [ effect-values >array ] | 
					
						
							|  |  |  |             [ extract-values >array ] | 
					
						
							| 
									
										
										
										
											2008-08-15 00:35:35 -04:00
										 |  |  |             bi* =
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  |         ] | 
					
						
							| 
									
										
										
										
											2008-08-15 00:35:35 -04:00
										 |  |  |     } 2|| [ "$values don't match stack effect" throw ] unless ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : check-see-also ( word element -- )
 | 
					
						
							|  |  |  |     nip \ $see-also swap elements [ | 
					
						
							| 
									
										
										
										
											2008-04-26 03:01:43 -04:00
										 |  |  |         rest dup prune [ length ] bi@ assert=
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : vocab-exists? ( name -- ? )
 | 
					
						
							|  |  |  |     dup vocab swap "all-vocabs" get member? or ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 01:45:49 -04:00
										 |  |  | : check-modules ( element -- )
 | 
					
						
							|  |  |  |     \ $vocab-link swap elements [ | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         second
 | 
					
						
							| 
									
										
										
										
											2008-09-24 01:45:49 -04:00
										 |  |  |         vocab-exists? [ "$vocab-link to non-existent vocabulary" throw ] unless
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : check-rendering ( word element -- )
 | 
					
						
							| 
									
										
										
										
											2008-02-15 23:20:31 -05:00
										 |  |  |     [ help ] with-string-writer drop ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | : all-word-help ( words -- seq )
 | 
					
						
							| 
									
										
										
										
											2008-04-26 00:17:08 -04:00
										 |  |  |     [ word-help ] filter ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:46 -04:00
										 |  |  | TUPLE: help-error topic error ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:46 -04:00
										 |  |  | C: <help-error> help-error | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | M: help-error error. | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:46 -04:00
										 |  |  |     "In " write dup topic>> pprint nl
 | 
					
						
							|  |  |  |     error>> error. ;
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : check-something ( obj quot -- )
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  |     flush [ <help-error> , ] recover ; inline
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : check-word ( word -- )
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  |     dup word-help [ | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             dup word-help [ | 
					
						
							|  |  |  |                 2dup check-examples | 
					
						
							|  |  |  |                 2dup check-values | 
					
						
							|  |  |  |                 2dup check-see-also | 
					
						
							| 
									
										
										
										
											2008-09-24 01:45:49 -04:00
										 |  |  |                 2dup nip check-modules | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  |                 2dup drop check-rendering | 
					
						
							|  |  |  |             ] assert-depth 2drop
 | 
					
						
							|  |  |  |         ] check-something | 
					
						
							|  |  |  |     ] [ drop ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : check-words ( words -- ) [ check-word ] each ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : check-article ( article -- )
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-09-24 01:45:49 -04:00
										 |  |  |         dup article-content [ | 
					
						
							|  |  |  |             2dup check-modules check-rendering | 
					
						
							|  |  |  |         ] assert-depth 2drop
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  |     ] check-something ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 01:45:49 -04:00
										 |  |  | : files>vocabs ( -- assoc )
 | 
					
						
							|  |  |  |     vocabs | 
					
						
							|  |  |  |     [ [ [ vocab-docs-path ] keep ] H{ } map>assoc ] | 
					
						
							|  |  |  |     [ [ [ vocab-source-path ] keep ] H{ } map>assoc ] | 
					
						
							|  |  |  |     bi assoc-union ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  | : group-articles ( -- assoc )
 | 
					
						
							|  |  |  |     articles get keys
 | 
					
						
							| 
									
										
										
										
											2008-09-24 01:45:49 -04:00
										 |  |  |     files>vocabs | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  |     H{ } clone [ | 
					
						
							| 
									
										
										
										
											2008-09-01 05:15:01 -04:00
										 |  |  |         '[ | 
					
						
							|  |  |  |             dup >link where dup
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:40 -04:00
										 |  |  |             [ first _ at _ push-at ] [ 2drop ] if
 | 
					
						
							| 
									
										
										
										
											2008-09-01 05:15:01 -04:00
										 |  |  |         ] each
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  |     ] keep ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:46 -04:00
										 |  |  | : check-about ( vocab -- )
 | 
					
						
							|  |  |  |     [ vocab-help [ article drop ] when* ] check-something ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  | : check-vocab ( vocab -- seq )
 | 
					
						
							|  |  |  |     "Checking " write dup write "..." print
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:46 -04:00
										 |  |  |         [ check-about ] | 
					
						
							|  |  |  |         [ words [ check-word ] each ] | 
					
						
							|  |  |  |         [ "vocab-articles" get at [ check-article ] each ] | 
					
						
							|  |  |  |         tri
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  |     ] { } make ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  | : run-help-lint ( prefix -- alist )
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  |     [ | 
					
						
							|  |  |  |         all-vocabs-seq [ vocab-name ] map "all-vocabs" set
 | 
					
						
							| 
									
										
										
										
											2008-08-31 09:12:27 -04:00
										 |  |  |         group-articles "vocab-articles" set
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  |         child-vocabs | 
					
						
							|  |  |  |         [ dup check-vocab ] { } map>assoc
 | 
					
						
							| 
									
										
										
										
											2008-04-26 00:17:08 -04:00
										 |  |  |         [ nip empty? not ] assoc-filter
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  |     ] with-scope ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : typos. ( assoc -- )
 | 
					
						
							| 
									
										
										
										
											2008-09-06 20:13:59 -04:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  |         "==== ALL CHECKS PASSED" print
 | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             swap vocab-heading. | 
					
						
							|  |  |  |             [ error. nl ] each
 | 
					
						
							|  |  |  |         ] assoc-each
 | 
					
						
							| 
									
										
										
										
											2008-09-06 20:13:59 -04:00
										 |  |  |     ] if-empty ;
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  | : help-lint ( prefix -- ) run-help-lint typos. ;
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  | : help-lint-all ( -- ) "" help-lint ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-11 22:36:40 -05:00
										 |  |  | : unlinked-words ( words -- seq )
 | 
					
						
							| 
									
										
										
										
											2008-04-26 00:17:08 -04:00
										 |  |  |     all-word-help [ article-parent not ] filter ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : linked-undocumented-words ( -- seq )
 | 
					
						
							|  |  |  |     all-words | 
					
						
							| 
									
										
										
										
											2008-04-26 00:17:08 -04:00
										 |  |  |     [ word-help not ] filter
 | 
					
						
							|  |  |  |     [ article-parent ] filter
 | 
					
						
							|  |  |  |     [ "predicating" word-prop not ] filter ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 21:20:30 -05:00
										 |  |  | MAIN: help-lint |