Rename SemVersion.RangeRequirement to SemVersion.Requirement

This commit is contained in:
Him188 2020-09-20 18:59:37 +08:00
parent 47750c5060
commit 2035e136f3
6 changed files with 45 additions and 46 deletions

View File

@ -82,11 +82,11 @@ internal object SemVersionInternal {
} }
@JvmStatic @JvmStatic
private fun String.parseRule(): SemVersion.RangeRequirement { private fun String.parseRule(): SemVersion.Requirement {
val trimmed = trim() val trimmed = trim()
if (directVersion.matches(trimmed)) { if (directVersion.matches(trimmed)) {
val parsed = SemVersion.invoke(trimmed) val parsed = SemVersion.invoke(trimmed)
return SemVersion.RangeRequirement { return SemVersion.Requirement {
it.compareTo(parsed) == 0 it.compareTo(parsed) == 0
} }
} }
@ -96,7 +96,7 @@ internal object SemVersionInternal {
.replace("x", ".+") + .replace("x", ".+") +
"$" "$"
).toRegex() ).toRegex()
return SemVersion.RangeRequirement { return SemVersion.Requirement {
regex.matches(it.toString()) regex.matches(it.toString())
} }
} }
@ -109,7 +109,7 @@ internal object SemVersionInternal {
start = c start = c
} }
val compareRange = start..end val compareRange = start..end
return SemVersion.RangeRequirement { return SemVersion.Requirement {
it in compareRange it in compareRange
} }
} }
@ -118,19 +118,19 @@ internal object SemVersionInternal {
val version = SemVersion.invoke(result.groupValues[7]) val version = SemVersion.invoke(result.groupValues[7])
return when (operator) { return when (operator) {
">=" -> { ">=" -> {
SemVersion.RangeRequirement { it >= version } SemVersion.Requirement { it >= version }
} }
">" -> { ">" -> {
SemVersion.RangeRequirement { it > version } SemVersion.Requirement { it > version }
} }
"<=" -> { "<=" -> {
SemVersion.RangeRequirement { it <= version } SemVersion.Requirement { it <= version }
} }
"<" -> { "<" -> {
SemVersion.RangeRequirement { it < version } SemVersion.Requirement { it < version }
} }
"=" -> { "=" -> {
SemVersion.RangeRequirement { it.compareTo(version) == 0 } SemVersion.Requirement { it.compareTo(version) == 0 }
} }
else -> throw AssertionError("operator=$operator, version=$version") else -> throw AssertionError("operator=$operator, version=$version")
} }
@ -138,8 +138,8 @@ internal object SemVersionInternal {
throw UnsupportedOperationException("Cannot parse $this") throw UnsupportedOperationException("Cannot parse $this")
} }
private fun SemVersion.RangeRequirement.withRule(rule: String): SemVersion.RangeRequirement { private fun SemVersion.Requirement.withRule(rule: String): SemVersion.Requirement {
return object : SemVersion.RangeRequirement { return object : SemVersion.Requirement {
override fun test(version: SemVersion): Boolean { override fun test(version: SemVersion): Boolean {
return this@withRule.test(version) return this@withRule.test(version)
} }
@ -151,7 +151,7 @@ internal object SemVersionInternal {
} }
@JvmStatic @JvmStatic
fun parseRangeRequirement(requirement: String): SemVersion.RangeRequirement { fun parseRangeRequirement(requirement: String): SemVersion.Requirement {
if (requirement.isBlank()) { if (requirement.isBlank()) {
throw IllegalArgumentException("Invalid requirement: Empty requirement rule.") throw IllegalArgumentException("Invalid requirement: Empty requirement rule.")
} }
@ -159,11 +159,11 @@ internal object SemVersionInternal {
it.parseRule().withRule(it) it.parseRule().withRule(it)
}.let { checks -> }.let { checks ->
if (checks.size == 1) return checks[0] if (checks.size == 1) return checks[0]
SemVersion.RangeRequirement { SemVersion.Requirement {
checks.forEach { rule -> checks.forEach { rule ->
if (rule.test(it)) return@RangeRequirement true if (rule.test(it)) return@Requirement true
} }
return@RangeRequirement false return@Requirement false
}.withRule(requirement) }.withRule(requirement)
} }
} }

View File

@ -30,10 +30,9 @@ public data class PluginDependency @JvmOverloads constructor(
* *
* 版本遵循 [语义化版本 2.0 规范](https://semver.org/lang/zh-CN/), * 版本遵循 [语义化版本 2.0 规范](https://semver.org/lang/zh-CN/),
* *
* ### 示例 * @see SemVersion.Requirement
* `Requirement.buildIvy("[1.0, 2.0)")`
*/ */
public val versionRequirement: SemVersion.RangeRequirement? = null, public val versionRequirement: SemVersion.Requirement? = null,
/** /**
* 若为 `false`, 插件在找不到此依赖时也能正常加载. * 若为 `false`, 插件在找不到此依赖时也能正常加载.
*/ */

View File

@ -156,7 +156,7 @@ public class JvmPluginDescriptionBuilder(
public fun dependsOn( public fun dependsOn(
@ResolveContext(PLUGIN_ID) pluginId: String, @ResolveContext(PLUGIN_ID) pluginId: String,
isOptional: Boolean = false, isOptional: Boolean = false,
versionRequirement: SemVersion.RangeRequirement, versionRequirement: SemVersion.Requirement,
): JvmPluginDescriptionBuilder = apply { ): JvmPluginDescriptionBuilder = apply {
this.dependencies.add(PluginDependency(pluginId, versionRequirement, isOptional)) this.dependencies.add(PluginDependency(pluginId, versionRequirement, isOptional))
} }
@ -169,7 +169,7 @@ public class JvmPluginDescriptionBuilder(
@ILoveKuriyamaMiraiForever @ILoveKuriyamaMiraiForever
public fun dependsOn( public fun dependsOn(
@ResolveContext(PLUGIN_ID) pluginId: String, @ResolveContext(PLUGIN_ID) pluginId: String,
versionRequirement: SemVersion.RangeRequirement, versionRequirement: SemVersion.Requirement,
): JvmPluginDescriptionBuilder = apply { ): JvmPluginDescriptionBuilder = apply {
this.dependencies.add(PluginDependency(pluginId, versionRequirement, false)) this.dependencies.add(PluginDependency(pluginId, versionRequirement, false))
} }
@ -204,7 +204,7 @@ public class JvmPluginDescriptionBuilder(
public fun dependsOn( public fun dependsOn(
@ResolveContext(PLUGIN_ID) pluginId: String, @ResolveContext(PLUGIN_ID) pluginId: String,
isOptional: Boolean = false, isOptional: Boolean = false,
versionRequirement: SemVersionRangeRequirementBuilder.() -> SemVersion.RangeRequirement, versionRequirement: SemVersionRangeRequirementBuilder.() -> SemVersion.Requirement,
): JvmPluginDescriptionBuilder = ): JvmPluginDescriptionBuilder =
apply { apply {
this.dependencies.add(PluginDependency(pluginId, this.dependencies.add(PluginDependency(pluginId,

View File

@ -25,7 +25,7 @@ import net.mamoe.mirai.console.compiler.common.ResolveContext.Kind.PLUGIN_VERSIO
import net.mamoe.mirai.console.internal.data.map import net.mamoe.mirai.console.internal.data.map
import net.mamoe.mirai.console.internal.util.SemVersionInternal import net.mamoe.mirai.console.internal.util.SemVersionInternal
import net.mamoe.mirai.console.util.SemVersion.Companion.equals import net.mamoe.mirai.console.util.SemVersion.Companion.equals
import net.mamoe.mirai.console.util.SemVersion.RangeRequirement import net.mamoe.mirai.console.util.SemVersion.Requirement
/** /**
* [语义化版本](https://semver.org/lang/zh-CN/) 支持 * [语义化版本](https://semver.org/lang/zh-CN/) 支持
@ -44,7 +44,7 @@ import net.mamoe.mirai.console.util.SemVersion.RangeRequirement
* *
* 对于核心版本号, 此实现稍微比 semver 宽松一些, 允许 x.y 的存在. * 对于核心版本号, 此实现稍微比 semver 宽松一些, 允许 x.y 的存在.
* *
* @see RangeRequirement * @see Requirement
* @see SemVersion.invoke * @see SemVersion.invoke
*/ */
@Serializable(with = SemVersion.SemVersionAsStringSerializer::class) @Serializable(with = SemVersion.SemVersionAsStringSerializer::class)
@ -64,7 +64,7 @@ internal constructor(
* 一条依赖规则 * 一条依赖规则
* @see [parseRangeRequirement] * @see [parseRangeRequirement]
*/ */
public fun interface RangeRequirement { public fun interface Requirement {
/** 在 [version] 满足此要求时返回 true */ /** 在 [version] 满足此要求时返回 true */
public fun test(version: SemVersion): Boolean public fun test(version: SemVersion): Boolean
} }
@ -124,27 +124,27 @@ internal constructor(
*/ */
@Throws(IllegalArgumentException::class) @Throws(IllegalArgumentException::class)
@JvmStatic @JvmStatic
public fun parseRangeRequirement(requirement: String): RangeRequirement = SemVersionInternal.parseRangeRequirement(requirement) public fun parseRangeRequirement(requirement: String): Requirement = SemVersionInternal.parseRangeRequirement(requirement)
/** @see [RangeRequirement.test] */ /** @see [Requirement.test] */
@JvmStatic @JvmStatic
public fun RangeRequirement.test(version: String): Boolean = test(invoke(version)) public fun Requirement.test(version: String): Boolean = test(invoke(version))
/** /**
* 当满足 [requirement] 时返回 true, 否则返回 false * 当满足 [requirement] 时返回 true, 否则返回 false
*/ */
@JvmStatic @JvmStatic
public fun SemVersion.satisfies(requirement: RangeRequirement): Boolean = requirement.test(this) public fun SemVersion.satisfies(requirement: Requirement): Boolean = requirement.test(this)
/** for Kotlin only */ /** for Kotlin only */
@JvmStatic @JvmStatic
@JvmSynthetic @JvmSynthetic
public operator fun RangeRequirement.contains(version: SemVersion): Boolean = test(version) public operator fun Requirement.contains(version: SemVersion): Boolean = test(version)
/** for Kotlin only */ /** for Kotlin only */
@JvmStatic @JvmStatic
@JvmSynthetic @JvmSynthetic
public operator fun RangeRequirement.contains(version: String): Boolean = test(version) public operator fun Requirement.contains(version: String): Boolean = test(version)
} }
@Transient @Transient

View File

@ -11,16 +11,16 @@
package net.mamoe.mirai.console.util package net.mamoe.mirai.console.util
/** /**
* 构造 [SemVersion.RangeRequirement] DSL * 构造 [SemVersion.Requirement] DSL
*/ */
public object SemVersionRangeRequirementBuilder { public object SemVersionRangeRequirementBuilder {
/** @see [SemVersion.parseRangeRequirement] */ /** @see [SemVersion.parseRangeRequirement] */
@ILoveHim188moeForever @ILoveHim188moeForever
public fun parse(rule: String): SemVersion.RangeRequirement = SemVersion.parseRangeRequirement(rule) public fun parse(rule: String): SemVersion.Requirement = SemVersion.parseRangeRequirement(rule)
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun SemVersion.RangeRequirement.or(other: SemVersion.RangeRequirement): SemVersion.RangeRequirement { public infix fun SemVersion.Requirement.or(other: SemVersion.Requirement): SemVersion.Requirement {
return object : SemVersion.RangeRequirement { return object : SemVersion.Requirement {
override fun test(version: SemVersion): Boolean { override fun test(version: SemVersion): Boolean {
return this@or.test(version) || other.test(version) return this@or.test(version) || other.test(version)
} }
@ -32,17 +32,17 @@ public object SemVersionRangeRequirementBuilder {
} }
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun String.or(other: String): SemVersion.RangeRequirement = parse(this) or parse(other) public infix fun String.or(other: String): SemVersion.Requirement = parse(this) or parse(other)
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun SemVersion.RangeRequirement.or(other: String): SemVersion.RangeRequirement = or(parse(other)) public infix fun SemVersion.Requirement.or(other: String): SemVersion.Requirement = or(parse(other))
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun String.or(other: SemVersion.RangeRequirement): SemVersion.RangeRequirement = parse(this) or other public infix fun String.or(other: SemVersion.Requirement): SemVersion.Requirement = parse(this) or other
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun SemVersion.RangeRequirement.and(other: SemVersion.RangeRequirement): SemVersion.RangeRequirement { public infix fun SemVersion.Requirement.and(other: SemVersion.Requirement): SemVersion.Requirement {
return object : SemVersion.RangeRequirement { return object : SemVersion.Requirement {
override fun test(version: SemVersion): Boolean { override fun test(version: SemVersion): Boolean {
return this@and.test(version) && other.test(version) return this@and.test(version) && other.test(version)
} }
@ -54,17 +54,17 @@ public object SemVersionRangeRequirementBuilder {
} }
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun String.and(other: String): SemVersion.RangeRequirement = parse(this) and parse(other) public infix fun String.and(other: String): SemVersion.Requirement = parse(this) and parse(other)
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun SemVersion.RangeRequirement.and(other: String): SemVersion.RangeRequirement = and(parse(other)) public infix fun SemVersion.Requirement.and(other: String): SemVersion.Requirement = and(parse(other))
@ILoveHim188moeForever @ILoveHim188moeForever
public infix fun String.and(other: SemVersion.RangeRequirement): SemVersion.RangeRequirement = parse(this) and other public infix fun String.and(other: SemVersion.Requirement): SemVersion.Requirement = parse(this) and other
@Suppress("NOTHING_TO_INLINE") @Suppress("NOTHING_TO_INLINE")
@ILoveHim188moeForever @ILoveHim188moeForever
public inline fun custom(rule: SemVersion.RangeRequirement): SemVersion.RangeRequirement = rule public inline fun custom(rule: SemVersion.Requirement): SemVersion.Requirement = rule
/** /**
* 标注一个 [SemVersionRangeRequirementBuilder] DSL * 标注一个 [SemVersionRangeRequirementBuilder] DSL

View File

@ -43,12 +43,12 @@ internal class TestSemVersion {
@Test @Test
internal fun testRequirement() { internal fun testRequirement() {
fun SemVersion.RangeRequirement.assert(version: String): SemVersion.RangeRequirement { fun SemVersion.Requirement.assert(version: String): SemVersion.Requirement {
assert(test(version)) { version } assert(test(version)) { version }
return this return this
} }
fun SemVersion.RangeRequirement.assertFalse(version: String): SemVersion.RangeRequirement { fun SemVersion.Requirement.assertFalse(version: String): SemVersion.Requirement {
assert(!test(version)) { version } assert(!test(version)) { version }
return this return this
} }