diff options
author | Szymon Świstun <sswistun@virtuslab.com> | 2020-03-16 11:25:20 +0100 |
---|---|---|
committer | Kamil Doległo <kamilok1965@users.noreply.github.com> | 2020-03-18 14:16:44 +0100 |
commit | a1322a1ab11b4395199eb3ca08bfb2349627dcfd (patch) | |
tree | c91fdc99341dfdc0fdafeb9ff68fd474b9b406a6 /plugins | |
parent | f14f20c04bebb6c8a03f7963a3f8a6c0cf992429 (diff) | |
download | dokka-a1322a1ab11b4395199eb3ca08bfb2349627dcfd.tar.gz dokka-a1322a1ab11b4395199eb3ca08bfb2349627dcfd.tar.bz2 dokka-a1322a1ab11b4395199eb3ca08bfb2349627dcfd.zip |
Signatures for functional types
Diffstat (limited to 'plugins')
16 files changed, 589 insertions, 0 deletions
diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt index 8a080bb9..dd99d0cd 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt @@ -71,7 +71,11 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog list(f.parameters) { text(it.name!!) text(": ") + signatureForProjection(it.type) +// val type = it.type +// if (type is KotlinTypeWrapper && type.isFunctionType) funType(type) +// else type(type) } text(")") val returnType = f.type @@ -112,6 +116,26 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog is PrimitiveJavaType -> signatureForProjection(p.translateToKotlin()) } + + fun PageContentBuilder.DocumentableContentBuilder.funType(type: KotlinTypeWrapper) { + if (type.isExtension) { + type(type.arguments.first()) + text(".") + } + + val args = if (type.isExtension) { + type.arguments.drop(1) + } else + type.arguments + + text("(") + args.subList(0, args.size - 1).forEachIndexed { i, arg -> + type(arg) + if (i < args.size - 2) text(", ") + } + text(") -> ") + type(args.last()) + } } private fun PrimitiveJavaType.translateToKotlin() = TypeConstructor( diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/-search.html b/plugins/base/src/test/resources/expect/signatureTest/out/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/-search.html @@ -0,0 +1,23 @@ +<html> + <head> + <title>Search</title> + <link href="styles/style.css" rel="Stylesheet"> + <script type="text/javascript" src="scripts/pages.js" async="async"></script> + <script>var pathToRoot = "";</script> + </head> + <body> + <div id="navigation"> + <div id="searchBar"> + <form action="-search.html" method="get" id="searchForm"><input type="search" name="query"><input type="submit" value="Search"></form> + </div> + <div id="sideMenu"></div> + </div> + <div id="content"> + <h1 id="searchTitle">Search results for </h1> + <table> + <tbody id="searchTable"></tbody> + </table> + </div> + </body> +</html> + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/images/arrow_down.svg b/plugins/base/src/test/resources/expect/signatureTest/out/images/arrow_down.svg new file mode 100644 index 00000000..89e7df47 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/images/arrow_down.svg @@ -0,0 +1,3 @@ +<svg width="10" height="7" viewBox="0 0 10 7" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M9.71824 1.66658L9.01113 0.959473L5.00497 4.96447L1.00008 0.959473L0.292969 1.66658L5.01113 6.38474L9.71824 1.66658Z" fill="#A1AAB4"/> +</svg> diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-icon.svg b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-icon.svg new file mode 100644 index 00000000..1b3b3670 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-icon.svg @@ -0,0 +1,3 @@ +<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M26 26H0V0H26L12.9243 12.9747L26 26Z" fill="#F8873C"/> +</svg> diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-text.svg b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-text.svg new file mode 100644 index 00000000..7bf3e6c5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-text.svg @@ -0,0 +1,6 @@ +<svg width="83" height="27" viewBox="0 0 83 27" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M47.1611 7.6297V25.6345V25.6867H61.8428V21.8039H51.3589V10.3852H61.8428V6.50244H47.1611V7.6297Z" fill="#27282C"/> +<path d="M82.9891 21.8039L72.778 10.3852H82.9051V6.50244H67.0586V10.3852L77.4585 21.8039H67.0586V25.6867H82.9996V21.8039H82.9891Z" fill="#27282C"/> +<path d="M16.2978 7.76556C14.5872 6.46086 12.4463 5.67804 10.1271 5.67804C4.53357 5.67804 0 10.1871 0 15.7503C0 21.3135 4.53357 25.8226 10.1271 25.8226C12.4463 25.8226 14.5872 25.0502 16.2978 23.735V25.7182H20.4955V0H16.2978V7.76556ZM10.1271 21.8041C6.75838 21.8041 4.02984 19.0903 4.02984 15.7399C4.02984 12.3894 6.75838 9.67563 10.1271 9.67563C13.4958 9.67563 16.2243 12.3894 16.2243 15.7399C16.2138 19.0903 13.4853 21.8041 10.1271 21.8041Z" fill="#27282C"/> +<path d="M33.9703 5.86566C28.3768 5.86566 23.8433 10.3747 23.8433 15.9379C23.8433 21.5011 28.3768 26.0102 33.9703 26.0102C39.5638 26.0102 44.0974 21.5011 44.0974 15.9379C44.0974 10.3747 39.5638 5.86566 33.9703 5.86566ZM33.9703 21.9917C30.6016 21.9917 27.8731 19.2779 27.8731 15.9275C27.8731 12.577 30.6016 9.86325 33.9703 9.86325C37.339 9.86325 40.0676 12.577 40.0676 15.9275C40.0676 19.2779 37.339 21.9917 33.9703 21.9917Z" fill="#27282C"/> +</svg> diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/navigation.html b/plugins/base/src/test/resources/expect/signatureTest/out/navigation.html new file mode 100644 index 00000000..da6b4b0a --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/navigation.html @@ -0,0 +1,13 @@ +<div class="sideMenuPart" id="nav-submenu"> + <div class="overview"><a href="root/index.html">root</a><span class="navButton" onclick="document.getElementById("nav-submenu").classList.toggle("hidden");"><span class="navButtonContent"></span></span></div> + <div class="sideMenuPart" id="nav-submenu-0"> + <div class="overview"><a href="root/signatureTest/index.html">signatureTest</a><span class="navButton" onclick="document.getElementById("nav-submenu-0").classList.toggle("hidden");"><span class="navButtonContent"></span></span></div> + <div class="sideMenuPart" id="nav-submenu-0-0"> + <div class="overview"><a href="root/signatureTest/test.html">test</a></div> + </div> + <div class="sideMenuPart" id="nav-submenu-0-1"> + <div class="overview"><a href="root/signatureTest/test2.html">test2</a></div> + </div> + </div> +</div> + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/index.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/index.html new file mode 100644 index 00000000..9b5327ec --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/index.html @@ -0,0 +1,30 @@ +<html> + <head> + <title>root</title> + <link href="../styles/style.css" rel="Stylesheet"> + <script type="text/javascript" src="../scripts/navigationLoader.js" async="async"></script> + <script>var pathToRoot = "../";</script> + </head> + <body> + <div id="navigation"> + <div id="searchBar"> + <form action="../-search.html" method="get" id="searchForm"><input type="search" name="query"><input type="submit" value="Search"></form> + </div> + <div id="sideMenu"></div> + </div> + <div id="content">//<a href="index.html">root</a> + <h1>root</h1> + <h2>Packages</h2> + <table> + <thead></thead> + <tbody> + <tr> + <td><a href="signatureTest/index.html">signatureTest</a></td> + </tr> + </tbody> + </table> +Index +Link to allpage here</div> + </body> +</html> + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/index.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/index.html new file mode 100644 index 00000000..fbee923b --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/index.html @@ -0,0 +1,36 @@ +<html> + <head> + <title>signatureTest</title> + <link href="../../styles/style.css" rel="Stylesheet"> + <script type="text/javascript" src="../../scripts/navigationLoader.js" async="async"></script> + <script>var pathToRoot = "../../";</script> + </head> + <body> + <div id="navigation"> + <div id="searchBar"> + <form action="../../-search.html" method="get" id="searchForm"><input type="search" name="query"><input type="submit" value="Search"></form> + </div> + <div id="sideMenu"></div> + </div> + <div id="content">//<a href="../index.html">root</a>/<a href="index.html">signatureTest</a> + <h1>Package signatureTest</h1> + <h2>Functions</h2> + <table> + <thead></thead> + <tbody> + <tr> + <td><a href="test.html">test</a></td> + <td>final fun <a href="test.html">test</a>(<a href="">i</a>: (<a href="">Int</a>) -> <a href="">Int</a>)</td> + <td></td> + </tr> + <tr> + <td><a href="test2.html">test2</a></td> + <td>final fun <a href="test2.html">test2</a>(<a href="">i</a>: <a href="">Int</a>.(<a href="">Int</a>) -> <a href="">Int</a>)</td> + <td></td> + </tr> + </tbody> + </table> + </div> + </body> +</html> + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test.html new file mode 100644 index 00000000..fe15c2c5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test.html @@ -0,0 +1,30 @@ +<html> + <head> + <title>test</title> + <link href="../../styles/style.css" rel="Stylesheet"> + <script type="text/javascript" src="../../scripts/navigationLoader.js" async="async"></script> + <script>var pathToRoot = "../../";</script> + </head> + <body> + <div id="navigation"> + <div id="searchBar"> + <form action="../../-search.html" method="get" id="searchForm"><input type="search" name="query"><input type="submit" value="Search"></form> + </div> + <div id="sideMenu"></div> + </div> + <div id="content">//<a href="../index.html">root</a>/<a href="index.html">signatureTest</a>/<a href="test.html">test</a> + <h1>test</h1> +final fun <a href="test.html">test</a>(<a href="">i</a>: (<a href="">Int</a>) -> <a href="">Int</a>) + <h2>Parameters</h2> + <table> + <thead></thead> + <tbody> + <tr> + <td>i</td> + </tr> + </tbody> + </table> + </div> + </body> +</html> + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test2.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test2.html new file mode 100644 index 00000000..58dbaf39 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test2.html @@ -0,0 +1,30 @@ +<html> + <head> + <title>test2</title> + <link href="../../styles/style.css" rel="Stylesheet"> + <script type="text/javascript" src="../../scripts/navigationLoader.js" async="async"></script> + <script>var pathToRoot = "../../";</script> + </head> + <body> + <div id="navigation"> + <div id="searchBar"> + <form action="../../-search.html" method="get" id="searchForm"><input type="search" name="query"><input type="submit" value="Search"></form> + </div> + <div id="sideMenu"></div> + </div> + <div id="content">//<a href="../index.html">root</a>/<a href="index.html">signatureTest</a>/<a href="test2.html">test2</a> + <h1>test2</h1> +final fun <a href="test2.html">test2</a>(<a href="">i</a>: <a href="">Int</a>.(<a href="">Int</a>) -> <a href="">Int</a>) + <h2>Parameters</h2> + <table> + <thead></thead> + <tbody> + <tr> + <td>i</td> + </tr> + </tbody> + </table> + </div> + </body> +</html> + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/navigationLoader.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/navigationLoader.js new file mode 100644 index 00000000..99a885a9 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/navigationLoader.js @@ -0,0 +1,12 @@ +onload = () => { + fetch(pathToRoot + "navigation.html") + .then(response => response.text()) + .then(data => { + document.getElementById("sideMenu").innerHTML = data; + }).then(() => { + document.querySelectorAll(".overview > a").forEach(link => { + link.setAttribute("href", pathToRoot + link.getAttribute("href")) + console.log(link.attributes["href"]) + }) + }) +}
\ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/pages.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/pages.js new file mode 100644 index 00000000..7c74ea83 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/pages.js @@ -0,0 +1,6 @@ +var pages = [ +{ "name": "root", "location": "root/index.html" }, +{ "name": "signatureTest", "location": "root/signatureTest/index.html" }, +{ "name": "test", "location": "root/signatureTest/test.html" }, +{ "name": "test2", "location": "root/signatureTest/test2.html" } +] diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/scripts.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/scripts.js new file mode 100644 index 00000000..c2e29b9f --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/scripts.js @@ -0,0 +1,11 @@ +document.getElementById("navigationFilter").oninput = function (e) { + var input = e.target.value; + var menuParts = document.getElementsByClassName("sideMenuPart") + for (let part of menuParts) { + if(part.querySelector("a").textContent.startsWith(input)) { + part.classList.remove("filtered"); + } else { + part.classList.add("filtered"); + } + } +}
\ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/search.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/search.js new file mode 100644 index 00000000..63112ac5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/search.js @@ -0,0 +1,5 @@ +var query = new URLSearchParams(window.location.search).get("query"); + document.getElementById("searchTitle").innerHTML += '"' + query + '":'; + document.getElementById("searchTable").innerHTML = pages.filter(el => el.name.startsWith(query)).reduce((acc, element) => { return acc + + '<tr><td><a href="' + element.location + '">' + element.name + '</a></td></tr>' + }, "");
\ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/styles/style.css b/plugins/base/src/test/resources/expect/signatureTest/out/styles/style.css new file mode 100644 index 00000000..4a76dd96 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/styles/style.css @@ -0,0 +1,353 @@ +@import url(https://fonts.googleapis.com/css?family=Open+Sans:300i,400,700); + + +#content { + margin-top: 3em; + margin-left: 15em; +} + +#navigation { + position: relative +} + +#sideMenu, #searchBar { + position: absolute; +} + +#sideMenu { + width: 14em; + padding-left: 0.5em; +} + +#sideMenu .sideMenuPart { + margin-left: 1em; +} + +#sideMenu img { + margin: 1em 0.25em; +} + +#sideMenu hr { + background: #DADFE6; +} + +#searchBar { + width: 100%; + pointer-events: none; +} + +#searchForm { + float: right; + pointer-events: all; +} + +.sideMenuPart > .navButton { + margin-left:0.25em +} + +.sideMenuPart > .overview .navButtonContent::after { + float: right; + content: url("../images/arrow_down.svg"); +} + +.sideMenuPart.hidden > .navButton .navButtonContent::after { + content: '\02192'; +} + +.sideMenuPart.hidden > .sideMenuPart { + display: none; +} + +.filtered > a, .filtered > .navButton { + display: none; +} + +body, table{ + font:14px/1.5 'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif; + background: #F4F4F4; + font-weight:300; + margin-left: auto; + margin-right: auto; + max-width: 1440px; +} + +table { + display: flex; + padding:5px; +} + +td:first-child { + width: 20vw; +} + +.keyword { + color:black; + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + font-size:12px; +} + +.symbol { + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + font-size:12px; +} + +.identifier { + color: darkblue; + font-size:12px; + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; +} + +h1, h2, h3, h4, h5, h6 { + color:#222; + margin:0 0 20px; +} + +p, ul, ol, table, pre, dl { + margin:0 0 20px; +} + +h1, h2, h3 { + line-height:1.1; +} + +h1 { + font-size:28px; +} + +h2 { + color:#393939; +} + +h3, h4, h5, h6 { + color:#494949; +} + +a { + color:#258aaf; + font-weight:400; + text-decoration:none; +} + +a:hover { + color: inherit; + text-decoration:underline; +} + +a small { + font-size:11px; + color:#555; + margin-top:-0.6em; + display:block; +} + +.wrapper { + width:860px; + margin:0 auto; +} + +blockquote { + border-left:1px solid #e5e5e5; + margin:0; + padding:0 0 0 20px; + font-style:italic; +} + +code, pre { + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + color:#333; + font-size:12px; +} + +pre { + display: block; +/* + padding:8px 8px; + background: #f8f8f8; + border-radius:5px; + border:1px solid #e5e5e5; +*/ + overflow-x: auto; +} + +table { + width:100%; + border-collapse:collapse; +} + +th, td { + text-align:left; + vertical-align: top; + padding:5px 10px; +} + +dt { + color:#444; + font-weight:700; +} + +th { + color:#444; +} + +img { + max-width:100%; +} + +header { + width:270px; + float:left; + position:fixed; +} + +header ul { + list-style:none; + height:40px; + + padding:0; + + background: #eee; + background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); + background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + + border-radius:5px; + border:1px solid #d2d2d2; + box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0; + width:270px; +} + +header li { + width:89px; + float:left; + border-right:1px solid #d2d2d2; + height:40px; +} + +header ul a { + line-height:1; + font-size:11px; + color:#999; + display:block; + text-align:center; + padding-top:6px; + height:40px; +} + +strong { + color:#222; + font-weight:700; +} + +header ul li + li { + width:88px; + border-left:1px solid #fff; +} + +header ul li + li + li { + border-right:none; + width:89px; +} + +header ul a strong { + font-size:14px; + display:block; + color:#222; +} + +section { + width:500px; + float:right; + padding-bottom:50px; +} + +small { + font-size:11px; +} + +hr { + border:0; + background:#e5e5e5; + height:1px; + margin:0 0 20px; +} + +footer { + width:270px; + float:left; + position:fixed; + bottom:50px; +} + +@media print, screen and (max-width: 960px) { + + div.wrapper { + width:auto; + margin:0; + } + + header, section, footer { + float:none; + position:static; + width:auto; + } + + header { + padding-right:320px; + } + + section { + border:1px solid #e5e5e5; + border-width:1px 0; + padding:20px 0; + margin:0 0 20px; + } + + header a small { + display:inline; + } + + header ul { + position:absolute; + right:50px; + top:52px; + } +} + +@media print, screen and (max-width: 720px) { + body { + word-wrap:break-word; + } + + header { + padding:0; + } + + header ul, header p.view { + position:static; + } + + pre, code { + word-wrap:normal; + } +} + +@media print, screen and (max-width: 480px) { + body { + padding:15px; + } + + header ul { + display:none; + } +} + +@media print { + body { + padding:0.4in; + font-size:12pt; + color:#444; + } +} diff --git a/plugins/base/src/test/resources/expect/signatureTest/src/signature.kt b/plugins/base/src/test/resources/expect/signatureTest/src/signature.kt new file mode 100644 index 00000000..48e56c47 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/src/signature.kt @@ -0,0 +1,4 @@ +package signatureTest + +fun test(i: (Int) -> Int) {} +fun test2(i: Int.(Int) -> Int) {}
\ No newline at end of file |