![JAR search and dependency download from the Maven repository](/logo.png)
nbbrd.heylogs.ext.semver.SemVerRule Maven / Gradle / Ivy
package nbbrd.heylogs.ext.semver;
import com.vladsch.flexmark.ast.Heading;
import com.vladsch.flexmark.util.ast.Node;
import lombok.NonNull;
import nbbrd.design.DirectImpl;
import nbbrd.design.VisibleForTesting;
import nbbrd.heylogs.Version;
import nbbrd.heylogs.spi.Rule;
import nbbrd.heylogs.spi.RuleIssue;
import nbbrd.heylogs.spi.RuleSeverity;
import nbbrd.service.ServiceProvider;
import org.semver4j.Semver;
@DirectImpl
@ServiceProvider
public final class SemVerRule implements Rule {
@Override
public @NonNull String getRuleId() {
return "semver";
}
@Override
public @NonNull String getRuleName() {
return "Semantic Versioning format";
}
@Override
public @NonNull String getRuleCategory() {
return "versioning";
}
@Override
public RuleIssue getRuleIssueOrNull(@NonNull Node node) {
return node instanceof Heading ? validateSemVer((Heading) node) : NO_RULE_ISSUE;
}
@Override
public boolean isRuleAvailable() {
return Rule.isEnabled(System.getProperties(), getRuleId());
}
@Override
public @NonNull RuleSeverity getRuleSeverity() {
return RuleSeverity.ERROR;
}
@VisibleForTesting
RuleIssue validateSemVer(Heading heading) {
if (!Version.isVersionLevel(heading)) {
return NO_RULE_ISSUE;
}
try {
Version version = Version.parse(heading);
if (version.isUnreleased()) {
return NO_RULE_ISSUE;
}
String ref = version.getRef();
return Semver.isValid(ref)
? NO_RULE_ISSUE
: RuleIssue
.builder()
.message("Invalid semver format: '" + ref + "'")
.location(heading)
.build();
} catch (IllegalArgumentException ex) {
return NO_RULE_ISSUE;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy