From bace377d1e50ac544900cab149bf26c39f538598 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Wed, 28 Oct 2020 15:38:25 +0800 Subject: [PATCH] Fix semantic version and plugin id regexes --- .../mirai/console/plugin/description/PluginDescription.kt | 4 ++-- .../src/main/kotlin/org/example/myplugin/MyPluginMain.kt | 2 +- .../intellij/diagnostics/ContextualParametersChecker.kt | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description/PluginDescription.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description/PluginDescription.kt index 608409ff0..7c0053bae 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description/PluginDescription.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description/PluginDescription.kt @@ -90,7 +90,7 @@ public interface PluginDescription { * - `v1.0` (不允许 "v") * - `V1.0` (不允许 "V") * - * @see Semver 语义化版本. 允许 [宽松][Semver.SemverType.LOOSE] 类型版本. + * @see SemVersion 语义化版本. */ @ResolveContext(SEMANTIC_VERSION) public val version: SemVersion @@ -116,7 +116,7 @@ public interface PluginDescription { * * @see PluginDescription.id */ - public val ID_REGEX: Regex = Regex("""([a-zA-Z]+(?:\.[a-zA-Z0-9]+)*)\.([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)""") + public val ID_REGEX: Regex = Regex("""([a-zA-Z][a-zA-Z0-9]*(?:\.[a-zA-Z][a-zA-Z0-9]*)*)\.([a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*)""") /** * 在 [PluginDescription.id] 和 [PluginDescription.name] 中禁止用的完全匹配名称列表. diff --git a/tools/intellij-plugin/run/projects/test-project/src/main/kotlin/org/example/myplugin/MyPluginMain.kt b/tools/intellij-plugin/run/projects/test-project/src/main/kotlin/org/example/myplugin/MyPluginMain.kt index 5c46ce9ee..8856e0d1b 100644 --- a/tools/intellij-plugin/run/projects/test-project/src/main/kotlin/org/example/myplugin/MyPluginMain.kt +++ b/tools/intellij-plugin/run/projects/test-project/src/main/kotlin/org/example/myplugin/MyPluginMain.kt @@ -13,7 +13,7 @@ const val T = "org.example" // 编译期常量 object MyPluginMain : KotlinPlugin( JvmPluginDescription( T, - "1.0.0-M4", + "1.0-M4", ) { name(".") } diff --git a/tools/intellij-plugin/src/main/kotlin/net/mamoe/mirai/console/intellij/diagnostics/ContextualParametersChecker.kt b/tools/intellij-plugin/src/main/kotlin/net/mamoe/mirai/console/intellij/diagnostics/ContextualParametersChecker.kt index 364026232..31b722281 100644 --- a/tools/intellij-plugin/src/main/kotlin/net/mamoe/mirai/console/intellij/diagnostics/ContextualParametersChecker.kt +++ b/tools/intellij-plugin/src/main/kotlin/net/mamoe/mirai/console/intellij/diagnostics/ContextualParametersChecker.kt @@ -24,11 +24,11 @@ import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext import java.util.* /** - * Checks paramters with [ResolveContextKind] + * Checks parameters with [ResolveContextKind] */ class ContextualParametersChecker : DeclarationChecker { companion object { - private val ID_REGEX: Regex = Regex("""([a-zA-Z]+(?:\.[a-zA-Z0-9]+)*)\.([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)""") + private val ID_REGEX: Regex = Regex("""([a-zA-Z][a-zA-Z0-9]*(?:\.[a-zA-Z][a-zA-Z0-9]*)*)\.([a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*)""") private val FORBIDDEN_ID_NAMES: Array<String> = arrayOf("main", "console", "plugin", "config", "data") private const val syntax = """类似于 "net.mamoe.mirai.example-plugin", 其中 "net.mamoe.mirai" 为 groupId, "example-plugin" 为插件名""" @@ -37,7 +37,7 @@ class ContextualParametersChecker : DeclarationChecker { * https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string */ private val SEMANTIC_VERSIONING_REGEX = - Regex("""^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?${'$'}""") + Regex("""^(0|[1-9]\d*)\.(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?${'$'}""") fun checkPluginId(inspectionTarget: PsiElement, value: String): Diagnostic? { if (value.isBlank()) return ILLEGAL_PLUGIN_DESCRIPTION.on(inspectionTarget, "插件 Id 不能为空. \n插件 Id$syntax")