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

View File

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

View File

@ -156,7 +156,7 @@ public class JvmPluginDescriptionBuilder(
public fun dependsOn(
@ResolveContext(PLUGIN_ID) pluginId: String,
isOptional: Boolean = false,
versionRequirement: SemVersion.RangeRequirement,
versionRequirement: SemVersion.Requirement,
): JvmPluginDescriptionBuilder = apply {
this.dependencies.add(PluginDependency(pluginId, versionRequirement, isOptional))
}
@ -169,7 +169,7 @@ public class JvmPluginDescriptionBuilder(
@ILoveKuriyamaMiraiForever
public fun dependsOn(
@ResolveContext(PLUGIN_ID) pluginId: String,
versionRequirement: SemVersion.RangeRequirement,
versionRequirement: SemVersion.Requirement,
): JvmPluginDescriptionBuilder = apply {
this.dependencies.add(PluginDependency(pluginId, versionRequirement, false))
}
@ -204,7 +204,7 @@ public class JvmPluginDescriptionBuilder(
public fun dependsOn(
@ResolveContext(PLUGIN_ID) pluginId: String,
isOptional: Boolean = false,
versionRequirement: SemVersionRangeRequirementBuilder.() -> SemVersion.RangeRequirement,
versionRequirement: SemVersionRangeRequirementBuilder.() -> SemVersion.Requirement,
): JvmPluginDescriptionBuilder =
apply {
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.util.SemVersionInternal
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/) 支持
@ -44,7 +44,7 @@ import net.mamoe.mirai.console.util.SemVersion.RangeRequirement
*
* 对于核心版本号, 此实现稍微比 semver 宽松一些, 允许 x.y 的存在.
*
* @see RangeRequirement
* @see Requirement
* @see SemVersion.invoke
*/
@Serializable(with = SemVersion.SemVersionAsStringSerializer::class)
@ -64,7 +64,7 @@ internal constructor(
* 一条依赖规则
* @see [parseRangeRequirement]
*/
public fun interface RangeRequirement {
public fun interface Requirement {
/** 在 [version] 满足此要求时返回 true */
public fun test(version: SemVersion): Boolean
}
@ -124,27 +124,27 @@ internal constructor(
*/
@Throws(IllegalArgumentException::class)
@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
public fun RangeRequirement.test(version: String): Boolean = test(invoke(version))
public fun Requirement.test(version: String): Boolean = test(invoke(version))
/**
* 当满足 [requirement] 时返回 true, 否则返回 false
*/
@JvmStatic
public fun SemVersion.satisfies(requirement: RangeRequirement): Boolean = requirement.test(this)
public fun SemVersion.satisfies(requirement: Requirement): Boolean = requirement.test(this)
/** for Kotlin only */
@JvmStatic
@JvmSynthetic
public operator fun RangeRequirement.contains(version: SemVersion): Boolean = test(version)
public operator fun Requirement.contains(version: SemVersion): Boolean = test(version)
/** for Kotlin only */
@JvmStatic
@JvmSynthetic
public operator fun RangeRequirement.contains(version: String): Boolean = test(version)
public operator fun Requirement.contains(version: String): Boolean = test(version)
}
@Transient

View File

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

View File

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