Fix #6894 - debugging generator
authorAlan Knowles <alan@roojs.com>
Tue, 27 Jul 2021 03:55:08 +0000 (11:55 +0800)
committerAlan Knowles <alan@roojs.com>
Tue, 27 Jul 2021 03:55:08 +0000 (11:55 +0800)
roojspacker/DocBuilder.vala
roojspacker/DocComment.vala
roojspacker/DocTag.vala
roojspacker/PackerRun.vala
roojspacker/Symbol.vala
roojspacker/SymbolSet.vala

index eb31e26..76b71ce 100644 (file)
@@ -34,6 +34,53 @@ namespace JSDOC
                     
                    // this currently uses the concept of publish.js...
                    
+                   if (PackerRun.singleton().opt_doc_dump_tree) {
+                   
+                   
+                       var symbols = this.symbolSet.values();
+                   
+                                
+                               
+                        
+                               //print(JSON.stringify(symbols,null,4));
+                               var classes = new Gee.ArrayList<Symbol>();
+                               
+                               foreach(var symbol in symbols) {
+                                       if (symbol.isaClass()) { 
+                                               classes.add(symbol);
+                                       }
+                               }    
+                               classes.sort( (a,b) => {
+                                       return a.alias.collate(b.alias); 
+                               });
+                   
+                       var jsonAll = new Json.Object(); 
+                               for (var i = 0, l = classes.size; i < l; i++) {
+                                   var symbol = classes.get(i);
+                                        
+                                   jsonAll.set_object_member(symbol.alias,  this.publishJSON(symbol));
+
+                               }
+                               
+                               var generator = new Json.Generator ();
+                           var root = new Json.Node(Json.NodeType.OBJECT);
+                  
+                               root.init_object(jsonAll);
+                               generator.set_root (root);
+                               generator.pretty=  true;
+                               generator.indent = 2;
+                                
+                               size_t l;
+                               stdout.printf("%s\n",generator.to_data(out l));
+
+                               return;
+                       }
+                       size_t l;
+                       //GLib.debug("JSON: %s", generator.to_data(out l));
+                   
+                   
+                   
+                   
                    this.publish();
         
         
index e89ae76..9a05d9e 100644 (file)
@@ -193,7 +193,22 @@ namespace JSDOC
                        }
                        }
                        return string.joinv("\n", ret);
-           }   
+           }
+           
+           public Json.Object toJson()
+               {
+                       var ret = new Json.Object();
+                       ret.set_string_member("src", this.src);
+                       var ar = new Json.Array();
+                       foreach(var a in this.tags) {
+                               ar.add_object_element(a.toJson());
+                       }
+                       ret.set_array_member("tags", ar);
+                       ret.set_boolean_member("isUserComment", this.isUserComment);                    
+                       ret.set_boolean_member("hasTags", this.hasTags);                                                
+                       return ret;
+               }
+       
        }
 }
 
index e68e742..4074807 100644 (file)
@@ -77,8 +77,23 @@ namespace JSDOC
                        );
                }
        
-                        
+               public Json.Object toJson()
+               {
+                       var ret = new Json.Object();
+                       ret.set_string_member("title", this.title.to_string());
+                       ret.set_string_member("type", this.type);
+                       ret.set_string_member("name", this.name);
+                       ret.set_string_member("defaultValue", this.defaultValue);
+                       ret.set_string_member("desc", this.desc);
+                       ret.set_string_member("memberOf", this.memberOf);
+                       ret.set_boolean_member("isOptional", this.isOptional);
+                       var ar = new Json.Array();
+                       foreach(var ov in this.optvalues) {
+                               ar.add_string_element(ov);
+                       }
+                       ret.set_array_member("optvalues", ar);
+                       return ret;
+               }
        
        
                public DocTag (string in_src)
index 1ff926f..9445994 100644 (file)
@@ -44,12 +44,13 @@ namespace JSDOC
                public  string opt_doc_target = null;
                public  string opt_doc_template_dir = null;
                public  bool opt_doc_include_private = false;           
+               public  bool opt_doc_dump_tree = false;
                                
                [CCode (array_length = false, array_null_terminated = true)]
                private string[]? opt_files = null;
                [CCode (array_length = false, array_null_terminated = true)]
                private  string[]? opt_files_from = null;
-               
+                
                
                public  bool opt_debug = false;
                
@@ -235,7 +236,7 @@ namespace JSDOC
                                        flags = 0,
                                        arg =  OptionArg.STRING,
                                        arg_data = &opt_doc_target,
-                                       description = "Target location for documetnation",
+                                       description = "Target location for documentation",
                                        arg_description = null
                                }, 
 
@@ -250,6 +251,16 @@ namespace JSDOC
                                },                      
 
 
