From 9cb95f82a41f449c2c8e07df37c8ffac4cebc8fe Mon Sep 17 00:00:00 2001 From: Issy Szemeti Date: Thu, 1 Jan 2026 15:13:32 +0000 Subject: [PATCH 1/7] Render operation ID changed info --- .../openapidiff/core/output/MarkdownRender.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java index 73bd12cc..5da39c3b 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java @@ -21,6 +21,7 @@ import org.openapitools.openapidiff.core.exception.RendererException; import org.openapitools.openapidiff.core.model.*; import org.openapitools.openapidiff.core.model.schema.ChangedOneOfSchema; +import org.openapitools.openapidiff.core.model.schema.ChangedOperationId; import org.openapitools.openapidiff.core.utils.RefPointer; import org.openapitools.openapidiff.core.utils.RefType; import org.slf4j.Logger; @@ -132,6 +133,10 @@ protected void listEndpoints( operation.getHttpMethod().toString(), operation.getPathUrl(), operation.getSummary())); + if (operation.getOperationId() != null && operation.getOperationId().isDifferent()) { + safelyAppend(outputStreamWriter, titleH5("Operation ID:")); + safelyAppend(outputStreamWriter, operationId(operation.getOperationId())); + } if (result(operation.getParameters()).isDifferent()) { safelyAppend(outputStreamWriter, titleH5("Parameters:")); safelyAppend(outputStreamWriter, parameters(operation.getParameters())); @@ -541,6 +546,10 @@ protected String metadata(String beginning, String name, ChangedMetadata changed } } + protected String operationId(ChangedOperationId operationId) { + return String.format("\nChanged: %s to %s\n\n", code(operationId.getLeft()), code(operationId.getRight())); + } + protected String metadata(String metadata) { return metadata("", metadata); } From 2c682fd7e8b862b29e15b5ce4f4da258dd53d5aa Mon Sep 17 00:00:00 2001 From: Issy Szemeti Date: Thu, 1 Jan 2026 15:14:49 +0000 Subject: [PATCH 2/7] Use safe operation --- .../openapitools/openapidiff/core/output/MarkdownRender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java index 5da39c3b..b7e3d6a4 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java @@ -133,7 +133,7 @@ protected void listEndpoints( operation.getHttpMethod().toString(), operation.getPathUrl(), operation.getSummary())); - if (operation.getOperationId() != null && operation.getOperationId().isDifferent()) { + if (result(operation.getOperationId()).isDifferent()) { safelyAppend(outputStreamWriter, titleH5("Operation ID:")); safelyAppend(outputStreamWriter, operationId(operation.getOperationId())); } From 530687e8dc63ccae7a95f7b327502b01510733dd Mon Sep 17 00:00:00 2001 From: Issy Szemeti Date: Thu, 1 Jan 2026 15:28:52 +0000 Subject: [PATCH 3/7] Implement operation ID diffing in ConsoleRender --- .../openapidiff/core/output/ConsoleRender.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java index e41f7aa9..2b860723 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java @@ -15,6 +15,7 @@ import org.apache.commons.lang3.StringUtils; import org.openapitools.openapidiff.core.exception.RendererException; import org.openapitools.openapidiff.core.model.*; +import org.openapitools.openapidiff.core.model.schema.ChangedOperationId; import org.openapitools.openapidiff.core.utils.RefPointer; import org.openapitools.openapidiff.core.utils.RefType; @@ -79,6 +80,12 @@ private void ol_changed( safelyAppend(outputStreamWriter, itemEndpoint(method, pathUrl, desc)); + if (result(operation.getOperationId()).isDifferent()) { + safelyAppend(outputStreamWriter, StringUtils.repeat(' ', 2)); + safelyAppend(outputStreamWriter, "Operation ID:"); + safelyAppend(outputStreamWriter, System.lineSeparator()); + safelyAppend(outputStreamWriter, ul_operation_id(operation.getOperationId())); + } if (result(operation.getParameters()).isDifferent()) { safelyAppend(outputStreamWriter, StringUtils.repeat(' ', 2)); safelyAppend(outputStreamWriter, "Parameter:"); @@ -301,6 +308,10 @@ private String itemEndpoint(String method, String path, String desc) { return String.format("- %s %s%n", StringUtils.rightPad(method, 6), path); } + private String ul_operation_id(ChangedOperationId operationId) { + return String.format(" - Changed %s to %s\n", operationId.getLeft(), operationId.getRight()); + } + public String renderBody(String ol_new, String ol_miss, String ol_deprec, String ol_changed) { return ol_new + ol_miss + ol_deprec + ol_changed; } From 2c54cd930b8093bb3d1ccaad5c383ec8cb46ae0d Mon Sep 17 00:00:00 2001 From: Issy Szemeti Date: Thu, 1 Jan 2026 15:34:44 +0000 Subject: [PATCH 4/7] Implement ascii rendering --- .../core/output/AsciidocRender.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java index b6afc6f5..747c7e64 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java @@ -14,7 +14,19 @@ import java.util.Optional; import org.apache.commons.lang3.StringUtils; import org.openapitools.openapidiff.core.exception.RendererException; -import org.openapitools.openapidiff.core.model.*; +import org.openapitools.openapidiff.core.model.ChangedApiResponse; +import org.openapitools.openapidiff.core.model.ChangedContent; +import org.openapitools.openapidiff.core.model.ChangedMediaType; +import org.openapitools.openapidiff.core.model.ChangedMetadata; +import org.openapitools.openapidiff.core.model.ChangedOpenApi; +import org.openapitools.openapidiff.core.model.ChangedOperation; +import org.openapitools.openapidiff.core.model.ChangedParameter; +import org.openapitools.openapidiff.core.model.ChangedParameters; +import org.openapitools.openapidiff.core.model.ChangedResponse; +import org.openapitools.openapidiff.core.model.ChangedSchema; +import org.openapitools.openapidiff.core.model.DiffContext; +import org.openapitools.openapidiff.core.model.DiffResult; +import org.openapitools.openapidiff.core.model.Endpoint; import org.openapitools.openapidiff.core.utils.RefPointer; import org.openapitools.openapidiff.core.utils.RefType; @@ -92,6 +104,12 @@ private void ol_changed( safelyAppend(outputStreamWriter, itemEndpoint(method, pathUrl, desc)); safelyAppend(outputStreamWriter, System.lineSeparator()); + if (result(operation.getOperationId()).isDifferent()) { + safelyAppend(outputStreamWriter, "* Operation ID:"); + safelyAppend(outputStreamWriter, System.lineSeparator()); + safelyAppend(outputStreamWriter, String.format("** Changed %s to %s", operation.getOperationId().getLeft(), operation.getOperationId().getRight())); + safelyAppend(outputStreamWriter, System.lineSeparator()); + } if (result(operation.getParameters()).isDifferent()) { safelyAppend(outputStreamWriter, "* Parameter:"); safelyAppend(outputStreamWriter, System.lineSeparator()); From 66582ffb584cfd327fbbea43555ee933183cbd66 Mon Sep 17 00:00:00 2001 From: Issy Szemeti Date: Thu, 1 Jan 2026 15:43:52 +0000 Subject: [PATCH 5/7] Implement HTML rendering for Operation ID change --- .../openapidiff/core/output/HtmlRender.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java index 518f1071..76bfd024 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java @@ -16,6 +16,7 @@ import static j2html.TagCreator.meta; import static j2html.TagCreator.ol; import static j2html.TagCreator.p; +import static j2html.TagCreator.pre; import static j2html.TagCreator.span; import static j2html.TagCreator.title; import static j2html.TagCreator.ul; @@ -33,6 +34,7 @@ import j2html.tags.specialized.HtmlTag; import j2html.tags.specialized.LiTag; import j2html.tags.specialized.OlTag; +import j2html.tags.specialized.SpanTag; import j2html.tags.specialized.UlTag; import java.io.IOException; import java.io.OutputStreamWriter; @@ -56,6 +58,7 @@ import org.openapitools.openapidiff.core.model.DiffContext; import org.openapitools.openapidiff.core.model.DiffResult; import org.openapitools.openapidiff.core.model.Endpoint; +import org.openapitools.openapidiff.core.model.schema.ChangedOperationId; import org.openapitools.openapidiff.core.utils.RefPointer; import org.openapitools.openapidiff.core.utils.RefType; @@ -202,6 +205,11 @@ private OlTag ol_changed(List changedOperations) { .orElse(""); UlTag ul_detail = ul().withClass("detail"); + if (result(changedOperation.getOperationId()).isDifferent()) { + ul_detail.with( + li().with(h3("Operation ID")).with(ul_operation_id(changedOperation.getOperationId())) + ); + } if (result(changedOperation.getParameters()).isDifferent()) { ul_detail.with( li().with(h3("Parameters")).with(ul_param(changedOperation.getParameters()))); @@ -561,4 +569,12 @@ private LiTag li_changedParam(ChangedParameter changeParam) { } return li; } + + private UlTag ul_operation_id(ChangedOperationId changedOperationId) { + SpanTag spanTag = span("Changed"); + spanTag.with(pre(changedOperationId.getLeft())); + spanTag.withText("to"); + spanTag.with(pre(changedOperationId.getRight())); + return ul().withClass("change").with(li().with(spanTag)); + } } From 3aa00d378e7fc177a4cb9288386da93c1325aff7 Mon Sep 17 00:00:00 2001 From: Issy Szemeti Date: Thu, 1 Jan 2026 16:17:21 +0000 Subject: [PATCH 6/7] Fix rendering in HTML --- .../openapitools/openapidiff/core/output/HtmlRender.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java index 76bfd024..e18721d3 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java @@ -571,10 +571,6 @@ private LiTag li_changedParam(ChangedParameter changeParam) { } private UlTag ul_operation_id(ChangedOperationId changedOperationId) { - SpanTag spanTag = span("Changed"); - spanTag.with(pre(changedOperationId.getLeft())); - spanTag.withText("to"); - spanTag.with(pre(changedOperationId.getRight())); - return ul().withClass("change").with(li().with(spanTag)); + return ul().withClass("change").with(li().withText("Changed " + changedOperationId.getLeft() + " to " + changedOperationId.getRight())); } } From 5c1b752a539995393ef6a2a04a0122c5d0dcd5a1 Mon Sep 17 00:00:00 2001 From: Issy Szemeti Date: Thu, 1 Jan 2026 16:27:07 +0000 Subject: [PATCH 7/7] Null check Format --- .../openapitools/openapidiff/core/output/HtmlRender.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java index e18721d3..1280a9ab 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/HtmlRender.java @@ -571,6 +571,13 @@ private LiTag li_changedParam(ChangedParameter changeParam) { } private UlTag ul_operation_id(ChangedOperationId changedOperationId) { - return ul().withClass("change").with(li().withText("Changed " + changedOperationId.getLeft() + " to " + changedOperationId.getRight())); + return ul().withClass("change").with( + li().withText( + "Changed " + + Optional.ofNullable(changedOperationId.getLeft()).orElse("") + + " to " + + Optional.ofNullable(changedOperationId.getRight()).orElse("") + ) + ); } }