Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce documentedVisibilities setting #2270

Merged

Conversation

IgnatBeresnev
Copy link
Member

No description provided.

Copy link
Member

@vmishenev vmishenev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Why public? In this case I expect I can make public entities undocumented.
  • Please add the option in the integration tests

@IgnatBeresnev
Copy link
Member Author

Why public? In this case I expect I can make public entities undocumented.

I don't see any sensible and valid general use-cases where I as a user would want to document ONLY private/protected/internal code and exclude public (within the same module/package). I can see reasons why you need control over protected/internal/private, but I don't see any to exclude publics, maybe you can provide some examples.

I can, however, see the user forget to include public into

documentedVisibilities.set(setOf(Visibility.PROTECTED))

and then wonder why it doesn't generate documentation for public code (and maybe even not notice it at first). That's the primary reason I decided to make it the default

If you want to exclude a package/module altogether, I believe there's other mechanisms for that in Dokka and it should be used instead of excluding public visibility via documentedVisibilities.

Please add the option in the integration tests

Can you please tell me which tests you have in mind? I think I've added it to all the places I could find that deal with something similar.

@vmishenev
Copy link
Member

vmishenev commented Dec 14, 2021

I mean the existence of Visibility.PUBLIC is ambiguous. Then, on the other hand, documentedVisibilities.set(setOf(Visibility.PROTECTED)) can be considered as only for protected members.
In my opinion it would be more obvious if another name, e.g. documentedExtraVisibilities, was used.

Can you please tell me which tests you have in mind?

For example
https://github.com/Kotlin/dokka/blob/master/integration-tests/gradle/projects/it-basic/build.gradle.kts

@IgnatBeresnev
Copy link
Member Author

I mean the existence of Visibility.PUBLIC is ambiguous.

Yeah, I thought about that and I agree it raises some questions, but at the same time I think it would allow for a clearer configuration where the author needs to show/stress their intentions by using the default value, like in the example below

named("main") {
    documentedVisibilities.set(
        setOf(
            Visibility.PUBLIC,
            Visibility.PRIVATE,
            Visibility.PROTECTED,
            Visibility.INTERNAL
        )
    )
    perPackageOption {
        matchingRegex.set(".*api.*")
        documentedVisibilities.set(
            setOf(
                Visibility.PUBLIC
            )
        )
    }
}

I thought about it more and out of all the options I see (all of them have trade offs, including renaming), I least dislike the idea of removing hardcoded generation for publics and generating documentation for whatever is set in documentedVisibilities. The default will be setOf(Visibility.PUBLIC).

I guess the worst that can happen in this case is the user can forge to include public if they override defaults, but at least the API will be concise.

What do you think about that?

@vmishenev
Copy link
Member

vmishenev commented Dec 14, 2021

Compare two configurations:

 ...
documentedVisibilities.set(
        setOf(
            Visibility.PRIVATE,
        )
    ) 
 ...
documentedVisibilities.set(
        setOf(
            Visibility.PUBLIC,
            Visibility.PRIVATE
        )
    ) 

Is it easy to tell the difference between them without looking in our documentation?
The configuration must be self-documenting and obvious. It is difficult to guess the default inclusion Visibility.PUBLIC into an user-filled set by the only configuration.

Why do you dislike the idea of renaming to documentedExtraVisibilities (for example)?

@IgnatBeresnev
Copy link
Member Author

It is difficult to guess the default inclusion Visibility.PUBLIC into an user-filled set by the only configuration.

As I said earlier, I agree and that's why I proposed to remove the hardcoded inclusion of public up above.

Why do you dislike the idea of renaming to documentedExtraVisibilities (for example)?

Renaming doesn't really solve it completely. It gives a hint something's off, but it raises the same question - what's the default?

  • If something's extra, then something is base. It's safe to assume public would in in the base documented visibilities, but what about protected? You'd have to look at enum values or read documentation for the definition of extra anyway
  • *extraVisibilities to me sounds like there are more visibilities than the ones defined by stdlib (like protected internal). extraDocumentedVisibilities is better, but one might think that these visibilities would be documented more than others (like extra documentation). I initially had includeVisibilities as the name, but it still doesn't solve the issue that you brought up
  • If we go by extra / additional then having Visibility.PUBLIC would make little sense and we'd have to remove it (since it wouldn't be 'additional', it'd be base), which limits the use of this enum (it won't be complete) if we or plugin creators need similar settings. We could rename the enum, of course, but ExtraVisibilities.PRIVATE looks strange

