2016-10-26 7 views
2

Ich versuche, benutzerdefinierte Tags in Jsdoc 3.4.2 zu erstellen. Die config.json Datei isterstellen benutzerdefinierte Tags mit Jsdoc

{ 
    "tags": { 
     "allowUnknownTags": true, 
     "dictionaries": ["jsdoc","closure"] 
    }, 

    "source": { 
     "include": [ 
      "app/" 
      ], 
     "exclude": [], 
     "includePattern": ".+\\.js(doc|x)?$", 
     "excludePattern": "(^|\\/|\\\\)_" 
    }, 
    "plugins": [ 
     "plugins/custom-tags.js" 
     ], 
    "templates": { 
     "cleverLinks": false, 
     "monospaceLinks": false 
    }, 
    "opts": { 
     "destination": "./docs", 
     "recurse": true, 
     "encoding": "utf8" 
    } 
} 

Im custom-tags.js i hinzugefügt haben diese Zeilen

exports.defineTags = function (dictionary) { 
    dictionary.defineTag("service", { 
     mustHaveValue: true, 
     canHaveType: false, 
     canHaveName: true, 
     onTagged: function (doclet, tag) { 
      doclet.service = tag.value; 
     } 
    }); 
}; 

Aber wenn ich die @Service im Code verwendet, wird nicht angezeigt. Ich hatte einen Link gesucht, der sich auf dieses Thema bezieht, und herausgefunden, dass wir benutzerdefinierte Tags erstellen müssen, aber keine Möglichkeit gefunden haben, ein solches zu erstellen. Ich hatte jsdoc global auf meinem Windows-Rechner installiert.

Antwort

3

Sie haben Recht, es gibt einen zweistufigen Prozess.

  • Zuerst definieren Sie einen Tag für jsdoc im Code zu finden und aktualisieren ihr doclet Objekt (wie Sie getan haben)
  • Zweite Sie die Vorlage benötigen, die Sache, die das doclet Objekt in HTML verwandelt, zu wissen, über das neue Eigentum und tue etwas damit.

Wie Sie hatte ich eine harte Zeit zu finden, Anweisungen zum Erstellen von Vorlagen. Das Beste, was ich vorschlagen kann, ist der Jsdoc-Quellcode. Sie müssen eine JavaScript-Datei erstellen, die eine publish-Funktion verfügbar macht. Die publish-Funktion wird dann über das Objekt doclet iterieren, um HTML zu generieren.

Ich hatte das gleiche Bedürfnis wie Sie, aber alles, was ich tun wollte, war, einen neuen Abschnitt (Header und Text vielleicht eine Tabelle von Parametern) zu der bestehenden JSDOC-Vorlage hinzuzufügen. Ich wollte nicht wirklich eine ganz neue Vorlage erstellen, deshalb habe ich meine Tags so definiert, dass sie am Ende HTML-Code an die doclet.description-Eigenschaft anfügen oder vorhängen. Arbeitete für mich.

exports.defineTags = function(dictionary) { 
    dictionary.defineTag('routeparam', { 
     mustHaveValue: true, 
     mustNotHaveDescription: false, 
     canHaveType: true, 
     canHaveName: true, 
     onTagged: function(doclet, tag) { 
      if (!doclet.routeparams) { 
       doclet.routeparams = []; 
      } 

      doclet.routeparams.push({ 
       'name': tag.value.name, 
       'type': tag.value.type ? (tag.value.type.names.length === 1 ? tag.value.type.names[0] : tag.value.type.names) : '', 
       'description': tag.value.description || '', 
      }); 
     } 
    }); 
}; 

exports.handlers = { 
    newDoclet: function(e) { 
    const parameters = e.doclet.routeparams; 
    if (parameters) { 
     const table = tableBuilder.build('Route Parameters', parameters); 

     e.doclet.description = `${e.doclet.description} 
           ${table}`; 
    } 
    } 
} 

Fühlen Sie sich frei meine Repo zu überprüfen, um zu sehen, wie ich es tat https://github.com/bvanderlaan/jsdoc-route-plugin

+0

Ich wurde in diese suchen - es gibt eine kleine Dokumentation ist Vorlagen hier für die Erstellung von: https://github.com/jsdoc3/ jsdoc/Baum/Meister/Vorlagen – Vineet