From 7d35316d9547cefb7423570bd01f285027fb493b Mon Sep 17 00:00:00 2001 From: Yoshinori Isogai Date: Mon, 22 Aug 2016 20:08:44 +0900 Subject: [PATCH] KT-4519 Show first line with content of block comment when collapsed (#928) --- .../kotlin/idea/KotlinFoldingBuilder.kt | 20 +++++++++++++++++-- .../folding/checkCollapse/headerKDoc.kt | 4 ++-- .../checkCollapse/headerMultilineComment.kt | 4 ++-- .../folding/noCollapse/kdocComments.kt | 4 ++-- .../folding/noCollapse/multilineComments.kt | 3 ++- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt index 0997ecd840d..54fc805f522 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinFoldingBuilder.kt @@ -97,12 +97,28 @@ class KotlinFoldingBuilder : CustomFoldingBuilder(), DumbAware { } override fun getLanguagePlaceholderText(node: ASTNode, range: TextRange): String = when { - node.elementType == KtTokens.BLOCK_COMMENT -> "/.../" - node.elementType == KDocTokens.KDOC -> "/**...*/" + node.elementType == KtTokens.BLOCK_COMMENT -> "/${getFirstLineOfComment(node)}.../" + node.elementType == KDocTokens.KDOC -> "/**${getFirstLineOfComment(node)}...*/" node.psi is KtImportList -> "..." else -> "{...}" } + private fun getFirstLineOfComment(node: ASTNode): String { + val targetCommentLine = node.text.split("\n").firstOrNull { + getCommentContents(it).isNotEmpty() + } ?: return "" + return " ${getCommentContents(targetCommentLine)} " + } + + private fun getCommentContents(line: String): String { + return line.trim() + .replace("/**", "") + .replace("/*", "") + .replace("*/", "") + .replace("*", "") + .trim() + } + override fun isRegionCollapsedByDefault(node: ASTNode): Boolean { val settings = JavaCodeFoldingSettings.getInstance() diff --git a/idea/testData/folding/checkCollapse/headerKDoc.kt b/idea/testData/folding/checkCollapse/headerKDoc.kt index 68730fd38c1..c715e6471a9 100644 --- a/idea/testData/folding/checkCollapse/headerKDoc.kt +++ b/idea/testData/folding/checkCollapse/headerKDoc.kt @@ -1,9 +1,9 @@ -/** +/** * Some header kdoc */ package some -/** +/** * Other */ diff --git a/idea/testData/folding/checkCollapse/headerMultilineComment.kt b/idea/testData/folding/checkCollapse/headerMultilineComment.kt index b89b0cc9e3a..17df1e909e9 100644 --- a/idea/testData/folding/checkCollapse/headerMultilineComment.kt +++ b/idea/testData/folding/checkCollapse/headerMultilineComment.kt @@ -1,10 +1,10 @@ -/* +/* * Some header */ val a = 12 -/* +/* * Other */ diff --git a/idea/testData/folding/noCollapse/kdocComments.kt b/idea/testData/folding/noCollapse/kdocComments.kt index fa10d6117f7..4f8e7cbc094 100644 --- a/idea/testData/folding/noCollapse/kdocComments.kt +++ b/idea/testData/folding/noCollapse/kdocComments.kt @@ -1,9 +1,9 @@ -/** +/** * Kdoc licence */ package some -/** +/** * Some Kdoc comment */ class A \ No newline at end of file diff --git a/idea/testData/folding/noCollapse/multilineComments.kt b/idea/testData/folding/noCollapse/multilineComments.kt index 846fb05f63d..efa6cdbedaa 100644 --- a/idea/testData/folding/noCollapse/multilineComments.kt +++ b/idea/testData/folding/noCollapse/multilineComments.kt @@ -1,4 +1,5 @@ -/* +/* * Some multiline comment + * And more comment */ class A \ No newline at end of file