As I mentioned, I think the option with least questions would be the straightforward approach:

If you write this, you only get private documented.

documentedVisibilities.set(
        setOf(
            Visibility.PRIVATE,
        )
    ) 

If you write this, then it's public + private that are documented.

documentedVisibilities.set(
        setOf(
            Visibility.PUBLIC,
            Visibility.PRIVATE
        )
    ) 

If you don't set anything, default is documentedVisibilities = setOf(Visibility.PUBLIC). Although I would consider adding protected to the default as well. It's part of public API and javadoc task generates documentation for protected members.

@IgnatBeresnev IgnatBeresnev force-pushed the 2213-better-control-over-documented-visibilities branch from e85c976 to fc47d3e Compare December 16, 2021 12:22
@IgnatBeresnev IgnatBeresnev force-pushed the 2213-better-control-over-documented-visibilities branch from 151ac06 to 8e6079e Compare December 23, 2021 09:14
@IgnatBeresnev IgnatBeresnev merged commit bfd41ce into master Dec 23, 2021
@IgnatBeresnev IgnatBeresnev deleted the 2213-better-control-over-documented-visibilities branch December 23, 2021 11:32
owengray-google pushed a commit to owengray-google/dokka that referenced this pull request Dec 29, 2021
* Introduce `documentedVisibilities` setting

* Remove hardcoded doc generation for Visibility.PUBLIC, correct tests

* Add maven, gradle and cli integration tests for documentedVisibilities

* Fix maven plugin configuration overriding the default value

* Remove test debug prints

* Correct an inconsistency with default values and leave a comment of intentions

