Verwendung von @link und @code in kotlin kDoc


76

Ich versuche eine Methode zu dokumentieren und zu verwenden @linkund @codewie in JavaDoc .

Ich weiß, dass es in Kotlin einen kDoc gibt, aber ich kann sie nicht finden oder zumindest etwas Ähnliches.

Antworten:


114

@linkund @codeexistiert nicht in kDoc, kann aber leicht durch Inline-Markup ersetzt werden .

von KotlinDoc Verknüpfen mit Elementen

Inline-Markup

Für Inline-Markups verwendet KDoc die reguläre Markdown- Syntax, die erweitert wurde, um eine Kurzschrift-Syntax für die Verknüpfung mit anderen Elementen im Code zu unterstützen.

Verknüpfen mit Elementen

Um eine Verknüpfung zu einem anderen Element (Klasse, Methode, Eigenschaft oder Parameter) herzustellen, setzen Sie den Namen einfach in eckige Klammern:

Verwenden Sie die Methode [foo]für diesen Zweck.

Wenn Sie eine benutzerdefinierte Bezeichnung für den Link angeben möchten, verwenden Sie die Markdown-Referenzsyntax:

Verwenden Sie [this method][foo]für diesen Zweck. Sie können auch qualifizierte Namen in den Links verwenden. Beachten Sie, dass qualifizierte Namen im Gegensatz zu JavaDoc immer das Punktzeichen verwenden, um die Komponenten zu trennen, noch vor einem Methodennamen:

Verwenden Sie [kotlin.reflect.KClass.properties]diese Option, um die Eigenschaften der Klasse aufzulisten. Namen in Links werden nach denselben Regeln aufgelöst, als ob der Name innerhalb des zu dokumentierenden Elements verwendet worden wäre. Dies bedeutet insbesondere, dass Sie einen Namen, der in die aktuelle Datei importiert wurde, nicht vollständig qualifizieren müssen, wenn Sie ihn in einem KDoc-Kommentar verwenden.

Beachten Sie, dass KDoc keine Syntax zum Auflösen überladener Mitglieder in Links hat. Da das Tool zur Generierung der Kotlin-Dokumentation die Dokumentation für alle Überladungen einer Funktion auf derselben Seite platziert, ist es nicht erforderlich, eine bestimmte überladene Funktion zu identifizieren, damit der Link funktioniert.


12
Für alle anderen, die Schwierigkeiten haben, eine nicht statische Methode aufzulösen, können Sie nicht einfach [class.methodName] ausführen, sondern müssen [full_package_location.methodName] ausführen
hmac

3
@hmac ist korrekt, Sie können jedoch auch den Methodennamen zu Ihren Importen hinzufügen. Die IDE bietet Ihnen nicht die Intellisense-Option, dies für Sie zu tun, aber es funktioniert.
Dave

Sie Sir sind ein Lebensretter @hmac
ericn

Wie gilt das für externe Links?
Desgraci

Ich habe endlich den richtigen Link gefunden, indem ich mit der rechten Maustaste auf den Methodennamen geklickt und die zweite Option "Referenz kopieren" ausgewählt habe. Ich bin nicht sicher, ob es einen Unterschied macht, aber meine Methode war eine statische JVM-Methode innerhalb eines Objekts.
Beyondtheteal

17

Sie können Ihren Code mit Java schreiben und die Klasse in Kotlin konvertieren.

/**
 * @see <a href="http://somelink.com">link</a>
 */
public class Some {
}

wird konvertiert zu

/**
 * @see [link](http://somelink.com)
 */
class Some

Ich habe diese Methode in diesem Kern versucht . Es ist jedoch keine Formatierung für den Link aufgetreten.
Adam Hurwitz

1
Entschuldigung für die späte Antwort. Es scheint, dass Sie ein falsches Dokumentformat hatten. Zum Beispiel sollten Sie Ihre Dokumente mit / ** docs here * / schreiben, nicht nur mit "//", das Sie wahrscheinlich in Ihrer ContentRepository-Datei verwendet haben. Um zu überprüfen, ob alles wie erwartet funktioniert, können Sie das von mir bereitgestellte Beispiel ausprobieren.
Artur Dumchev

Ich habe das Format im Gist über @Artur Dumchev aktualisiert . Ihr Beispiel ist in Java, während mein Beispiel in Kotlin ist, weshalb ich mir das genaue Format nicht sicher bin. Vielen Dank!
Adam Hurwitz

Die Formatierung funktioniert nicht und wir können nicht wie in Java zum Verknüpfen in Kotlin navigieren. @AdamHurwitz konnten Sie es zum Laufen bringen?
SjDev

@SjNerd - Negatory
Adam Hurwitz


10

Die Antwort, die Artur gab, ist im Allgemeinen ein guter Hinweis, aber das Ergebnis ist falsch. Zumindest macht IntelliJ IDEA das Ergebnis nicht deutlich. Das verwendete Markdown-Link-Format []()ist im Hauptkommentartext in Ordnung, jedoch nicht für externe Links im @seeTag. Für diese benötigen Sie die gleiche Syntax wie in Java:

/**
 * Do something.
 *
 * @see <a href="https://stackoverflow.com/q/45195370/2621917">External links in kdoc</a>
 */

7

Ich hatte ein bisschen Probleme damit mit Android Studio 3.5.2 auf dem Mac. Das hat bei mir funktioniert:

/**
* [Your fully-qualified class name.function name]
*/

Wenn ich nicht den vollqualifizierten Namen verwenden würde, würde sich Kdoc beschweren, dass es sich um eine ungelöste Referenz handelt. Was ich nicht herausfinden konnte, ist, wie man den Link selbst tatsächlich benutzt. Dazu müssen Sie die BEFEHLSTASTE (auf dem Mac) gedrückt halten, und dann sind die Links aktiv.


6

Verwenden Sie die Klasse, um auf eine Methode zu verweisen :

/**
 * When the configuration succeeds **[MyCallback.onConfigured]** is called.
 */
class MyClass(myCallback: MyCallback) {

Die Verwendung einer Variablen / eines Parameters funktioniert nicht :

/**
 * When the configuration succeeds **[myCallback.onConfigured]** is called.
 */
class MyClass(myCallback: MyCallback) {

2

Für die @codesollten Sie die Markdown-Syntax verwenden (da KDoc eine erweiterte Version von Markdown ist):

Um einen Codeblock in Markdown zu erstellen, rücken Sie einfach jede Zeile des Blocks um mindestens 4 Leerzeichen oder 1 Tabulator ein.

/**
 * Some code sample:
 * 
 *    Set<String> s;
 *    System.out.println(s);
 */
class Scratch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.