mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-13 20:02:57 +08:00
Rename SemVersion.RangeRequirement to SemVersion.Requirement
This commit is contained in:
parent
47750c5060
commit
2035e136f3
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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`, 插件在找不到此依赖时也能正常加载.
|
||||
*/
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user