* Add a test for visibility of private setter
kodiakhq bot pushed a commit to RBusarow/Dispatch that referenced this pull request Jul 16, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.jetbrains.dokka](https://togithub.com/Kotlin/dokka) | `1.5.31` -> `1.7.10` | [![age](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka/1.7.10/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka/1.7.10/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka/1.7.10/compatibility-slim/1.5.31)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka/1.7.10/confidence-slim/1.5.31)](https://docs.renovatebot.com/merge-confidence/) |
| [org.jetbrains.dokka:dokka-gradle-plugin](https://togithub.com/Kotlin/dokka) | `1.5.31` -> `1.7.10` | [![age](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka:dokka-gradle-plugin/1.7.10/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka:dokka-gradle-plugin/1.7.10/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka:dokka-gradle-plugin/1.7.10/compatibility-slim/1.5.31)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.jetbrains.dokka:dokka-gradle-plugin/1.7.10/confidence-slim/1.5.31)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>Kotlin/dokka</summary>

### [`v1.7.10`](https://togithub.com/Kotlin/dokka/releases/tag/v1.7.10)

Bugfix release that addresses several blockers and regressions.

##### General

-   Support `Kotlin` 1.7.10

##### Gradle plugin

-   Do not expose `Kotlin` stdlib in plugin dependencies, this should fix errors like `Module was compiled with an incompatible version of Kotlin` when using `Dokka`. Thanks to [@&#8203;martinbonnin](https://togithub.com/martinbonnin) ([#&#8203;2543](https://togithub.com/Kotlin/dokka/issues/2543))

##### Java sources

-   Fixed build failure caused by having configured source links for `Java` code ([#&#8203;2544](https://togithub.com/Kotlin/dokka/issues/2544))
-   Fixed several exotic problems that led to build failures, all related to using annotation in `Java` sources ([#&#8203;2509](https://togithub.com/Kotlin/dokka/issues/2509), [#&#8203;2551](https://togithub.com/Kotlin/dokka/issues/2551), [#&#8203;2350](https://togithub.com/Kotlin/dokka/issues/2350))
-   Fixed `IntelliJ` platform `WARN: Attempt to load key` messages that appeared when analyzing `Java` sources ([#&#8203;2559](https://togithub.com/Kotlin/dokka/issues/2559))

### [`v1.7.0`](https://togithub.com/Kotlin/dokka/releases/tag/v1.7.0)

##### Improvements

##### General

-   Update to `Kotlin` 1.7.0, `IntelliJ` Platform 213
-   Support [definitely non-nullable types](https://kotlinlang.org/docs/whatsnew17.html#stable-definitely-non-nullable-types) ([Kotlin/dokka#2520)
-   Don't expose enum entry constructor arguments, thanks to [@&#8203;ebraminio](https://togithub.com/ebraminio) ([Kotlin/dokka#2497)
-   Preserve ordering of enum entries as in source code, previously reversed ([Kotlin/dokka#2469)
-   Improve support for inherited `Java` fields with accessors, now properly interpreted as `val`/`var` properties ([Kotlin/dokka#2481, [Kotlin/dokka#2532, [Kotlin/dokka#2540)
-   Skip `@Deprecated` members with `HIDDEN` level ([Kotlin/dokka#2486)
-   Make rendered default value dependent on source set for expect/actual declarations ([Kotlin/dokka#2449)

##### HTML format

-   Render quotes as blockquotes instead of code blocks, thanks to [@&#8203;TheOnlyTails](https://togithub.com/TheOnlyTails) ([Kotlin/dokka#2496)

##### Javadoc format

-   Make `Javadoc` pages generation deterministic ([Kotlin/dokka#2479)
-   Update shipped `jQuery` to avoid multiple CVEs, thanks to [@&#8203;ToppleTheNun](https://togithub.com/ToppleTheNun) ([Kotlin/dokka#1938)

##### GFM format

-   Support rendering of code blocks and inline code used in KDocs, thanks to [@&#8203;cosinekitty](https://togithub.com/cosinekitty) ([Kotlin/dokka#2485)

##### Kotlin-as-Java plugin

-   Include `Java` access modifiers into function signatures, thanks to [@&#8203;tripolkaandrey](https://togithub.com/tripolkaandrey) ([Kotlin/dokka#2510)

##### Gradle runner

-   Make `dokka-analysis` dependency `compileOnly`, this should help avoid compatibility problems if different versions of `Kotlin` are bundled in `Gradle` and `Dokka` ([Kotlin/dokka#2521)
-   Enable stricter validation for cacheable `Gradle` tasks, thanks to [@&#8203;3flex](https://togithub.com/3flex) ([Kotlin/dokka#2500)
-   Remove unused & redundant dependencies for `Gradle` runner, thanks to [@&#8203;3flex](https://togithub.com/3flex) ([Kotlin/dokka#2502)
-   Remove outdated suppression in `Gradle` runner, thanks to [@&#8203;3flex](https://togithub.com/3flex) ([Kotlin/dokka#2501)

##### Fixes

##### General bugfixes

-   Fixed a compiler deadlock issue which led to stalling builds in some KMP projects ([Kotlin/dokka#2480)
-   Fixed incorrect argument names of functional type parameters ([Kotlin/dokka#2478)
-   Fixed missing external docs for AndroidX libraries, thanks to [@&#8203;EdricChan03](https://togithub.com/EdricChan03) ([Kotlin/dokka#2456)
-   Fixed tests failing on Windows, thanks to [@&#8203;3flex](https://togithub.com/3flex) ([Kotlin/dokka#2507)

##### Security

-   Get rid of bundled `log4j` 1.2 that came as a transitive dependency ([Kotlin/dokka#2488)
-   Update Jackson to avoid [CVE-2020-36518](https://nvd.nist.gov/vuln/detail/CVE-2020-36518), thanks to [@&#8203;1mt](https://togithub.com/1mt) ([Kotlin/dokka#2525)

##### Plugin API

-   Decompose `base.ftl` template: now `header.ftl`, `footer.ftl` and `page_metadata.ftl` can be overridden individually ([Kotlin/dokka#2432)

##### Other

-   Add Kotlin stability & support badges, thanks to [@&#8203;etolstoy](https://togithub.com/etolstoy) ([Kotlin/dokka#2511)
-   Remove an unused runner parameter, thanks to [@&#8203;3flex](https://togithub.com/3flex) ([Kotlin/dokka#2498)
-   Correct typos, thanks to [@&#8203;PaladiRka](https://togithub.com/PaladiRka) ([Kotlin/dokka#2504) and [@&#8203;mahozad](https://togithub.com/mahozad) ([Kotlin/dokka#2506)!

Thanks to all the contributors!

### [`v1.6.21`](https://togithub.com/Kotlin/dokka/releases/tag/v1.6.21)

This is a bugfix release that mostly enables building documentation for multiplatform projects that utilize `.klib` libraries.

##### Changes

-   Support Kotlin 1.6.21
-   Update `jsoup` dependency to avoid [CVE-2021-37714](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37714) ([#&#8203;2448](https://togithub.com/Kotlin/dokka/issues/2448))

##### Bugfixes

-   Support `KLIB` libraries for common platform, previously led to `ERROR CLASS` instead of references in documentation ([#&#8203;2441](https://togithub.com/Kotlin/dokka/issues/2441))
-   Fixed a maven plugin build problem related to coroutines which only occurred in multi-module builds ([#&#8203;2461](https://togithub.com/Kotlin/dokka/issues/2461))

### [`v1.6.20`](https://togithub.com/Kotlin/dokka/releases/tag/v1.6.20)

#### Features

-   Introduce `documentedVisibilities` setting that allows including/excluding any visibility modifier in documentation. This is a more flexible replacement for `includeNonPublic`, which has now been deprecated ([Kotlin/dokka#2270)
-   Make HTML pages customizable through FreeMarker HTML templates ([Kotlin/dokka#2374)
-   Add global settings to JSON dokka CLI input ([Kotlin/dokka#2292), thanks to [@&#8203;BarkingBad](https://togithub.com/BarkingBad)!

#### HTML format changes

-   Add vertical alignment (wrapping) of signatures when 3 and more parameters are present ([Kotlin/dokka#2309)
-   Enhance primary constructor signature, display `val`/`var` keywords and default values ([Kotlin/dokka#2313)
-   Add a level of indentation to childless items in navigation tree ([Kotlin/dokka#2291)
-   Add horizontal margin to breadcrumbs delimiter ([Kotlin/dokka#2285)
-   Fixed various CSS rendering issues ([Kotlin/dokka#2284, [Kotlin/dokka#2389)

#### Bugfixes

-   Fixed `OutOfMemoryError: Metaspace`-related issues for the majority of cases ([Kotlin/dokka#2216)
-   Fixed classpath issues for HMPP libraries ([Kotlin/dokka#2431)
-   Using `@` symbol within code blocks in `.md` files doesn't lead to cropped documents anymore ([Kotlin/dokka#2418)
-   Fixed incorrect placement of HTML head tags, which led to missing favicon in multi-module projects ([Kotlin/dokka#2365)
-   Fixed resolution of ultralight methods that led to flaky signature generation ([Kotlin/dokka#2400)
-   Coroutines dispatchers are now shut down after each module pass to avoid resource leaks ([Kotlin/dokka#2325)
-   Suppressed property setters are now excluded from documentation ([Kotlin/dokka#2220)
-   Suppressing extensions doesn't fail builds anymore ([Kotlin/dokka#2348), thanks to [@&#8203;BarkingBad](https://togithub.com/BarkingBad)!
-   Fixed java getter / setter name generation for kotlin-java interop, now `isBoolean` instead of `getBoolean` ([Kotlin/dokka#2356), thanks to [@&#8203;CharlesG-Branch](https://togithub.com/CharlesG-Branch)!
-   Fixed MathJax plugin, previously completely broken ([Kotlin/dokka#2342), thanks to [@&#8203;wyskoj](https://togithub.com/wyskoj)!
-   Fixed Input/Output streams to minimize resource leaks ([Kotlin/dokka#2312, [Kotlin/dokka#2319)

#### Plugin API Changes

-   Add an extension point for rendering custom [documentation tags](https://kotlinlang.org/docs/kotlin-doc.html#block-tags) ([Kotlin/dokka#2343)
-   Add an extension point for an external documentable provider ([Kotlin/dokka#2307), thanks to [@&#8203;Kordyjan](https://togithub.com/Kordyjan)!
-   Add filtering stategies extension point and fix constructors in Kotlin-as-Java ([Kotlin/dokka#2277), thanks to [@&#8203;BarkingBad](https://togithub.com/BarkingBad)!
-   Expose Kotlin-as-Java methods that could be used not only as part of transformers ([Kotlin/dokka#2351), thanks to [@&#8203;BarkingBad](https://togithub.com/BarkingBad)!
-   Refactor Ancestry Graphs ([Kotlin/dokka#2326), thanks to [@&#8203;BarkingBad](https://togithub.com/BarkingBad)!
-   Fixed resolving of DRIs for Enum Entries ([Kotlin/dokka#2305), thanks to [@&#8203;BarkingBad](https://togithub.com/BarkingBad)!

#### General Improvements

-   Collect annotations from `package-info.java` ([Kotlin/dokka#2331), thanks  to [@&#8203;ember-rose](https://togithub.com/ember-rose)!
-   Add support for header tags (`<h1>` / `<h2>` / `<h3>`) in Javadoc ([Kotlin/dokka#2345), thanks to [@&#8203;asfalcone](https://togithub.com/asfalcone)!
-   Add an option to merge implicit expect-actual declarations, enables merging of pages for related declarations which are not connected via `expect`-`actual` keywords ([Kotlin/dokka#2316)
-   Add a note about using Dokka in a precompiled script plugin ([Kotlin/dokka#2303), thanks to [@&#8203;chkpnt](https://togithub.com/chkpnt)!
-   Fixed wrong Groovy DSL example ([Kotlin/dokka#2302), thanks to [@&#8203;chkpnt](https://togithub.com/chkpnt)!
-   Various code cleanups ([Kotlin/dokka#2165, [Kotlin/dokka#2360, [Kotlin/dokka#2364, [Kotlin/dokka#2385), thanks to [@&#8203;Goooler](https://togithub.com/Goooler)!

#### Known issues

-   Kotlin Multiplatform projects that use `.klib` libraries may experience problems. There will be a separate `1.6.21` release that will address this issue shortly.

### [`v1.6.10`](https://togithub.com/Kotlin/dokka/releases/tag/v1.6.10)

#### Changes

-   Support Kotlin 1.6.10
-   Add a sample project for versioning multi-module ([Kotlin/dokka#2170)

#### Bugfixes

-   Fix various `java.util.zip.ZipException` for JS dependencies ([Kotlin/dokka#2258)
-   Fix handling of Description Lists (`<dl>`) used in JavaDocs ([Kotlin/dokka#2259)
-   Fix for "repositories not defined" issue in versioning multimodule example ([Kotlin/dokka#2263), thanks [@&#8203;rajdeep1008](https://togithub.com/rajdeep1008)!
-   Fix multiple rendering issues for "See Also" block for html format ([Kotlin/dokka#2267)
-   Fix sample body not being embedded to documentation ([Kotlin/dokka#2216)

#### Maintenance

-   Update npm dependencies ([Kotlin/dokka#2251)
-   Bump `de.undercouch.download` to 4.1.2 ([Kotlin/dokka#2268)
-   Bump `kotlinx.coroutines` to 1.6.0 in integration tests ([Kotlin/dokka#2276)

### [`v1.6.0`](https://togithub.com/Kotlin/dokka/releases/tag/v1.6.0)

Changes:

-   **New UI**
-   Support of version plugin for single module projects
-   Allow package-level suppression ([#&#8203;2209](https://togithub.com/Kotlin/dokka/issues/2209)), thanks [@&#8203;owengray-google](https://togithub.com/owengray-google)
-   GFM: Use Markdown syntax to render lists ([#&#8203;2098](https://togithub.com/Kotlin/dokka/issues/2098)), thanks [@&#8203;sgilson](https://togithub.com/sgilson)
-   Fix names of nested inheritors
-   Fix adding new custom stylesheets in submodules
-   Add keywords `expect` and `actual` in signatures

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/RBusarow/Dispatch).

PR-URL: #488
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants