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:
@@ -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)('*/')
|
||||
@@ -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)('*/')
|
||||
@@ -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)('*/')
|
||||
@@ -0,0 +1,3 @@
|
||||
/**
|
||||
* @see Foo.bar
|
||||
*/
|
||||
@@ -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)('*/')
|
||||
@@ -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)('*/')
|
||||
Reference in New Issue
Block a user