continuations eval hashtables help.markup interpolate io
io.directories io.encodings.utf8 io.files io.pathnames
io.streams.string kernel math math.parser namespaces prettyprint
-quotations sequences sequences.extras sets sorting splitting
-strings system timers unicode urls vocabs vocabs.loader
-vocabs.metadata words words.symbol ;
+quotations sequences sets sorting splitting strings system
+timers unicode urls vocabs vocabs.loader vocabs.metadata words
+words.symbol ;
IN: tools.scaffold
SYMBOL: developer-name
".factor-roots" scaffold-rc ;
: make-unit-test ( answer code -- str )
- [
- prepend-lines-with-spaces
- "{\n" "\n}" surround
- ] [
- prepend-lines-with-spaces
- "[\n" "\n] unit-test\n" surround
- ] bi* " " glue ;
+ split-lines [ " " prepend ] map "\n" join
+ "[\n" "\n] unit-test\n" surround
+ " " glue ;
+
+: run-string ( string -- datastack )
+ parse-string V{ } clone swap with-datastack ; inline
: scaffold-unit-test ( -- str/f )
read-contents dup "" = [
drop f
] [
- [ eval( -- x ) unparse ] keep make-unit-test
+ [ run-string unparse ] keep
+ make-unit-test
] if ;
: scaffold-unit-tests ( -- str )
- [ scaffold-unit-test ] loop>array "\n\n" join ;
+ [ scaffold-unit-test dup ] [ ] produce nip "\n\n" join ;
HOOK: scaffold-emacs os ( -- )