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

Add details to TraitBreakingChange EventId #1538

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Add details to TraitBreakingChange EventId
This commit adds the ChangeType and TraitId to the ValidationEventId
emitted by the TraitBreakingChange diff evaluator.
jvschneid committed Dec 14, 2022

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit f97e7673600ce131b2a385d45b9ede876224b9ac
Original file line number Diff line number Diff line change
@@ -30,6 +30,7 @@
import software.amazon.smithy.model.traits.Trait;
import software.amazon.smithy.model.traits.TraitDefinition;
import software.amazon.smithy.model.validation.ValidationEvent;
import software.amazon.smithy.utils.StringUtils;

/**
* Finds breaking changes related to when a trait is added, removed, or
@@ -170,7 +171,7 @@ private void compareResult(String path, Node left, Node right) {
}
FromSourceLocation location = !right.isNullNode() ? right : targetShape;
events.add(ValidationEvent.builder()
.id(TraitBreakingChange.class.getSimpleName())
.id(getValidationEventId(type))
.severity(rule.getDefaultedSeverity())
.shape(targetShape)
.sourceLocation(location)
@@ -180,6 +181,11 @@ private void compareResult(String path, Node left, Node right) {
}
}

private String getValidationEventId(TraitDefinition.ChangeType type) {
return String.format("%s.%s.%s", TraitBreakingChange.class.getSimpleName(),
StringUtils.capitalize(type.toString()), trait.getId());
}

// Check if a breaking change was encountered, and return the type of breaking change.
private TraitDefinition.ChangeType isChangeBreaking(TraitDefinition.ChangeType type, Node left, Node right) {
switch (type) {
Original file line number Diff line number Diff line change
@@ -46,6 +46,7 @@ public void detectsBreakingChangeWhenRemoved() {
validate("trait-removed.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getSeverity(), equalTo(Severity.ERROR));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Removed trait `smithy.example#exampleTrait`"));
});
}
@@ -77,6 +78,7 @@ public void detectsBreakingChangeWhenAdded() {
shape -> shape.addTrait(new DynamicTrait(EXAMPLE_TRAIT, Node.objectNode())).build(),
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Add.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Added trait `smithy.example#exampleTrait`"));
}
);
@@ -86,6 +88,7 @@ public void detectsBreakingChangeWhenAdded() {
public void detectsBreakingChangePresence() {
validate("trait-presence.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Removed trait `smithy.example#exampleTrait`"));
});
}
@@ -94,6 +97,7 @@ public void detectsBreakingChangePresence() {
public void detectsBreakingChangeAny() {
validate("trait-any.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Removed trait `smithy.example#exampleTrait`"));
});
}
@@ -102,6 +106,7 @@ public void detectsBreakingChangeAny() {
public void canChangeSeverity() {
validate("trait-severity.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getSeverity(), equalTo(Severity.WARNING));
});
}
@@ -110,6 +115,7 @@ public void canChangeSeverity() {
public void canIncludeCustomMessage() {
validate("trait-message.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Removed trait `smithy.example#exampleTrait`; This is bad!"));
});
@@ -122,6 +128,7 @@ public void canPathIntoListMembers() {
shape -> shape.addTrait(new DynamicTrait(EXAMPLE_TRAIT, Node.fromStrings("a", "B", "c"))).build(),
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Update.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Changed trait contents of `smithy.example#exampleTrait` at path `/1` "
+ "from \"b\" to \"B\""));
@@ -137,6 +144,7 @@ public void canPathIntoMapKeys() {
.build(),
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Removed trait contents from `smithy.example#exampleTrait` at path `/b`. "
+ "Removed value: \"B\""));
@@ -155,6 +163,7 @@ public void canPathIntoMapValues() {
},
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Update.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Changed trait contents of `smithy.example#exampleTrait` at path `/b` "
+ "from \"B\" to \"_B_\""));
@@ -172,6 +181,7 @@ public void canPathIntoStructureMembers() {
},
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Removed trait contents from `smithy.example#exampleTrait` at path "
+ "`/foo/bar`. Removed value: \"hi\""));
@@ -189,6 +199,7 @@ public void canPathIntoUnionMembers() {
},
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Update.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Changed trait contents of `smithy.example#exampleTrait` at path "
+ "`/foo` from \"hi\" to \"bye\""));