]> gitweb.factorcode.org Git - factor.git/blob - extra/fuel/fuel.factor
6e847cf6251b308d15d8d7ae78f9098d54d0d28c
[factor.git] / extra / fuel / fuel.factor
1 ! Copyright (C) 2008, 2009 Jose Antonio Ortega Ruiz.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs compiler.units continuations fuel.eval
4 fuel.help fuel.xref help.topics io.pathnames kernel namespaces parser
5 parser.notes sequences tools.scaffold vocabs vocabs.files
6 vocabs.hierarchy vocabs.loader vocabs.metadata vocabs.parser words ;
7 IN: fuel
8
9 ! Evaluation
10
11 : fuel-eval-restartable ( -- )
12     t eval-res-flag set-global ; inline
13
14 : fuel-eval-non-restartable ( -- )
15     f eval-res-flag set-global ; inline
16
17 : fuel-eval-in-context ( lines in usings -- )
18     eval-in-context ;
19
20 : fuel-eval-set-result ( obj -- )
21     clone eval-result set-global ; inline
22
23 : fuel-retort ( -- ) f f "" send-retort ; inline
24
25 ! Loading files
26
27 <PRIVATE
28
29 SYMBOL: :uses
30 SYMBOL: :uses-suggestions
31
32 : is-use-restart? ( restart -- ? )
33     name>> [ "Use the " head? ] [ " vocabulary" tail? ] bi and ;
34
35 : get-restart-vocab ( restart -- vocab/f )
36     obj>> dup word? [ vocabulary>> ] [ drop f ] if ;
37
38 : is-suggested-restart? ( restart -- ? )
39     dup is-use-restart? [
40         get-restart-vocab :uses-suggestions get member?
41     ] [ drop f ] if ;
42
43 : try-suggested-restarts ( -- )
44     restarts get [ is-suggested-restart? ] filter
45     dup length 1 = [ first continue-restart ] [ drop ] if ;
46
47 : set-use-hook ( -- )
48     [ manifest get auto-used>> clone :uses prefix fuel-eval-set-result ]
49     print-use-hook set ;
50
51 : get-uses ( lines -- )
52     [
53         parser-quiet? on
54         parse-fresh drop
55     ] curry with-compilation-unit ; inline
56
57 PRIVATE>
58
59 : fuel-use-suggested-vocabs ( ..a suggestions quot: ( ..a -- ..b ) -- ..b )
60     [ :uses-suggestions set ] dip
61     [ try-suggested-restarts rethrow ] recover ; inline
62
63 : fuel-run-file ( path -- )
64     [ set-use-hook run-file ] curry with-scope ; inline
65
66 : fuel-with-autouse ( ..a quot: ( ..a -- ..b ) -- ..b )
67     [ set-use-hook call ] curry with-scope ; inline
68
69 : fuel-get-uses ( lines -- )
70     [ get-uses ] curry fuel-with-autouse ;
71
72 ! Edit locations
73
74 : fuel-get-word-location ( word -- )
75     word-location fuel-eval-set-result ;
76
77 : fuel-get-vocab-location ( vocab -- )
78     vocab-location fuel-eval-set-result ;
79
80 : fuel-get-doc-location ( word -- )
81     doc-location fuel-eval-set-result ;
82
83 : fuel-get-article-location ( name -- )
84     article-location fuel-eval-set-result ;
85
86 : fuel-get-vocabs ( -- )
87     all-disk-vocab-names fuel-eval-set-result ;
88
89 : fuel-get-vocabs/prefix ( prefix -- )
90     get-vocabs/prefix fuel-eval-set-result ;
91
92 : fuel-get-words ( prefix names -- )
93     get-vocabs-words/prefix fuel-eval-set-result ;
94
95 ! Cross-references
96
97 : fuel-callers-xref ( word -- ) callers-xref fuel-eval-set-result ;
98
99 : fuel-callees-xref ( word -- ) callees-xref fuel-eval-set-result ;
100
101 : fuel-apropos-xref ( str -- ) apropos-xref fuel-eval-set-result ;
102
103 : fuel-vocab-xref ( vocab -- ) vocab-xref fuel-eval-set-result ;
104
105 : fuel-vocab-uses-xref ( vocab -- ) vocab-uses-xref fuel-eval-set-result ;
106
107 : fuel-vocab-usage-xref ( vocab -- ) vocab-usage-xref fuel-eval-set-result ;
108
109 ! Help support
110
111 : fuel-get-article ( name -- ) fuel.help:get-article fuel-eval-set-result ;
112
113 : fuel-get-article-title ( name -- )
114     articles get at [ article-title ] [ f ] if* fuel-eval-set-result ;
115
116 : fuel-word-help ( name -- ) word-help fuel-eval-set-result ;
117
118 : fuel-word-def ( name -- ) word-def fuel-eval-set-result ;
119
120 : fuel-vocab-help ( name -- ) fuel.help:vocab-help fuel-eval-set-result ;
121
122 : fuel-word-synopsis ( word -- ) word-synopsis fuel-eval-set-result ;
123
124 : fuel-vocab-summary ( name -- )
125     fuel.help:vocab-summary fuel-eval-set-result ;
126
127 : fuel-index ( quot -- ) call( -- seq ) format-index fuel-eval-set-result ;
128
129 : fuel-get-vocabs/tag ( tag -- )
130     get-vocabs/tag fuel-eval-set-result ;
131
132 : fuel-get-vocabs/author ( author -- )
133     get-vocabs/author fuel-eval-set-result ;
134
135 ! Scaffold support
136
137 : scaffold-name ( devname -- )
138     [ developer-name set ] when* ;
139
140 : fuel-scaffold-vocab ( root name devname -- )
141     [ scaffold-name dup [ scaffold-vocab ] dip ] with-scope
142     dup require vocab-source-path absolute-path fuel-eval-set-result ;
143
144 : fuel-scaffold-help ( name devname -- )
145     [ scaffold-name dup require dup scaffold-docs ] with-scope
146     vocab-docs-path absolute-path fuel-eval-set-result ;
147
148 : fuel-scaffold-tests ( name devname -- )
149     [ scaffold-name dup require dup scaffold-tests ] with-scope
150     vocab-tests-file absolute-path fuel-eval-set-result ;
151
152 : fuel-scaffold-authors ( name devname -- )
153     [ scaffold-name dup require dup scaffold-authors ] with-scope
154     [ vocab-authors-path ] keep swap vocab-append-path absolute-path fuel-eval-set-result ;
155
156 : fuel-scaffold-tags ( name tags -- )
157     [ scaffold-tags ]
158     [
159         drop [ vocab-tags-path ] keep swap
160         vocab-append-path absolute-path fuel-eval-set-result
161     ] 2bi ;
162
163 : fuel-scaffold-summary ( name summary -- )
164     [ scaffold-summary ]
165     [
166         drop [ vocab-summary-path ] keep swap
167         vocab-append-path absolute-path fuel-eval-set-result
168     ] 2bi ;
169
170 : fuel-scaffold-platforms ( name platforms -- )
171     [ scaffold-platforms ]
172     [
173         drop [ vocab-platforms-path ] keep swap
174         vocab-append-path absolute-path fuel-eval-set-result
175     ] 2bi ;
176
177 : fuel-scaffold-get-root ( name -- ) find-vocab-root fuel-eval-set-result ;