KDoc link parsing rewrite.

Support qualified names immediately after tag (@see or @param). Detect whether a tag is followed by a reference immediately while lexing, remove TEXT_OR_LINK token type. Remove duplicate nested KDocLink nodes from the PSI structure.
This commit is contained in:
Dmitry Jemerov
2015-02-06 12:48:20 +01:00
parent cc5edc332d
commit 70cf3e9c60
21 changed files with 250 additions and 205 deletions
+10 -12
View File
@@ -7,12 +7,11 @@ JetFile: Markdown.kt
KDOC_SECTION
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('WikiLink')
PsiElement(RBRACKET)(']')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('WikiLink')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
@@ -21,12 +20,11 @@ JetFile: Markdown.kt
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' [')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('DoubleQuotedLink')
PsiElement(RBRACKET)(']')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('DoubleQuotedLink')
PsiElement(RBRACKET)(']')
PsiElement(KDOC_TEXT)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
@@ -7,51 +7,48 @@ JetFile: MarkdownLinkWithError.kt
KDOC_SECTION
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
KDOC_NAME
KDOC_NAME
KDOC_NAME
PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('B')
PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('C')
PsiErrorElement:Closing bracket expected
<empty list>
PsiElement(RANGE)('..')
PsiElement(IDENTIFIER)('B')
PsiElement(DOT)('.')
PsiElement(RBRACKET)(']')
PsiElement(IDENTIFIER)('C')
PsiErrorElement:Closing bracket expected
<empty list>
PsiElement(RANGE)('..')
PsiElement(DOT)('.')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' [....]')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('A')
PsiErrorElement:Closing bracket expected
<empty list>
PsiElement(RANGE)('..')
PsiElement(IDENTIFIER)('B')
PsiElement(RANGE)('..')
PsiElement(IDENTIFIER)('C')
PsiElement(RBRACKET)(']')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('A')
PsiErrorElement:Closing bracket expected
<empty list>
PsiElement(RANGE)('..')
PsiElement(IDENTIFIER)('B')
PsiElement(RANGE)('..')
PsiElement(IDENTIFIER)('C')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.')
PsiErrorElement:Identifier expected
<empty list>
PsiElement(RBRACKET)(']')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.')
PsiErrorElement:Identifier expected
<empty list>
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
@@ -7,42 +7,39 @@ JetFile: MarkdownQualifiedName.kt
KDOC_SECTION
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
KDOC_NAME
KDOC_NAME
KDOC_NAME
PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('B')
PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('C')
PsiElement(RBRACKET)(']')
PsiElement(IDENTIFIER)('B')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('C')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' [')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
KDOC_NAME
KDOC_NAME
PsiElement(IDENTIFIER)('System')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('out')
PsiElement(RBRACKET)(']')
PsiElement(IDENTIFIER)('System')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('out')
PsiElement(RBRACKET)(']')
PsiElement(KDOC_TEXT)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
KDOC_NAME
KDOC_NAME
PsiElement(IDENTIFIER)('System')
PsiElement(DOT)('.')
PsiElement(in)('in')
PsiElement(RBRACKET)(']')
PsiElement(IDENTIFIER)('System')
PsiElement(DOT)('.')
PsiElement(in)('in')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
+2 -2
View File
@@ -10,9 +10,9 @@ JetFile: ParamTag.kt
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@param')
PsiWhiteSpace(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
KDOC_NAME
PsiElement(KDOC_TEXT_OR_LINK)('a')
PsiElement(IDENTIFIER)('a')
PsiElement(KDOC_TEXT)(' The description of a.')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
@@ -8,8 +8,8 @@ JetFile: ParamTagAtStart.kt
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@param')
PsiWhiteSpace(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
KDOC_NAME
PsiElement(KDOC_TEXT_OR_LINK)('a')
PsiElement(IDENTIFIER)('a')
PsiElement(KDOC_TEXT)(' this is a ')
PsiElement(KDOC_END)('*/')
@@ -10,19 +10,17 @@ JetFile: ReturnWithBrackets.kt
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@return')
PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT_OR_LINK)('This')
PsiElement(KDOC_TEXT)(' is not a reference')
PsiElement(KDOC_TEXT)('This is not a reference')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@return')
KDOC_LINK
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACKET)(']')
KDOC_MARKDOWN_LINK
PsiElement(LBRACKET)('[')
KDOC_NAME
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACKET)(']')
PsiElement(KDOC_TEXT)(' This is a reference')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
+5 -6
View File
@@ -13,9 +13,9 @@ JetFile: Sections.kt
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@param')
PsiWhiteSpace(' ')
KDOC_LINK
KDOC_MARKDOWN_LINK
KDOC_NAME
PsiElement(KDOC_TEXT_OR_LINK)('T')
PsiElement(IDENTIFIER)('T')
PsiElement(KDOC_TEXT)(' a type parameter.')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
@@ -24,17 +24,16 @@ JetFile: Sections.kt
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.')
PsiElement(KDOC_TEXT)('This 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
KDOC_MARKDOWN_LINK
KDOC_NAME
PsiElement(KDOC_TEXT_OR_LINK)('a')
PsiElement(IDENTIFIER)('a')
PsiElement(KDOC_TEXT)(' a constructor parameter.')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
+3
View File
@@ -0,0 +1,3 @@
/**
* @see Foo.bar
*/
+20
View File
@@ -0,0 +1,20 @@
JetFile: SeeLink.kt
PACKAGE_DIRECTIVE
<empty list>
KDoc
PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ')
KDOC_SECTION
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@see')
PsiWhiteSpace(' ')
KDOC_MARKDOWN_LINK
KDOC_NAME
KDOC_NAME
PsiElement(IDENTIFIER)('Foo')
PsiElement(DOT)('.')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
+2 -3
View File
@@ -10,14 +10,13 @@ JetFile: TwoTags.kt
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@author')
PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT_OR_LINK)('Dmitry')
PsiElement(KDOC_TEXT)(' Jemerov')
PsiElement(KDOC_TEXT)('Dmitry Jemerov')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
KDOC_TAG
PsiElement(KDOC_TAG_NAME)('@since')
PsiWhiteSpace(' ')
PsiElement(KDOC_TEXT_OR_LINK)('M12')
PsiElement(KDOC_TEXT)('M12')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')