Browse Source

Capture function doc strings

Josh Engebretson 11 years ago
parent
commit
4e26ff73e4

+ 3 - 1
Source/Tools/JSBind/JSBFunction.h

@@ -5,6 +5,7 @@
 #include <Atomic/IO/Log.h>
 #include <Atomic/IO/Log.h>
 #include "JSBClass.h"
 #include "JSBClass.h"
 #include "JSBType.h"
 #include "JSBType.h"
+#include "JSBSymbol.h"
 
 
 class JSBFunctionType
 class JSBFunctionType
 {
 {
@@ -63,7 +64,7 @@ public:
 
 
 };
 };
 
 
-class JSBFunction
+class JSBFunction : public JSBSymbol
 {
 {
 public:
 public:
 
 
@@ -72,6 +73,7 @@ public:
     String propertyName_;
     String propertyName_;
     JSBFunctionType* returnType_;
     JSBFunctionType* returnType_;
     Vector<JSBFunctionType*> parameters_;
     Vector<JSBFunctionType*> parameters_;
+    String docString_;
 
 
     bool isConstructor_;
     bool isConstructor_;
     bool isDestructor_;
     bool isDestructor_;

+ 35 - 0
Source/Tools/JSBind/JSBHeaderVisitor.h

@@ -21,6 +21,7 @@ class JSBHeaderVisitor : public SymbolVisitor
     JSBHeader* header_;
     JSBHeader* header_;
     JSBModule* module_;
     JSBModule* module_;
     JSBindings* bindings_;
     JSBindings* bindings_;
+    TranslationUnit* unit_;
 
 
     Namespace* globalNamespace_;
     Namespace* globalNamespace_;
 
 
@@ -28,6 +29,7 @@ public:
 
 
     JSBHeaderVisitor(JSBHeader* header, TranslationUnit *unit, Namespace* globalNamespace) :
     JSBHeaderVisitor(JSBHeader* header, TranslationUnit *unit, Namespace* globalNamespace) :
         header_(header),
         header_(header),
+        unit_(unit),
         globalNamespace_(globalNamespace)
         globalNamespace_(globalNamespace)
     {
     {
         module_ = header_->module_;
         module_ = header_->module_;
@@ -236,6 +238,39 @@ public:
             }
             }
         }
         }
 
 
+        jfunction->sourceLocation_ = function->sourceLocation();
+        jfunction->fileName_ = function->fileName();
+        jfunction->sourceLine_ = function->line();
+        jfunction->sourceColumn_ = function->column();
+        //const Token &token = unit_->tokenAt(function->sourceLocation());
+        //const char* source = unit_->firstSourceChar() + token.byteOffset;
+        const char* comment = NULL;
+        for (unsigned i = 0; i < unit_->commentCount(); i++)
+        {
+            const Token &tcomment = unit_->commentAt(i);
+            unsigned line;
+            unit_->getPosition(tcomment.utf16charOffset, &line);
+
+            if (line ==  function->line() - 1)
+            {
+                comment = unit_->firstSourceChar() + tcomment.byteOffset;
+                break;
+            }
+        }
+
+        if (comment && strlen(comment) > 3)
+        {
+            if (comment[0] == '/' && comment[1] == '/' && comment[2] == '/')
+            {
+                int index = 1;
+                while(comment[index] && comment[index] != '\n' && comment[index] != '\r')
+                    jfunction->docString_ += comment[index++];
+
+            }
+
+        }
+
+
         return jfunction;
         return jfunction;
 
 
     }
     }

+ 3 - 0
Source/Tools/JSBind/JSBTypeScript.cpp

@@ -64,6 +64,9 @@ void JSBTypeScript::ExportFunction(JSBFunction* function)
         scriptName[0] = tolower(scriptName[0]);
         scriptName[0] = tolower(scriptName[0]);
     }
     }
 
 
+    if (function->docString_.Length())
+        source_ += "      " + function->docString_ + "\n";
+
     source_ += "      " + scriptName + "(";
     source_ += "      " + scriptName + "(";
 
 
     for (unsigned i = 0; i < function->parameters_.Size(); i++)
     for (unsigned i = 0; i < function->parameters_.Size(); i++)