introduce the concept of sections

This commit is contained in:
Dmitry Jemerov
2015-01-20 12:29:44 +01:00
parent f3763bc2b5
commit c3a496b9a2
29 changed files with 288 additions and 137 deletions
@@ -17,9 +17,11 @@
package org.jetbrains.kotlin.kdoc.parser; package org.jetbrains.kotlin.kdoc.parser;
import org.jetbrains.kotlin.kdoc.psi.impl.KDocLink; import org.jetbrains.kotlin.kdoc.psi.impl.KDocLink;
import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection;
import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag; import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag;
public class KDocElementTypes { public class KDocElementTypes {
public static final KDocElementType KDOC_SECTION = new KDocElementType("KDOC_SECTION", KDocSection.class);
public static final KDocElementType KDOC_TAG = new KDocElementType("KDOC_TAG", KDocTag.class); public static final KDocElementType KDOC_TAG = new KDocElementType("KDOC_TAG", KDocTag.class);
public static final KDocElementType KDOC_LINK = new KDocElementType("KDOC_LINK", KDocLink.class); public static final KDocElementType KDOC_LINK = new KDocElementType("KDOC_LINK", KDocLink.class);
} }
@@ -17,24 +17,32 @@
package org.jetbrains.kotlin.kdoc.parser; package org.jetbrains.kotlin.kdoc.parser;
public enum KDocKnownTag { public enum KDocKnownTag {
AUTHOR(false), AUTHOR(false, false),
THROWS(true), THROWS(true, false),
EXCEPTION(true), EXCEPTION(true, false),
PARAM(true), PARAM(true, false),
RETURN(false), RETURN(false, false),
SEE(false), SEE(false, false),
SINCE(false); SINCE(false, false),
CONSTRUCTOR(false, true),
PROPERTY(true, true);
private final boolean takesReference; private final boolean takesReference;
private final boolean startsSection;
KDocKnownTag(boolean takesReference) { KDocKnownTag(boolean takesReference, boolean startsSection) {
this.takesReference = takesReference; this.takesReference = takesReference;
this.startsSection = startsSection;
} }
public boolean isReferenceRequired() { public boolean isReferenceRequired() {
return takesReference; return takesReference;
} }
public boolean isSectionStart() {
return startsSection;
}
public static KDocKnownTag findByTagName(String tagName) { public static KDocKnownTag findByTagName(String tagName) {
if (tagName.startsWith("@")) { if (tagName.startsWith("@")) {
try { try {
@@ -28,30 +28,48 @@ public class KDocParser implements PsiParser {
@NotNull @NotNull
public ASTNode parse(IElementType root, PsiBuilder builder) { public ASTNode parse(IElementType root, PsiBuilder builder) {
PsiBuilder.Marker rootMarker = builder.mark(); PsiBuilder.Marker rootMarker = builder.mark();
if (builder.getTokenType() == KDocTokens.START) {
builder.advanceLexer();
}
PsiBuilder.Marker currentSectionMarker = builder.mark();
// todo: parse KDoc tags, markdown, etc... // todo: parse KDoc tags, markdown, etc...
while (!builder.eof()) { while (!builder.eof()) {
if (builder.getTokenType() == KDocTokens.TAG_NAME) { if (builder.getTokenType() == KDocTokens.TAG_NAME) {
parseTag(builder); currentSectionMarker = parseTag(builder, currentSectionMarker);
} }
else if (builder.getTokenType() == KDocTokens.MARKDOWN_LINK) { else if (builder.getTokenType() == KDocTokens.MARKDOWN_LINK) {
PsiBuilder.Marker linkStart = builder.mark(); PsiBuilder.Marker linkStart = builder.mark();
builder.advanceLexer(); builder.advanceLexer();
linkStart.done(KDocElementTypes.KDOC_LINK); linkStart.done(KDocElementTypes.KDOC_LINK);
} }
else if (builder.getTokenType() == KDocTokens.END) {
if (currentSectionMarker != null) {
currentSectionMarker.done(KDocElementTypes.KDOC_SECTION);
currentSectionMarker = null;
}
builder.advanceLexer();
}
else { else {
builder.advanceLexer(); builder.advanceLexer();
} }
} }
if (currentSectionMarker != null) {
currentSectionMarker.done(KDocElementTypes.KDOC_SECTION);
}
rootMarker.done(root); rootMarker.done(root);
return builder.getTreeBuilt(); return builder.getTreeBuilt();
} }
private static void parseTag(PsiBuilder builder) { private static PsiBuilder.Marker parseTag(PsiBuilder builder, PsiBuilder.Marker currentSectionMarker) {
PsiBuilder.Marker tagStart = builder.mark();
String tagName = builder.getTokenText(); String tagName = builder.getTokenText();
KDocKnownTag knownTag = KDocKnownTag.findByTagName(tagName); KDocKnownTag knownTag = KDocKnownTag.findByTagName(tagName);
if (knownTag != null && knownTag.isSectionStart()) {
currentSectionMarker.done(KDocElementTypes.KDOC_SECTION);
currentSectionMarker = builder.mark();
}
PsiBuilder.Marker tagStart = builder.mark();
builder.advanceLexer(); builder.advanceLexer();
if (knownTag != null && knownTag.isReferenceRequired() && builder.getTokenType() == KDocTokens.TEXT_OR_LINK) { if (knownTag != null && knownTag.isReferenceRequired() && builder.getTokenType() == KDocTokens.TEXT_OR_LINK) {
@@ -71,6 +89,7 @@ public class KDocParser implements PsiParser {
} }
} }
tagStart.done(KDocElementTypes.KDOC_TAG); tagStart.done(KDocElementTypes.KDOC_TAG);
return currentSectionMarker;
} }
private static boolean isAtEndOfTag(PsiBuilder builder) { private static boolean isAtEndOfTag(PsiBuilder builder) {
@@ -0,0 +1,32 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.kdoc.psi.impl;
import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
/**
* The part of a doc comment which describes a single class, method or property
* produced by the element being documented. For example, the doc comment of a class
* can have sections for the class itself, its primary constructor and each of the
* properties defined in the primary constructor.
*/
public class KDocSection extends KDocElementImpl {
public KDocSection(@NotNull ASTNode node) {
super(node);
}
}
+9 -5
View File
@@ -64,8 +64,9 @@ JetFile: CommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for A') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for A')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
@@ -128,7 +129,8 @@ JetFile: CommentsBinding.kt
PROPERTY PROPERTY
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' v2 doc comment ') KDOC_SECTION
PsiElement(KDOC_TEXT)(' v2 doc comment ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(val)('val') PsiElement(val)('val')
@@ -356,7 +358,8 @@ JetFile: CommentsBinding.kt
ENUM_ENTRY ENUM_ENTRY
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' This is B ') KDOC_SECTION
PsiElement(KDOC_TEXT)(' This is B ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OBJECT_DECLARATION_NAME OBJECT_DECLARATION_NAME
@@ -371,7 +374,8 @@ JetFile: CommentsBinding.kt
ENUM_ENTRY ENUM_ENTRY
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' This is X ') KDOC_SECTION
PsiElement(KDOC_TEXT)(' This is X ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
OBJECT_DECLARATION_NAME OBJECT_DECLARATION_NAME
@@ -18,8 +18,9 @@ JetFile: DocCommentAfterFileAnnotations.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
@@ -5,8 +5,9 @@ JetFile: DocCommentForFirstDeclaration.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
@@ -12,7 +12,8 @@ JetFile: DocCommentOnPackageDirectiveLine.kt
FUN FUN
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' some ') KDOC_SECTION
PsiElement(KDOC_TEXT)(' some ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(fun)('fun') PsiElement(fun)('fun')
+25 -16
View File
@@ -5,8 +5,9 @@ JetFile: DocCommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for A') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for A')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
@@ -22,8 +23,9 @@ JetFile: DocCommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for val-parameter') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for val-parameter')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
@@ -47,8 +49,9 @@ JetFile: DocCommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for function') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for function')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
@@ -66,8 +69,9 @@ JetFile: DocCommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for local function') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for local function')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
@@ -87,8 +91,9 @@ JetFile: DocCommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for local class') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for local class')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
@@ -102,8 +107,9 @@ JetFile: DocCommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for property') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for property')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
@@ -120,7 +126,8 @@ JetFile: DocCommentsBinding.kt
PROPERTY_ACCESSOR PROPERTY_ACCESSOR
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' Doc comment for getter ') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for getter ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(get)('get') PsiElement(get)('get')
@@ -135,7 +142,8 @@ JetFile: DocCommentsBinding.kt
PROPERTY_ACCESSOR PROPERTY_ACCESSOR
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' Doc comment for setter ') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for setter ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(set)('set') PsiElement(set)('set')
@@ -155,8 +163,9 @@ JetFile: DocCommentsBinding.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' Doc comment for B') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Doc comment for B')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
+4 -1
View File
@@ -27,7 +27,8 @@ JetFile: EOLsInComments.kt
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' ') KDOC_SECTION
PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PREFIX_EXPRESSION PREFIX_EXPRESSION
OPERATION_REFERENCE OPERATION_REFERENCE
@@ -78,6 +79,8 @@ JetFile: EOLsInComments.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
KDOC_SECTION
<empty list>
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
+8 -4
View File
@@ -34,6 +34,8 @@ JetFile: NestedComments.kt
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
KDOC_SECTION
<empty list>
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -41,7 +43,8 @@ JetFile: NestedComments.kt
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' /***/') KDOC_SECTION
PsiElement(KDOC_TEXT)(' /***/')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -49,9 +52,10 @@ JetFile: NestedComments.kt
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' /**') KDOC_SECTION
PsiWhiteSpace('\n\n') PsiElement(KDOC_TEXT)(' /**')
PsiElement(KDOC_TEXT)('*/') PsiWhiteSpace('\n\n')
PsiElement(KDOC_TEXT)('*/')
PsiElement(KDOC_END)('***/') PsiElement(KDOC_END)('***/')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -5,7 +5,8 @@ JetFile: MutableArray.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)('These declarations are "shallow" in the sense that they are not really compiled, only the type-checker uses them') KDOC_SECTION
PsiElement(KDOC_TEXT)('These declarations are "shallow" in the sense that they are not really compiled, only the type-checker uses them')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
+10 -9
View File
@@ -4,15 +4,16 @@ JetFile: AtTags.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' ')
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@tag')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' text @notATag') PsiElement(KDOC_TEXT)(' ')
PsiWhiteSpace('\n ') KDOC_TAG
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiElement(KDOC_TAG_NAME)('@tag')
PsiElement(KDOC_TEXT)(' @') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' text @notATag')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' @')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
@@ -3,3 +3,5 @@ JetFile: DocCommentAtBeginningOfFile1.kt
<empty list> <empty list>
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
KDOC_SECTION
<empty list>
@@ -4,4 +4,5 @@ JetFile: DocCommentAtBeginningOfFile2.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(KDOC_TEXT)('/**') KDOC_SECTION
PsiElement(KDOC_TEXT)('/**')
@@ -4,4 +4,5 @@ JetFile: DocCommentAtBeginningOfFile3.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
PsiElement(KDOC_TEXT)('fooo') KDOC_SECTION
PsiElement(KDOC_TEXT)('fooo')
@@ -4,6 +4,7 @@ JetFile: DocCommentAtBeginningOfFile4.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
PsiElement(KDOC_TEXT)('/**foo*/') KDOC_SECTION
PsiWhiteSpace('\n\n') PsiElement(KDOC_TEXT)('/**foo*/')
PsiElement(KDOC_TEXT)('asdfas') PsiWhiteSpace('\n\n')
PsiElement(KDOC_TEXT)('asdfas')
@@ -4,4 +4,6 @@ JetFile: EndOnLeadingAsterisks.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
KDOC_SECTION
<empty list>
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
@@ -3,5 +3,6 @@ JetFile: EndRightAfterText.kt
<empty list> <empty list>
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)('text') KDOC_SECTION
PsiElement(KDOC_TEXT)('text')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
+2 -1
View File
@@ -4,4 +4,5 @@ JetFile: Incomplete.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)('contents') KDOC_SECTION
PsiElement(KDOC_TEXT)('contents')
+22 -21
View File
@@ -4,26 +4,27 @@ JetFile: Markdown.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' ') PsiElement(KDOC_LEADING_ASTERISK)('*')
KDOC_LINK PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_MARKDOWN_LINK)('[WikiLink]') KDOC_LINK
PsiWhiteSpace('\n ') PsiElement(KDOC_MARKDOWN_LINK)('[WikiLink]')
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' ') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\[') PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_TEXT)('NotALink]') PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\[')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)('NotALink]')
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' [') PsiElement(KDOC_LEADING_ASTERISK)('*')
KDOC_LINK PsiElement(KDOC_TEXT)(' [')
PsiElement(KDOC_MARKDOWN_LINK)('[DoubleQuotedLink]') KDOC_LINK
PsiElement(KDOC_TEXT)(']') PsiElement(KDOC_MARKDOWN_LINK)('[DoubleQuotedLink]')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)(']')
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' Just ') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\[') PsiElement(KDOC_TEXT)(' Just ')
PsiElement(KDOC_TEXT)(' and ') PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\[')
PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\]') PsiElement(KDOC_TEXT)(' and ')
PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\]')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
+9 -8
View File
@@ -4,13 +4,14 @@ JetFile: ParamTag.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' ') PsiElement(KDOC_LEADING_ASTERISK)('*')
KDOC_TAG PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_TAG_NAME)('@param') KDOC_TAG
PsiWhiteSpace(' ') PsiElement(KDOC_TAG_NAME)('@param')
KDOC_LINK PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT_OR_LINK)('a') KDOC_LINK
PsiElement(KDOC_TEXT)(' The description of a.') PsiElement(KDOC_TEXT_OR_LINK)('a')
PsiElement(KDOC_TEXT)(' The description of a.')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
@@ -4,20 +4,21 @@ JetFile: ReturnWithBrackets.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' ') PsiElement(KDOC_LEADING_ASTERISK)('*')
KDOC_TAG PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_TAG_NAME)('@return') KDOC_TAG
PsiWhiteSpace(' ') PsiElement(KDOC_TAG_NAME)('@return')
PsiElement(KDOC_TEXT_OR_LINK)('This') PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT)(' is not a reference') PsiElement(KDOC_TEXT_OR_LINK)('This')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)(' is not a reference')
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' ') PsiElement(KDOC_LEADING_ASTERISK)('*')
KDOC_TAG PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_TAG_NAME)('@return') KDOC_TAG
KDOC_LINK PsiElement(KDOC_TAG_NAME)('@return')
PsiElement(KDOC_MARKDOWN_LINK)('[x]') KDOC_LINK
PsiElement(KDOC_TEXT)(' This is a reference') PsiElement(KDOC_MARKDOWN_LINK)('[x]')
PsiElement(KDOC_TEXT)(' This is a reference')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
+6
View File
@@ -0,0 +1,6 @@
/**
* This is the doc comment for a class.
* @param T a type parameter.
* @constructor This is the doc comment for the primary constructor.
* @param a a constructor parameter.
*/
+38
View File
@@ -0,0 +1,38 @@
JetFile: Sections.kt
PACKAGE_DIRECTIVE
<empty list>
KDoc
PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ')
KDOC_SECTION
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' This is the doc comment for a class.')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@param')
PsiWhiteSpace(' ')
KDOC_LINK
PsiElement(KDOC_TEXT_OR_LINK)('T')
PsiElement(KDOC_TEXT)(' a type parameter.')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_SECTION
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@constructor')
PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT_OR_LINK)('This')
PsiElement(KDOC_TEXT)(' is the doc comment for the primary constructor.')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@param')
PsiWhiteSpace(' ')
KDOC_LINK
PsiElement(KDOC_TEXT_OR_LINK)('a')
PsiElement(KDOC_TEXT)(' a constructor parameter.')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
+18 -17
View File
@@ -3,21 +3,22 @@ JetFile: Simple.kt
<empty list> <empty list>
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiElement(KDOC_TEXT)(' line 0') KDOC_SECTION
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)(' line 0')
PsiElement(KDOC_TEXT)('line 1 //') PsiWhiteSpace('\n ')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)('line 1 //')
PsiElement(KDOC_LEADING_ASTERISK)('**') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' line 2 /*') PsiElement(KDOC_LEADING_ASTERISK)('**')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)(' line 2 /*')
PsiElement(KDOC_TEXT)('line 3 /**') PsiWhiteSpace('\n ')
PsiWhiteSpace('\n') PsiElement(KDOC_TEXT)('line 3 /**')
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiWhiteSpace('\n')
PsiElement(KDOC_TEXT)(' line * 4') PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)(' line * 4')
PsiElement(KDOC_LEADING_ASTERISK)('***') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' line */ 5') PsiElement(KDOC_LEADING_ASTERISK)('***')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)(' line */ 5')
PsiElement(KDOC_LEADING_ASTERISK)('**') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' line 6 ') PsiElement(KDOC_LEADING_ASTERISK)('**')
PsiElement(KDOC_TEXT)(' line 6 ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
@@ -4,7 +4,8 @@ JetFile: TextRightAfterLeadAsterisks.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(KDOC_LEADING_ASTERISK)('**') KDOC_SECTION
PsiElement(KDOC_TEXT)('test') PsiElement(KDOC_LEADING_ASTERISK)('**')
PsiElement(KDOC_TEXT)('test')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
+15 -14
View File
@@ -4,19 +4,20 @@ JetFile: TwoTags.kt
KDoc KDoc
PsiElement(KDOC_START)('/**') PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*') KDOC_SECTION
PsiElement(KDOC_TEXT)(' ') PsiElement(KDOC_LEADING_ASTERISK)('*')
KDOC_TAG PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_TAG_NAME)('@author') KDOC_TAG
PsiWhiteSpace(' ') PsiElement(KDOC_TAG_NAME)('@author')
PsiElement(KDOC_TEXT_OR_LINK)('Dmitry') PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT)(' Jemerov') PsiElement(KDOC_TEXT_OR_LINK)('Dmitry')
PsiWhiteSpace('\n ') PsiElement(KDOC_TEXT)(' Jemerov')
PsiElement(KDOC_LEADING_ASTERISK)('*') PsiWhiteSpace('\n ')
PsiElement(KDOC_TEXT)(' ') PsiElement(KDOC_LEADING_ASTERISK)('*')
KDOC_TAG PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_TAG_NAME)('@since') KDOC_TAG
PsiWhiteSpace(' ') PsiElement(KDOC_TAG_NAME)('@since')
PsiElement(KDOC_TEXT_OR_LINK)('M12') PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT_OR_LINK)('M12')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/') PsiElement(KDOC_END)('*/')
@@ -1097,6 +1097,12 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest {
doParsingTest(fileName); doParsingTest(fileName);
} }
@TestMetadata("Sections.kt")
public void testSections() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/kdoc/Sections.kt");
doParsingTest(fileName);
}
@TestMetadata("Simple.kt") @TestMetadata("Simple.kt")
public void testSimple() throws Exception { public void testSimple() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/kdoc/Simple.kt"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/kdoc/Simple.kt");