feat: add KDoc generation for properties, enum constants, and endpoints#32
feat: add KDoc generation for properties, enum constants, and endpoints#32halotukozak merged 14 commits intomasterfrom
Conversation
- Add description field to Endpoint, valueDescriptions to EnumModel - Parser extracts operation.description and x-enum-descriptions - ModelGenerator adds KDoc to properties and enum constants - ClientGenerator adds KDoc with summary/description/@param/@return - Tests verify all KDoc generation scenarios Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Coverage Report
|
There was a problem hiding this comment.
Pull request overview
Adds richer documentation support to the OpenAPI-to-Kotlin codegen pipeline by carrying more descriptive metadata through the parsed model and emitting it as KDoc in generated model/client code.
Changes:
- Extend intermediate model:
Endpoint.descriptionandEnumModel.valueDescriptions. - Parse
operation.descriptionandx-enum-descriptionsinto the intermediate model. - Generate KDoc for schema properties, enum constants, and client endpoint functions; add unit tests for the new KDoc behaviors.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| core/src/main/kotlin/com/avsystem/justworks/core/model/ApiSpec.kt | Adds fields to intermediate model to carry endpoint/enum documentation. |
| core/src/main/kotlin/com/avsystem/justworks/core/parser/SpecParser.kt | Extracts endpoint descriptions and enum value descriptions from OpenAPI/extensions. |
| core/src/main/kotlin/com/avsystem/justworks/core/gen/ModelGenerator.kt | Emits property and enum-constant KDoc based on descriptions/valueDescriptions. |
| core/src/main/kotlin/com/avsystem/justworks/core/gen/ClientGenerator.kt | Emits endpoint KDoc including summary/description/params/return. |
| core/src/test/kotlin/com/avsystem/justworks/core/gen/ModelGeneratorTest.kt | Adds tests for property and enum-constant KDoc generation. |
| core/src/test/kotlin/com/avsystem/justworks/core/gen/ClientGeneratorTest.kt | Adds tests for endpoint KDoc generation scenarios. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
core/src/main/kotlin/com/avsystem/justworks/core/parser/SpecParser.kt
Outdated
Show resolved
Hide resolved
core/src/main/kotlin/com/avsystem/justworks/core/gen/ClientGenerator.kt
Outdated
Show resolved
Hide resolved
core/src/main/kotlin/com/avsystem/justworks/core/gen/ClientGenerator.kt
Outdated
Show resolved
Hide resolved
core/src/main/kotlin/com/avsystem/justworks/core/gen/ModelGenerator.kt
Outdated
Show resolved
Hide resolved
- Update EnumModel to use structured `Value` objects instead of raw strings. - Adjust ModelGenerator and SpecParser for new `Value` format. - Refactor related tests to validate `Value` usage and associated descriptions.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…ndpoints - Introduced `sanitizeKdoc()` to clean input before adding to KDoc. - Updated ModelGenerator and ClientGenerator to apply sanitization. - Removed unused `simpleTypeName()` helper from Client
- Escapes comment terminators (`*/`, `/*`) to prevent broken Kotlin source generation.
- Ensure key-value consistency when mapping `x-enum-descriptions` extensions. - Replace invalid map entries with `emptyMap` for
Port KDoc generation to refactored client/ClientGenerator.kt, preserve x-enum-descriptions support and EnumModel.Value in SpecParser, fix test compilation after merge. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts: # core/src/main/kotlin/com/avsystem/justworks/core/gen/client/ClientGenerator.kt # core/src/main/kotlin/com/avsystem/justworks/core/gen/model/ModelGenerator.kt # core/src/main/kotlin/com/avsystem/justworks/core/parser/SpecParser.kt
# Conflicts: # core/src/main/kotlin/com/avsystem/justworks/core/gen/model/ModelGenerator.kt
janwawszczak
left a comment
There was a problem hiding this comment.
The new code correctly uses sanitizeKdoc() everywhere, but there are 3 pre-existing places in ModelGenerator that also emit descriptions into KDoc without sanitization (generateSealedInterface:248, generateDataClass:428, generateTypeAlias:647). Since this PR is already adding sanitization across the board, could you include these 3 lines as well for consistency?
Without this, if an OpenAPI schema description contains */, the generated Kotlin file will have a broken KDoc comment — the / will prematurely close the comment block, causing everything after it to be treated as code, resulting in a compilation error in the generated sources. Similarly, a stray / in a description could open an unexpected comment block that swallows the following generated code.
core/src/main/kotlin/com/avsystem/justworks/core/model/ApiSpec.kt
Outdated
Show resolved
Hide resolved
…r tests
- Add `sanitizeKdoc` to handle special characters in schema descriptions.
- Replace `${'$'}ref` with `$ref` in test specifications for better consistency.
…dability - Add `description = null` field in multiple test cases for improved APISpec coverage. - Refactor tests to use `assert` for clearer error messaging. - Fix minor formatting issues in `PropertyModel` and test comments. - Replace `filterIsInstance<com.squareup.kotlinpoet.TypeSpec>` with `filterIsInstance<TypeSpec>` for consistency.
janwawszczak
left a comment
There was a problem hiding this comment.
Good job! Thx for changes :)
Summary
descriptionfield toEndpoint,valueDescriptionstoEnumModeloperation.descriptionandx-enum-descriptionsModelGeneratoradds KDoc to properties with descriptions and per-constant KDoc fromvalueDescriptionsClientGeneratorgenerates KDoc with summary/description/@param/@returnfor endpointsTest plan
valueDescriptions🤖 Generated with Claude Code