aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorDmitry Jemerov <yole@jetbrains.com>2017-02-24 14:23:29 +0100
committerDmitry Jemerov <yole@jetbrains.com>2017-02-24 14:23:29 +0100
commit004fc0c4eaf9d1ecaa78cf97f7d0fb2e91405031 (patch)
treec1d8e719e91cfd2bb6755d26e30a81aa0f6a84a5 /core
parent5b90b573476f63366a5253280f5be5d68ac08a6d (diff)
parent64c8f35c00fcf483da76451b276e750533fbe9a4 (diff)
downloaddokka-004fc0c4eaf9d1ecaa78cf97f7d0fb2e91405031.tar.gz
dokka-004fc0c4eaf9d1ecaa78cf97f7d0fb2e91405031.tar.bz2
dokka-004fc0c4eaf9d1ecaa78cf97f7d0fb2e91405031.zip
Merge branch 'website-samples'
Diffstat (limited to 'core')
-rw-r--r--core/src/main/kotlin/Formats/KotlinWebsiteFormatService.kt2
-rw-r--r--core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt7
-rw-r--r--core/src/main/kotlin/Samples/KotlinWebsiteSampleProcessingService.kt14
-rw-r--r--core/src/test/kotlin/format/KotlinWebSiteRunnableSamplesFormatTest.kt4
-rw-r--r--core/src/test/kotlin/model/CommentTest.kt3
-rw-r--r--core/testdata/format/website-samples/dropImport.md1
-rw-r--r--core/testdata/format/website-samples/newLinesInSamples.kt19
-rw-r--r--core/testdata/format/website-samples/newLinesInSamples.md31
-rw-r--r--core/testdata/format/website-samples/sample.md1
-rw-r--r--core/testdata/format/website-samples/sampleWithAsserts.md1
10 files changed, 69 insertions, 14 deletions
diff --git a/core/src/main/kotlin/Formats/KotlinWebsiteFormatService.kt b/core/src/main/kotlin/Formats/KotlinWebsiteFormatService.kt
index b1e3ff91..7ebc5f09 100644
--- a/core/src/main/kotlin/Formats/KotlinWebsiteFormatService.kt
+++ b/core/src/main/kotlin/Formats/KotlinWebsiteFormatService.kt
@@ -169,7 +169,7 @@ class KotlinWebsiteRunnableSamplesOutputBuilder(to: StringBuilder,
div(to, "sample", true) {
appendBlockCode(language) {
imports()
- wrap("\nfun main(args: Array<String>) {", "}") {
+ wrap("\n\nfun main(args: Array<String>) {", "}") {
wrap("\n//sampleStart\n", "\n//sampleEnd\n", body)
}
}
diff --git a/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt b/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt
index e6539135..1eb0c114 100644
--- a/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt
+++ b/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt
@@ -42,10 +42,9 @@ open class DefaultSampleProcessingService
return ContentBlockSampleCode().apply { append(ContentText("//Source not found: $functionName")) }
}
- val text = processSampleBody(psiElement)
-
- val lines = text.trimEnd().split("\n".toRegex()).toTypedArray().filterNot(String::isEmpty)
- val indent = lines.map { it.takeWhile(Char::isWhitespace).count() }.min() ?: 0
+ val text = processSampleBody(psiElement).trim { it == '\n' || it == '\r' }.trimEnd()
+ val lines = text.split("\n")
+ val indent = lines.filter(String::isNotBlank).map { it.takeWhile(Char::isWhitespace).count() }.min() ?: 0
val finalText = lines.map { it.drop(indent) }.joinToString("\n")
return ContentBlockSampleCode(importsBlock = processImports(psiElement)).apply { append(ContentText(finalText)) }
diff --git a/core/src/main/kotlin/Samples/KotlinWebsiteSampleProcessingService.kt b/core/src/main/kotlin/Samples/KotlinWebsiteSampleProcessingService.kt
index baf44904..864033f0 100644
--- a/core/src/main/kotlin/Samples/KotlinWebsiteSampleProcessingService.kt
+++ b/core/src/main/kotlin/Samples/KotlinWebsiteSampleProcessingService.kt
@@ -2,6 +2,7 @@ package org.jetbrains.dokka.Samples
import com.google.inject.Inject
import com.intellij.psi.PsiElement
+import com.intellij.psi.impl.source.tree.LeafPsiElement
import org.jetbrains.dokka.*
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.ImportPath
@@ -12,7 +13,7 @@ open class KotlinWebsiteSampleProcessingService
resolutionFacade: DokkaResolutionFacade)
: DefaultSampleProcessingService(options, logger, resolutionFacade) {
- private class SampleBuilder() : KtVisitorVoid() {
+ private class SampleBuilder : KtTreeVisitorVoid() {
val builder = StringBuilder()
val text: String
get() = builder.toString()
@@ -48,13 +49,10 @@ open class KotlinWebsiteSampleProcessingService
}
}
- override fun visitElement(element: PsiElement?) {
- if (element != null) {
- if (element.children.isEmpty())
- builder.append(element.text)
- else
- element.acceptChildren(this)
- }
+ override fun visitElement(element: PsiElement) {
+ if (element is LeafPsiElement)
+ builder.append(element.text)
+ super.visitElement(element)
}
}
diff --git a/core/src/test/kotlin/format/KotlinWebSiteRunnableSamplesFormatTest.kt b/core/src/test/kotlin/format/KotlinWebSiteRunnableSamplesFormatTest.kt
index ca38c604..3e46ead7 100644
--- a/core/src/test/kotlin/format/KotlinWebSiteRunnableSamplesFormatTest.kt
+++ b/core/src/test/kotlin/format/KotlinWebSiteRunnableSamplesFormatTest.kt
@@ -20,6 +20,10 @@ class KotlinWebSiteRunnableSamplesFormatTest {
verifyKWSNodeByName("sampleWithAsserts", "a")
}
+ @Test fun newLinesInSamples() {
+ verifyKWSNodeByName("newLinesInSamples", "foo")
+ }
+
private fun verifyKWSNodeByName(fileName: String, name: String) {
verifyOutput("testdata/format/website-samples/$fileName.kt", ".md", format = "kotlin-website-samples") { model, output ->
kwsService.createOutputBuilder(output, tempLocation).appendNodes(model.members.single().members.filter { it.name == name })
diff --git a/core/src/test/kotlin/model/CommentTest.kt b/core/src/test/kotlin/model/CommentTest.kt
index 25fea48d..0d919128 100644
--- a/core/src/test/kotlin/model/CommentTest.kt
+++ b/core/src/test/kotlin/model/CommentTest.kt
@@ -153,7 +153,8 @@ line two""", toTestString())
with(model.members.single().members.first()) {
assertEquals("Summary", content.summary.toTestString())
with (content.description) {
- assertEqualsIgnoringSeparators("""[code lang=kotlin]
+ assertEqualsIgnoringSeparators("""
+ |[code lang=kotlin]
|if (true) {
| println(property)
|}
diff --git a/core/testdata/format/website-samples/dropImport.md b/core/testdata/format/website-samples/dropImport.md
index 13c8fb79..1e05678b 100644
--- a/core/testdata/format/website-samples/dropImport.md
+++ b/core/testdata/format/website-samples/dropImport.md
@@ -12,6 +12,7 @@ layout: api
``` kotlin
import some.*
+
fun main(args: Array<String>) {
//sampleStart
diff --git a/core/testdata/format/website-samples/newLinesInSamples.kt b/core/testdata/format/website-samples/newLinesInSamples.kt
new file mode 100644
index 00000000..ee49aefc
--- /dev/null
+++ b/core/testdata/format/website-samples/newLinesInSamples.kt
@@ -0,0 +1,19 @@
+fun groupBySample() {
+ val words = listOf("a", "abc", "ab", "def", "abcd")
+ val byLength = words.groupBy { it.length }
+
+ assertPrints(byLength.keys, "[1, 3, 2, 4]")
+ assertPrints(byLength.values, "[[a], [abc, def], [ab], [abcd]]")
+
+ val mutableByLength: MutableMap<Int, MutableList<String>> = words.groupByTo(mutableMapOf()) { it.length }
+ // same content as in byLength map, but the map is mutable
+ assertTrue(mutableByLength == byLength)
+}
+
+
+/**
+ * @sample groupBySample
+ */
+fun foo() {
+
+} \ No newline at end of file
diff --git a/core/testdata/format/website-samples/newLinesInSamples.md b/core/testdata/format/website-samples/newLinesInSamples.md
new file mode 100644
index 00000000..5344b983
--- /dev/null
+++ b/core/testdata/format/website-samples/newLinesInSamples.md
@@ -0,0 +1,31 @@
+---
+title: foo - test
+layout: api
+---
+
+<div class='api-docs-breadcrumbs'><a href="test/index">test</a> / <a href="test/foo">foo</a></div>
+
+# foo
+
+<div class="signature"><code><span class="keyword">fun </span><span class="identifier">foo</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><span class="identifier">Unit</span></code></div>
+<div class="sample" markdown="1">
+
+``` kotlin
+
+
+fun main(args: Array<String>) {
+//sampleStart
+val words = listOf("a", "abc", "ab", "def", "abcd")
+val byLength = words.groupBy { it.length }
+
+println(byLength.keys) // [1, 3, 2, 4]
+println(byLength.values) // [[a], [abc, def], [ab], [abcd]]
+
+val mutableByLength: MutableMap<Int, MutableList<String>> = words.groupByTo(mutableMapOf()) { it.length }
+// same content as in byLength map, but the map is mutable
+println("mutableByLength == byLength is ${mutableByLength == byLength}") // true
+//sampleEnd
+}
+```
+
+</div>
diff --git a/core/testdata/format/website-samples/sample.md b/core/testdata/format/website-samples/sample.md
index 203f1b02..b29075a7 100644
--- a/core/testdata/format/website-samples/sample.md
+++ b/core/testdata/format/website-samples/sample.md
@@ -18,6 +18,7 @@ applied to each element and returns a map where each group key is associated wit
``` kotlin
+
fun main(args: Array<String>) {
//sampleStart
if (true) {
diff --git a/core/testdata/format/website-samples/sampleWithAsserts.md b/core/testdata/format/website-samples/sampleWithAsserts.md
index 98d7df33..c114468a 100644
--- a/core/testdata/format/website-samples/sampleWithAsserts.md
+++ b/core/testdata/format/website-samples/sampleWithAsserts.md
@@ -12,6 +12,7 @@ layout: api
``` kotlin
+
fun main(args: Array<String>) {
//sampleStart
println(a()) // Hello, Work