| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent ab5f14e commit a6d733e
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,13 @@ | |||
| 1 | + var generatedData = require('./lib/generated_data'); | ||
| 2 | + var writeApiDocs = require('./lib/write_api_docs'); | ||
| 3 | + var addConvenienceMethods = require('./lib/add_convenience_methods.js'); | ||
| 4 | + | ||
| 5 | + var idefsPath = 'generate/nodegit/generate/output/idefs.json'; | ||
| 6 | + var missingtestsPath = 'generate/nodegit/generate/output/missing-tests.json' | ||
| 7 | + | ||
| 8 | + var baseData = generatedData(idefsPath, missingtestsPath); | ||
| 9 | + var fullData; | ||
| 10 | + | ||
| 11 | + addConvenienceMethods(baseData).then(function(fullData) { | ||
| 12 | + writeApiDocs(fullData); | ||
| 13 | + }); | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,62 @@ | |||
| 1 | + var dox = require('dox'); | ||
| 2 | + var Promise = require('bluebird'); | ||
| 3 | + var fs = require('fs-extra'); | ||
| 4 | + var dive = Promise.promisify(require('dive')); | ||
| 5 | + var changeCase = require('change-case'); | ||
| 6 | + var Path = require('path'); | ||
| 7 | + var setDocDefaults = require('./set_doc_defaults'); | ||
| 8 | + | ||
| 9 | + var addConvenienceMethods = function(apiData) { | ||
| 10 | + return dive('generate/nodegit/lib', {recursive:false}, function(err, path) { | ||
| 11 | + var code = fs.readFileSync(path).toString(); | ||
| 12 | + var className = changeCase.pascalCase(Path.basename(path, '.js')); | ||
| 13 | + dox.parseComments(code, {raw: true}).forEach(function(doc) { | ||
| 14 | + | ||
| 15 | + if (!doc.ctx) return; | ||
| 16 | + | ||
| 17 | + var data = { | ||
| 18 | + params: [], | ||
| 19 | + return: null, | ||
| 20 | + isAsync: false, | ||
| 21 | + description: doc.description.full | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + doc.tags.forEach(function(tag) { | ||
| 25 | + switch(tag.type) { | ||
| 26 | + case 'param': | ||
| 27 | + data.params.push({ | ||
| 28 | + "name": tag.name, | ||
| 29 | + "types": tag.types, | ||
| 30 | + "description": tag.description, | ||
| 31 | + "optional": tag.optional | ||
| 32 | + }); | ||
| 33 | + break; | ||
| 34 | + case 'return': | ||
| 35 | + data.return = { | ||
| 36 | + name: tag.name, | ||
| 37 | + type: tag.types[0], | ||
| 38 | + description: tag.description || null | ||
| 39 | + }; | ||
| 40 | + break; | ||
| 41 | + case 'isAsync': | ||
| 42 | + if (tag.value == 'true') { | ||
| 43 | + data.isAsync = true; | ||
| 44 | + } | ||
| 45 | + break; | ||
| 46 | + } | ||
| 47 | + }); | ||
| 48 | + | ||
| 49 | + if (doc.ctx.constructor == className) { | ||
| 50 | + var obj = setDocDefaults(apiData, className); | ||
| 51 | + apiData[className].prototypes[doc.ctx.name] = data; | ||
| 52 | + } else if (doc.ctx.receiver == className) { | ||
| 53 | + var obj = setDocDefaults(apiData, className); | ||
| 54 | + apiData[className].constructors[doc.ctx.name] = data; | ||
| 55 | + } | ||
| 56 | + }); | ||
| 57 | + }).then(function() { | ||
| 58 | + return apiData; | ||
| 59 | + }); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + module.exports = addConvenienceMethods; | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,102 @@ | |||
| 1 | + var fs = require('fs-extra'); | ||
| 2 | + var setDocDefaults = require('./set_doc_defaults'); | ||
| 3 | + var changeCase = require('change-case'); | ||
| 4 | + | ||
| 5 | + var removePointerReferences = function(text) { | ||
| 6 | + if (!text) return ''; | ||
| 7 | + text = text.replace(/a pointer to /ig, ''); | ||
| 8 | + text = text.replace(/pointer where to store /ig, ''); | ||
| 9 | + return text | ||
| 10 | + } | ||
| 11 | + | ||
| 12 | + var sanitizeArgName = function(className, comment) { | ||
| 13 | + var argName = changeCase.camelCase(className); | ||
| 14 | + if (argName == 'number') { | ||
| 15 | + argName = 'result'; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + return argName; | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + var generatedData = function(path, missingTestsPath) { | ||
| 22 | + var apiData = {}; | ||
| 23 | + var generatedJSON = fs.readJsonSync(path); | ||
| 24 | + | ||
| 25 | + if (missingTestsPath) { | ||
| 26 | + var missingTests = fs.readJsonSync(missingTestsPath); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + generatedJSON.forEach(function(item) { | ||
| 30 | + switch (item.type) { | ||
| 31 | + case 'class': | ||
| 32 | + case 'struct': | ||
| 33 | + var obj = setDocDefaults(apiData, item.jsClassName); | ||
| 34 | + obj.type = item.type | ||
| 35 | + obj.hasConstructor = item.hasConstructor || false | ||
| 36 | + | ||
| 37 | + item.functions.forEach(function(func) { | ||
| 38 | + data = { | ||
| 39 | + params: [], | ||
| 40 | + return: { | ||
| 41 | + type: func.return.jsClassName, | ||
| 42 | + name: sanitizeArgName(func.return.jsClassName, func.return.comment), | ||
| 43 | + description: removePointerReferences(func.return.comment) | ||
| 44 | + }, | ||
| 45 | + isAsync: func.isAsync, | ||
| 46 | + description: "", | ||
| 47 | + experimental: false | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + if (missingTests) { | ||
| 51 | + if (missingTests[item.filename].testFileMissing === false) { | ||
| 52 | + data.experimental = true; | ||
| 53 | + } else { | ||
| 54 | + if (missingTests[item.filename].functions.indexOf(item.jsClassName) != -1) { | ||
| 55 | + data.experimental = true; | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + func.args.forEach(function(arg) { | ||
| 61 | + if (arg.isReturn) { | ||
| 62 | + data.return = { | ||
| 63 | + name: sanitizeArgName(arg.jsClassName, arg.comment), | ||
| 64 | + type: arg.jsClassName, | ||
| 65 | + description: removePointerReferences(arg.comment) | ||
| 66 | + }; | ||
| 67 | + } else if (!arg.ignore && !arg.isSelf) { | ||
| 68 | + data.params.push({ | ||
| 69 | + "name": arg.name, | ||
| 70 | + "types": [arg.jsClassName], | ||
| 71 | + "description": arg.comment, | ||
| 72 | + "optional": arg.isOptional || false | ||
| 73 | + }); | ||
| 74 | + } | ||
| 75 | + }); | ||
| 76 | + | ||
| 77 | + if (func.isPrototypeMethod) { | ||
| 78 | + obj.prototypes[func.jsFunctionName] = data | ||
| 79 | + } else if (func.isConstructorMethod) { | ||
| 80 | + obj.constructors[func.jsFunctionName] = data | ||
| 81 | + } | ||
| 82 | + }); | ||
| 83 | + | ||
| 84 | + item.fields.forEach(function(field) { | ||
| 85 | + obj.fields[field.name] = field.jsClassName; | ||
| 86 | + }); | ||
| 87 | + break; | ||
| 88 | + case 'enum': | ||
| 89 | + obj = setDocDefaults(apiData, item.owner); | ||
| 90 | + | ||
| 91 | + var list = obj.enums[item.JsName] = {} | ||
| 92 | + item.values.forEach(function(value) { | ||
| 93 | + list[value.JsName] = value.value; | ||
| 94 | + }); | ||
| 95 | + break; | ||
| 96 | + } | ||
| 97 | + }); | ||
| 98 | + | ||
| 99 | + return apiData; | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + module.exports = generatedData; | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,14 @@ | |||
| 1 | + var setDocDefaults = function(apiData, className) { | ||
| 2 | + if (!apiData[className]) { | ||
| 3 | + apiData[className] = { | ||
| 4 | + constructors:{}, | ||
| 5 | + prototypes:{}, | ||
| 6 | + fields:{}, | ||
| 7 | + enums:{} | ||
| 8 | + }; | ||
| 9 | + } | ||
| 10 | + | ||
| 11 | + return apiData[className]; | ||
| 12 | + } | ||
| 13 | + | ||
| 14 | + module.exports = setDocDefaults; | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments