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