 e89f2f4b7b
			
		
	
	e89f2f4b7b
	
	
	
		
			
			Created 10 detailed GitHub issues covering: - Project activation and management UI (#1-2) - Worker node coordination and visualization (#3-4) - Automated GitHub repository scanning (#5) - Intelligent model-to-issue matching (#6) - Multi-model task execution system (#7) - N8N workflow integration (#8) - Hive-Bzzz P2P bridge (#9) - Peer assistance protocol (#10) Each issue includes detailed specifications, acceptance criteria, technical implementation notes, and dependency mapping. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env node
 | |
| 
 | |
| // This script converts for and do-while loops into equivalent while loops.
 | |
| // Note that for-in statements are left unmodified, as they do not have a
 | |
| // simple analogy to while loops. Also note that labeled continue statements
 | |
| // are not correctly handled at this point, and will trigger an assertion
 | |
| // failure if encountered.
 | |
| 
 | |
| var assert = require("assert");
 | |
| var recast = require("recast");
 | |
| var types = recast.types;
 | |
| var n = types.namedTypes;
 | |
| var b = types.builders;
 | |
| 
 | |
| recast.run(function(ast, callback) {
 | |
|     recast.visit(ast, {
 | |
|         visitForStatement: function(path) {
 | |
|             var fst = path.node;
 | |
| 
 | |
|             path.replace(
 | |
|                 fst.init,
 | |
|                 b.whileStatement(
 | |
|                     fst.test,
 | |
|                     insertBeforeLoopback(fst, fst.update)
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             this.traverse(path);
 | |
|         },
 | |
| 
 | |
|         visitDoWhileStatement: function(path) {
 | |
|             var dwst = path.node;
 | |
|             return b.whileStatement(
 | |
|                 b.literal(true),
 | |
|                 insertBeforeLoopback(
 | |
|                     dwst,
 | |
|                     b.ifStatement(
 | |
|                         dwst.test,
 | |
|                         b.breakStatement()
 | |
|                     )
 | |
|                 )
 | |
|             );
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     callback(ast);
 | |
| });
 | |
| 
 | |
| function insertBeforeLoopback(loop, toInsert) {
 | |
|     var body = loop.body;
 | |
| 
 | |
|     if (!n.Statement.check(toInsert)) {
 | |
|         toInsert = b.expressionStatement(toInsert);
 | |
|     }
 | |
| 
 | |
|     if (n.BlockStatement.check(body)) {
 | |
|         body.body.push(toInsert);
 | |
|     } else {
 | |
|         body = b.blockStatement([body, toInsert]);
 | |
|         loop.body = body;
 | |
|     }
 | |
| 
 | |
|     recast.visit(body, {
 | |
|         visitContinueStatement: function(path) {
 | |
|             var cst = path.node;
 | |
| 
 | |
|             assert.equal(
 | |
|                 cst.label, null,
 | |
|                 "Labeled continue statements are not yet supported."
 | |
|             );
 | |
| 
 | |
|             path.replace(toInsert, path.node);
 | |
|             return false;
 | |
|         },
 | |
| 
 | |
|         // Do not descend into nested loops.
 | |
|         visitWhileStatement: function() {},
 | |
|         visitForStatement: function() {},
 | |
|         visitForInStatement: function() {},
 | |
|         visitDoWhileStatement: function() {}
 | |
|     });
 | |
| 
 | |
|     return body;
 | |
| }
 |