+                               OptionEntry() {
+                                       long_name = "doc-dump-tree",
+                                       short_name = 'E',
+                                       flags = 0,
+                                       arg =  OptionArg.NONE,
+                                       arg_data = &opt_doc_dump_tree,
+                                       description = "Dump the documenation json tree",
+                                       arg_description = null
+                               }, 
+                               
                                OptionEntry() {
                                        long_name = "doc-private",
                                        short_name = 'P',
index 216f512..2422900 100644 (file)
@@ -41,8 +41,7 @@ namespace JSDOC {
                }
                
       
-        string defaultValue = "";
-        
+        string defaultValue = "";        
                private Gee.ArrayList<DocTag> private_doctag_params = null;
 
                private Gee.ArrayList<DocTag> private_params{
@@ -105,7 +104,7 @@ namespace JSDOC {
         public DocComment comment;
                 
         //$args : [], // original arguments used when constructing.
-        string addOn = "";
+        //string addOn = "";
         public string alias = "";
         
         string author = "";
@@ -885,6 +884,98 @@ namespace JSDOC {
                        return ret;
                
                }
+               public Json.Array stringArrayToJson( Gee.ArrayList<string> ar) 
+               {
+                       var ret = new Json.Array();
+                       foreach(var a in ar) {
+                               ret.add_string_element(a);
+                       }
+                       return ret;
+               
+               }
+               public Json.Array symbolArrayToJson( Gee.ArrayList<Symbol> ar) 
+               {
+                       var ret = new Json.Array();
+                       foreach(var a in ar) {
+                               ret.add_object_element(a.toJson());
+                       }
+                       return ret;
+               
+               }
+               public Json.Array docTagsArrayToJson( Gee.ArrayList<DocTag> ar) 
+               {
+                       var ret = new Json.Array();
+                       foreach(var a in ar) {
+                               ret.add_object_element(a.toJson());
+                       }
+                       return ret;
+               
+               } 
+               
+               
+               
+               public Json.Object assocDocTagToJson( Gee.HashMap<string,DocTag> ar) 
+               {
+                       var ret = new Json.Object();
+                       foreach(var a in ar.keys) {
+                               ret.set_object_member(a, ar.get(a).toJson());
+                       }
+                       return ret;
+               
+               } 
+               
+               
+               public Json.Object toJson()
+               {
+                       var ret = new Json.Object();
+                       ret.set_string_member("name", this.name);
+                       ret.set_array_member("params", this.docTagsArrayToJson(this.params));
+
+                       ret.set_array_member("augments", this.stringArrayToJson(this.augments));
+                       ret.set_array_member("exceptions", this.docTagsArrayToJson(this.exceptions));
+                       ret.set_array_member("methods", this.symbolArrayToJson(this.methods));
+                       ret.set_array_member("properties", this.symbolArrayToJson(this.properties));
+                       ret.set_array_member("requires", this.stringArrayToJson(this.requires));
+                       ret.set_array_member("returns", this.docTagsArrayToJson(this.returns));
+                       ret.set_array_member("see", this.stringArrayToJson(this.see));
+                       ret.set_array_member("childClasses", this.stringArrayToJson(this.childClasses));
+                       ret.set_array_member("inheritsFrom", this.stringArrayToJson(this.inheritsFrom));
+                       ret.set_object_member("cfgs", this.assocDocTagToJson(this.cfgs));
+                       ret.set_object_member("comment", this.comment.toJson());
+                     //$args : [], // original arguments used when constructing.
+                       ret.set_string_member("alias", this.alias);
+        
+                       ret.set_string_member("author", this.author);
+                       ret.set_string_member("classDesc" , this.classDesc);
+                       ret.set_string_member("deprecated", this.deprecated);
+                       ret.set_string_member("desc", this.desc);
+                       //events : false,
+                       ret.set_string_member("example", this.example);
+                       
+                       ret.set_string_member("isa", this.isa);
+
+                       ret.set_boolean_member("isEvent", this.isEvent);
+                       ret.set_boolean_member("isConstant", this.isConstant);
+                       ret.set_boolean_member("isIgnored", this.isIgnored);
+                       ret.set_boolean_member("isInner", this.isInner);
+                       ret.set_boolean_member("isNamespace", this.isNamespace);
+                       ret.set_boolean_member("isPrivate", this.isPrivate);
+                       ret.set_boolean_member("isStatic", this.isStatic);
+                       ret.set_string_member("memberOf", this.memberOf);
+                       return ret;
+               }
+               
+               
+               
+               
+               
+               
+               
+               
+               
+               
        }
  
        
index 3e944f5..bf82b2a 100644 (file)
@@ -5,6 +5,17 @@ namespace JSDOC {
 
                private Gee.HashMap<string,Symbol> __index = null;
                
+               
+               public Json.Object toJson()
+               {
+                       var ret = new Json.Object();
+                        foreach(var k in this._index.keys) {
+               ret.set_object_member(k, this._index.get(k).toJson());
+               }
+               return ret;
+               }
+               
+               
                public Gee.HashMap<string,Symbol> _index {
                        get {
                                if (this.__index == null) {