diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java index 1698503abe89..8fa353a906e8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java @@ -201,16 +201,12 @@ public String sanitizeIdentifier(String name, CasingType casingType, String esca // Sanitize any other special characters that weren't replaced name = sanitizeName(name); - // Keep track of modifications prior to casing - boolean nameWasModified = !originalName.equals(name); - // Convert casing name = casingFunction.apply(name); // If word starts with number add a prefix // Note: this must be done after casing since CamelCase will strip leading underscores if (name.matches("^\\d.*")) { - nameWasModified = true; name = casingFunction.apply(escapePrefix + '_' + name); } @@ -218,7 +214,6 @@ public String sanitizeIdentifier(String name, CasingType casingType, String esca // There is currently a bug in Rust where this doesn't work for a few reserved words :( // https://internals.rust-lang.org/t/raw-identifiers-dont-work-for-all-identifiers/9094 if (isReservedWord(name)) { - nameWasModified = true; if (this.keywordsThatDoNotSupportRawIdentifiers.contains(name) || !allowRawIdentifiers) { name = casingFunction.apply(escapePrefix + '_' + name); } else { @@ -227,8 +222,9 @@ public String sanitizeIdentifier(String name, CasingType casingType, String esca } // If the name had to be modified (not just because of casing), log the change - if (nameWasModified) { - LOGGER.warn("{} cannot be used as a {} name. Renamed to {}", casingFunction.apply(originalName), type, name); + String casedOriginalName = casingFunction.apply(originalName); + if (!casedOriginalName.equals(name)) { + LOGGER.warn("{} cannot be used as a {} name. Renamed to {}", casedOriginalName, type, name); } return name; diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/rust/AbstractRustCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/rust/AbstractRustCodegenTest.java index 300e0b9566c3..a03659a9dd16 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/rust/AbstractRustCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/rust/AbstractRustCodegenTest.java @@ -1,7 +1,13 @@ package org.openapitools.codegen.rust; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.filter.Filter; +import ch.qos.logback.core.read.ListAppender; +import ch.qos.logback.core.spi.FilterReply; import org.openapitools.codegen.CodegenProperty; import org.openapitools.codegen.languages.AbstractRustCodegen; +import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.Test; @@ -74,6 +80,32 @@ public void testSanitizeIdentifier() { Assert.assertEquals(sanitizeSnakeCase.apply(""), ""); } + @Test + public void testSanitizeIdentifierWarnsOnlyOnRename() { + Logger logger = (Logger) LoggerFactory.getLogger(AbstractRustCodegen.class); + ListAppender listAppender = new ListAppender<>(); + // Other test classes run in parallel and log on the same logger, so keep only this test's names + listAppender.addFilter(new Filter() { + @Override + public FilterReply decide(ILoggingEvent event) { + return event.getFormattedMessage().contains("SanitizeWarningProbe") ? FilterReply.NEUTRAL : FilterReply.DENY; + } + }); + listAppender.start(); + logger.addAppender(listAppender); + try { + codegen.sanitizeIdentifier("sanitize-warning-probe", AbstractRustCodegen.CasingType.CAMEL_CASE, "p", "model", true); + Assert.assertTrue(listAppender.list.isEmpty()); + + codegen.sanitizeIdentifier("sanitize/warning/probe", AbstractRustCodegen.CasingType.CAMEL_CASE, "p", "model", true); + Assert.assertEquals(listAppender.list.size(), 1); + Assert.assertEquals(listAppender.list.get(0).getFormattedMessage(), + "SanitizeWarningProbe cannot be used as a model name. Renamed to SanitizeSlashWarningSlashProbe"); + } finally { + logger.detachAppender(listAppender); + } + } + @Test public void testToVarName() { // Should be converted to snake case